分散式事物幾種解決方案
阿新 • • 發佈:2018-11-17
本文只做引薦,大概說一些自己的理解
分散式事物幾種解決方案
分散式不存在絕對的事物處理!!!
大概四種解決方案
- 基於訊息佇列最終一致性;
- TCC型解決方案;
- 二階段提交強一致性;
- 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監聽到失敗之後手動回滾髒資料,可以修改或者刪除。其實也可以使用日誌進行記錄,再手動改,不過比較麻煩。 -
可能說的不是很透徹,都是一個理解和實踐的過程。各位同僚有更好的理解可以留言一起探討一波
最後
大家程式設計快樂