顯而易見,微服務架構十分的流行,特別是對於電商領域來說。他的優點就不多說了,但是隨著集群機器的增加,集群的規模也越來越大,隨著集群搭載的服務規模也越來越大,導致事務的處理也就越來越複雜,有可能一個事務涉及到n多個服務,可想而知就算再優良的方案也很難處理這麼複雜的事務,與其硬著頭皮犧牲性能和可靠性,還不如改變業務,再結合技術對事務進行分割,將複雜的事務簡單化,將簡單的事務消化化。
在分散式系統中,每個節點雖然可以知曉自己的操作是成功或者失敗,卻無法知道其他節點的操作的成功或失敗。當一個事務跨越多個節點時,為了保持事務的ACID特性,需要引入一個作為協調者的組件來統一掌控所有節點(參與者)的操作結果並最終指示這些節點是否需要把操作結果進行真正的提交。演算法步驟如下:
1、如果所有的參與者都回應「可以提交」。那麼協調者向所有的參與者發送「正式提交」的命令。參與者完成正式提交並釋放所有資源,然後回應「完成」,協調者收集各節點的「完成」回應後結束這個Global Transaction
2、如果有一個參與者回應「拒絕提交」,那麼協調者向所有的參與者發送「回滾操作」,並釋放所有資源,然後回應「回滾完成」,協調者收集各節點的「回滾」回應後,取消這個Global Transaction。