一般來說在monolithic下會共用一個資料庫,而資料間的一致性跟transaction基本上靠著ACID可以簡單地達成,但如果每個微服務只擁有自己的資料庫,那麼微服務之間的交易跟資料一致性的部分也是相當重要的議題,看文章時常會看到一些名詞,今天來整理一下:
用以分散式交易的一種設計, 主要分為兩個階段,
1 phase 由一個主要服務對其他服務發起請求交易
2 phase 收到所有服務回傳的結果,都成功則提交交易成功,或有失敗的結果則通知其他服務將剛剛的交易roll back
紀錄狀態/資料"如何"改變,而非改變後的狀態結果 例如對資料庫/table的更動, Event會是不可變的(真實的歷史紀錄)
將Event依序記錄下來,而不直接紀錄變動後狀態,靠著執行所有的Events可以取到最新或特定的狀態, 或者由於有所有的Event(整個改變的歷程),可以從最新的狀態透過反序執行相反的Event或是針對Event補償的動作,roll back/undo到特定的狀態
幾乎等同於Message broker只是傳遞的Message是Event
Command Query Responsibility Segregation 讀寫分離的設計架構,不一定只在code裡面將讀寫作業分離,也常見於實體資料庫分成寫入/更新部分(master),跟讀取資料的部分(slave或者唯讀副本)
(https://docs.microsoft.com/zh-tw/azure/architecture/patterns/_images/command-and-query-responsibility-segregation-cqrs-separate-stores.png )
一種用以取代2 phase commit,避免2 phase commit造成資源block的設計架構,
特徵:
後續看到應該還會再補充在這篇..