解決分佈式事務最簡單的方案就是向前或向後,即補充或回滾。
業務邏輯有如下三步:
調用A服務凍結金額
調用B服務增加額度
記錄數據庫
進行到第2步失敗 -> 寫task,回滾第1步(通知A服務方去回滾)
進行到第3步失敗 -> 寫task,從A/B服務處同步數據至數據庫
還有一種方案就是寫task,轉化爲本地事務,由task去執行上述三步,失敗則重試task,當然,A/B服務都有冪等性處理。這種方案的缺點之一,是假定了參數合理的情況下,服務最終一定會執行成功,缺點之二是看起來不自然。
複雜的方案就是TCC方案,參見螞蟻金服的DTS