【发布时间】:2021-09-23 11:52:39
【问题描述】:
其实是我想了2个月的面试题,找不到合适的架构。
问题
我们想构建一个小型分析系统,用于检测订单欺诈。
系统有以下要求
- 不允许使用市场上的任何技术(
MySql、Redis、Hadoop、S3等) - 需要随着数据量的增长而扩展
- 只是一堆机器,有磁盘和相当大的内存
- 10M 每天写入次数
系统需要提供以下API
-
/insertOrder(order): Order
将订单添加到存储中。该订单可以被视为大小为 1-10KBs 的 blob,其中orderId、beginTime和finishTime作为区分字段 -
/getLongestNOrdersByDuration(n: int, startTime: datetime, endTime: datetime): Order[]
检索在startTime和endTime之间开始的最长N 个订单,
按持续时间finishTime - beginTime衡量 -
/getShortestNOrdersByDuration(n: int, startTime: datetime, endTime: datetime): Order[]
检索在startTime和endTime之间开始的最短N 个订单,
按持续时间finishTime - beginTime衡量
【问题讨论】:
-
您能否进一步评论您所说的“不允许使用市场上的任何技术”是什么意思?我会看一下流处理和事件驱动解决方案的概念。可以将订单视为存储在事件存储中的事件。流式处理允许您在事件发生时持续分析事件,从而在欺诈尝试的情况下为相关方触发其他事件。
-
我不确定您是否可以考虑像 Kafka 这样的解决方案?它能够满足可扩展性、一堆机器和 10M 写入/天的设计约束(当然取决于硬件规格和集群中的节点数量)。如果不允许评估此类解决方案,我想知道为什么不呢?
-
@KDW 这是一个人为的限制,因为这个问题是一个面试问题并且测试我们自己弥补它的能力
标签: architecture distributed-system system-design distributed-database