几个月前,我听说亚马逊倾向于将所有交易运输代码(也存在另一个问题,它们分发为“分片”)转换为非事务代码。如何将交易相关代码转换为非交易相关代码?
some_buy_method()
check_item_stock()
remove_item_from_stock()
add_to_order()
end
几个月前,我听说亚马逊倾向于将所有交易运输代码(也存在另一个问题,它们分发为“分片”)转换为非事务代码。如何将交易相关代码转换为非交易相关代码?
some_buy_method()
check_item_stock()
remove_item_from_stock()
add_to_order()
end
我听说eBay也在没有交易的情况下运行,也许亚马逊会采用类似的方法。
从The eBay Architecture(幻灯片18,23):
绝对没有客户端的交易
我们如何把它关闭?
- DB操作的谨慎排序
- 恢复通过
•异步恢复事件
•和解批 •故障转移到异步流理由
- 避免死锁
- 避免耦合可用性
- 更新并发性 - 无缝处理拆分易趣
(很抱歉的格式)
对我来说,它看起来像如果没有的ACID事务,你需要检查,恢复或手动补偿的事情。但确切的业务逻辑是已知的,因此可以设计出适当的错误处理或冲突策略。这也使得我在BPEL中进行错误处理的事情是异步的,并且我们编写了补偿处理程序。
第一个答案:有困难。
第二个答案:可能带来灾难性后果。
我怀疑亚马逊是否想要消除所有交易。他们可能想要做的是放宽ACID条件以提高可扩展性,并且availability:他们仍然想要原子性和耐久性,但必须重构commutativity and idempotence的操作并添加compensating transactions来处理降低的一致性和隔离。
+1有关ACID新定义的有趣链接 – ewernli 2010-07-20 14:31:15