几个月前,我听说亚马逊倾向于将其所有的事务性发货代码(这也有另一个问题,它们是分布式的,也就是“分片”)改为非事务性代码。
some_buy_method()
check_item_stock()
remove_item_from_stock()
add_to_order()
end发布于 2010-07-20 22:25:38
我听说eBay也是无事务运行的,也许亚马逊也会采用类似的方法。
来自The eBay Architecture (幻灯片18,23):
绝对没有客户端事务
我们该怎么做呢?
-仔细排序数据库操作
-通过以下方式恢复
·异步恢复事件
·对帐批处理·故障转移到异步流
基本原理
-避免死锁
-避免耦合可用性
-更新并发-无缝处理拆分eBay
(抱歉,格式错误)
在我看来,如果没有ACID事务,您需要手动检查、恢复或补偿。但确切的业务逻辑是已知的,因此可以设计出适当的错误处理或冲突策略。这也使我在BPEL中处理错误,在BPEL中,事情是异步的,我们编写补偿处理程序。
发布于 2010-07-20 22:13:15
第一个答案是:有困难。
第二个答案:潜在的灾难性后果。
我怀疑亚马逊是否想要消除所有交易。他们可能想要做的是放松ACID条件以提高可伸缩性和availability:他们仍然想要原子性和持久性,但必须为commutativity and idempotence重构操作并添加compensating transactions来处理降低的一致性和隔离性。
https://stackoverflow.com/questions/3290736
复制相似问题