几个月前,我听说亚马逊倾向于将所有交易运输代码(也有另一个问题,它们分别称为“分片”)更改为非交易代码。
some_buy_method()
check_item_stock()
remove_item_from_stock()
add_to_order()
end
答案 0 :(得分:2)
第一个答案:有困难。
第二个答案:可能带来灾难性后果。
我怀疑亚马逊想要消除所有交易。他们可能想要做的是放宽ACID条件以提高可伸缩性和availability:他们仍然需要原子性和持久性,但必须重构commutativity and idempotence的操作并添加{{3处理降低的一致性和隔离度。
答案 1 :(得分:1)
我听说eBay也在没有交易的情况下运行,也许亚马逊会采用类似的方法。
来自The eBay Architecture(幻灯片18,23):
绝对没有客户端交易
我们如何将其拉下来?
- 仔细订购数据库操作
- 通过
恢复 •异步恢复事件
•对帐批次 •故障转移到异步流原理
- 避免死锁
- 避免耦合可用性
- 更新并发性 - 无缝处理拆分eBay
(抱歉格式化)
对我来说,看起来如果没有ACID交易,您需要手动检查,恢复或补偿。但确切的业务逻辑是已知的,因此可以设计出适当的错误处理或冲突策略。这也使我在BPEL中处理错误,事情是异步的,我们编写补偿处理程序。