考虑LMAX架构description from Martin Fowler中的以下场景:
我将使用一个简单的非LMAX示例来说明。想象一下你是谁 用信用卡订购果冻豆。 < ...>
在LMAX架构中,您可以将此操作拆分为两个。该 第一次操作将捕获订单信息并完成 输出事件(请求信用卡验证)到信用证 卡公司。然后,业务逻辑处理器将继续运行 处理其他客户的事件,直到收到一个 输入事件流中的信用卡验证事件。在处理上 该事件将执行该订单的确认任务。
因此,订单将保留在内存中,直到收到付款处理结果为止。
现在让我们假设代替信用卡处理步骤,我们需要花费更多时间的步骤,例如:我们需要执行库存检查,有人必须在物理上验证我们是否具有特定的果冻豆味道已订购。这可能需要一个小时。
如果是这种情况,不会导致内存中保存的数据增长,因为很多订单可能会等待库存状态更新事件?
可能在这种情况下,我们需要从内存中删除订单并将其作为输出事件的一部分包含在内,外部系统(库存)负责生成包含订单详细信息的另一个输入事件。
我用这种方法看到的问题是,我们不能将库存作为业务逻辑处理器的一部分。
关于我们如何解决这个问题的想法?
答案 0 :(得分:10)
作为工作集的一部分,金融交易所的工作订单可以保持数天甚至数月。例如,等待期货合约到期。客户帐户也类似。 “工作集”是指当前有效的交易/订单/销售等。交易完成后,它就成为历史数据的一部分。
内存系统现在非常庞大,即单个服务器中有数百GB,几乎所有业务的工作集都很容易融入内存。此外,可用内存大小的增长速度远远超过任何大型企业的增长速度。
您描述的场景并不是真正的问题。当您需要保存传统数据库或基于文件的系统更适合的所有历史数据时,可能会出现问题。
一个简单的练习是计算活动实体或工作集所需的内存,然后将其与现代服务器中可用的内存进行比较。可以在内存中保留数百万个活动实体。