幾個月前,我聽說亞馬遜傾向於將所有交易運輸代碼(也存在另一個問題,它們分發爲「分片」)轉換爲非事務代碼。如何將交易相關代碼轉換爲非交易相關代碼?
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