iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0
Modern Web

30 天上手! PHP 微服務入門與開發系列 第 19

第十九章、Anser-Saga:協作器交易設計理念 - PHP 微服務入門與開發

  • 分享至 

  • xImage
  •  

Anser Saga 元件設計圖

Anser-Saga 元件基於現有的 Anser-Orchestration 元件進行設計;此元件負責執行與管理在進行分散式交易時各個 Step 的補償方法,並保證 Step 在發生錯誤時能夠對已完成呼叫的服務進行補償。

  • Simple Saga
    Simple Saga 類別使開發人員在繼承後能夠定義每個交易步驟的補償策略。開發人員可以根據特定的業務邏輯來自訂合適的補償行為。每個補償策略應該能夠獨立地處理其步驟的還原,同時也可以取得在執行時期的協作器。
  • Saga Class:
    於協作器開始執行分散式交易時,紀錄每個 Step 的執行狀態。當有 Step 執行失敗時,則通知協作器進行補償。
  • State Class:
    State 類別將記錄目前協作器的執行狀態,並且留存當前的 Step 實體參照作為需要補償或是查詢協作器狀態的依據。
  • Orchestrator:
    協作器是分散式交易的指揮中心,指定交易的開始和結束點,並綑綁每個步驟的補償方法。它確保交易按照預定的順序執行,並在遇到錯誤時協調補償流程。

執行時期採用 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.


上一篇
第十八章、微服務自身的交易與安全的資源操作 - PHP 微服務入門與開發
下一篇
第二十章、Anser-Saga:替協作器加上補償 - PHP 微服務入門與開發
系列文
30 天上手! PHP 微服務入門與開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言