1. 程式人生 > >分散式事物幾種解決方案

分散式事物幾種解決方案

本文只做引薦,大概說一些自己的理解


分散式事物幾種解決方案

分散式不存在絕對的事物處理!!!

大概四種解決方案

  1. 基於訊息佇列最終一致性;
  2. TCC型解決方案;
  3. 二階段提交強一致性;
  4. LCN:https://github.com/codingapi/tx-lcn

上面幾種不理解各位的可以自行百度,大家理解的都不一樣,所以不多說,怕誤導各位。

個人感覺LCN比較適合,就是把整個操作加入一個事務組,然後每一步操作都去對事務組進行一個反饋,當某個業務出現異常,對加入事務組中業務進行回滾,只有當最後一步完全成功時,再向事務組傳送commit操作,至此,整個事物結束。這其中也可以進行一個日誌記錄,大家有興趣可以試試。

常見的一些簡單事物,簡單說一下:

比如:我下單買某個平臺的數字貨幣,首先進行我的訂單處理(簡稱A服務),然後在操作的同時去付款(簡稱B服務)。

  • 第一種:
    我的A服務修改成功,但B服務出現異常,這時可以try然後返回錯誤狀態碼,A服務那邊接收 錯誤狀態碼,對整個方法的事物進行回滾。

  • 第二種:
    我的A服務修改成功,但B服務修改成功,再到A服務來修改,但是這時A服務失敗了,這時沒法讓B服務回滾,我們該怎麼辦?
    可以使用mq建立一個事物中心,A服務和B服務都不使用事物,一旦一方出現異常,可以用try捕捉,然後向mq傳送訊息,mq監聽到失敗之後手動回滾髒資料,可以修改或者刪除。其實也可以使用日誌進行記錄,再手動改,不過比較麻煩。

  • 可能說的不是很透徹,都是一個理解和實踐的過程。各位同僚有更好的理解可以留言一起探討一波

最後

大家程式設計快樂
在這裡插入圖片描述