Anser Saga 元件設計圖
Anser-Saga 元件基於現有的 Anser-Orchestration 元件進行設計;此元件負責執行與管理在進行分散式交易時各個 Step 的補償方法,並保證 Step 在發生錯誤時能夠對已完成呼叫的服務進行補償。
執行時期採用 Saga 交易策略的協作器
Richardson在其著作[1]提到:「並不是每個Step都需要設計補償方法。」在 Anser-Saga 的設計中,開發人員能夠彈性地選擇Step是否需要補償方法,開發人員能夠根據具體的業務需求來決定哪些步驟需要補償。
舉個例子,在成立訂單得協作器中的前兩個步驟分別是「使用者 Token 驗證」與「商品最新資訊取得」,在這兩個步驟中並未有任何敏感的資源改變,因此整個協作器只需要在接下來的步驟開啟交易的保護即可。
在 Anser 的整體設計中,透過把交易分解成多個步驟,並且在每個步驟中提供補償策略,系統能夠在面臨失敗時進行還原,以保證資料的一致性並防止不完整的交易造成系統的不一致狀態。
Saga 補償機制泳道圖
如上圖所示,協作器在執行任一 Step 發生失敗時將會觸發還原,透過預先指定好的Saga 補償方法,對已完成操作的微服務終端進行補償。
Anser-Saga 希望提供在 PHP 程式語言下的 Saga 設計模式簡單實現,筆者希望透過這個程式庫,讓開發者可以更加容易地設計和實現分散式交易的補償策略。透過分解交易成多個能夠被管理的步驟,並為每個步驟提供補償機制,Anser-Saga 不僅提供了一定的一致性,並保持了系統的容錯能力和可維護性。
[1] C.Richardson, Microservices Patterns, Manning Publications, 2017.