iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 8
1
Software Development

.Net微服務輕旅行30天系列 第 8

Day 8 微服務之間的解耦與調用 (3) 交易與資料一致性

一般來說在monolithic下會共用一個資料庫,而資料間的一致性跟transaction基本上靠著ACID可以簡單地達成,但如果每個微服務只擁有自己的資料庫,那麼微服務之間的交易跟資料一致性的部分也是相當重要的議題,看文章時常會看到一些名詞,今天來整理一下:

2PC(2 phase commit)

用以分散式交易的一種設計, 主要分為兩個階段,
1 phase 由一個主要服務對其他服務發起請求交易
2 phase 收到所有服務回傳的結果,都成功則提交交易成功,或有失敗的結果則通知其他服務將剛剛的交易roll back

Event

紀錄狀態/資料"如何"改變,而非改變後的狀態結果 例如對資料庫/table的更動, Event會是不可變的(真實的歷史紀錄)

Event sourcing

將Event依序記錄下來,而不直接紀錄變動後狀態,靠著執行所有的Events可以取到最新或特定的狀態, 或者由於有所有的Event(整個改變的歷程),可以從最新的狀態透過反序執行相反的Event或是針對Event補償的動作,roll back/undo到特定的狀態

Event bus

幾乎等同於Message broker只是傳遞的Message是Event

CQRS

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
(https://docs.microsoft.com/zh-tw/azure/architecture/patterns/_images/command-and-query-responsibility-segregation-cqrs-separate-stores.png )

Saga

一種用以取代2 phase commit,避免2 phase commit造成資源block的設計架構,
特徵:

後續看到應該還會再補充在這篇..


上一篇
Day 7 微服務之間的解耦與調用 (2 )非同步與一對多
下一篇
Day 9 非同步通訊小小練習 - with RabbitMQ
系列文
.Net微服務輕旅行30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言