考虑一下LMAX体系结构马丁·福勒的描述中的以下场景
我将使用一个简单的非LMAX示例来说明。想象一下,你正在用信用卡订购果冻豆。<...> 在LMAX体系结构中,您可以将此操作分成两部分。第一个操作将捕获订单信息并通过向信用卡公司输出一个事件(请求的信用卡验证)来完成。然后,Business处理器将继续为其他客户处理事件,直到在输入事件流中接收到信用卡验证的事件为止。在处理该事件时,它将执行该订单的确认任务。
因此,订单被保存在内存中,直到收到付款处理的结果。
现在让我们假设,而不是信用卡处理步骤,我们有一个步骤,需要更多的时间,例如:我们需要执行库存检查,在那里必须有人亲自确认我们有特殊口味的果冻豆,已经被订购。这可能需要一个小时。
如果是这样的话,会不会导致内存中数据的增长,因为潜在的大量订单将等待库存状态更新事件?
在这种情况下,我们可能需要从内存中删除订单,并将其作为输出事件的一部分,外部系统(库存)负责生成另一个包含订单细节的输入事件。
我在这种方法中看到的问题是,我们不能将库存作为业务逻辑处理器的一部分。
我们该如何解决这个问题?
发布于 2013-03-13 09:53:59
金融交易中的工作订单可以停留几天,甚至几个月,作为工作集的一部分。例如,等待期货合约到期。客户账户也是相似的。我所说的“工作集”是指目前活跃的交易/订单/销售等。一旦交易完成,它就成为历史数据的一部分。
内存系统现在如此庞大,即一台服务器中的数百个GBs,以至于几乎所有业务的工作集都很容易地被放入内存中。此外,可用内存大小正在以比任何大型企业增长更快的速度增长。
您描述的场景并不是一个真正的问题。当您需要保存传统的数据库或基于文件的系统更适合的所有历史数据时,就会成为一个问题。
一个简单的练习是计算活动实体或工作集所需的内存,然后将其与现代服务器中可用的内存进行比较。有可能在内存中保留数以百万计的活动实体。
https://stackoverflow.com/questions/15379911
复制相似问题