金融行業微服務實踐(1):分散式事務處理
在網易雲輕舟微服務平台中,我們的微服務框架除了完成一些基本事項(比如熔斷、限流、降級、彈性伸縮等),也開發了很多符合行業特性的定製化產品。這是因為我們發現傳統行業與互聯網行業的經營模式有著很大的不同,不同客戶的關注點並不一樣,架構師想要用一個產品把以上項目全部覆蓋還是比較困難的。但是,我們可以根據客戶的需求點加以設計。
以下的實踐,來自輕舟微服務平台的某大型銀行客戶。這個銀行客戶需要微服務架構是因為他們在服務拆完後,分散式事務出現了問題。
分散式事務其實有幾種方式解決。其中的一種就是在分散式資料庫 DDB 中提交分布事務 XA。如果跨多個 DDB 中間件保證事務性,就需要使用 TCC 模型。我們的中間件 DTS 可以做這件事。同時,我們有個 TMC 中間件,含有非同步消息模型(可以用事務消息的方式來完成)。這裡我舉兩個場景來說明問題。
場景一:下單即減優惠券、減庫存
下單是事務的發起方,優惠券和庫存是事務的參與方,分支事務需要用事務 ID 做冪等,幾方調用都需要同時並行。一旦程序出現錯誤,就會有一些定時任務去重試和回滾。如果分支事務不在,這時候會有一個超時機制,在某一個時間之內,無論是判斷成功和判斷失敗都不做響應。但是在一個設定的時間之外,如果它還沒給出應答,最後就會判斷失敗。這就是一個 TCC 的場景,TCC 適用於立即應答的場景,就像下單是沒有「下單中」這個概念的,下單只有「成功」與「失敗」,並且立刻反饋給商家。