Hi all, 在理解2PC 理論前,我們需要先知道這個理論她要解決的問題是甚麼。
多文件一致性問題
首先給個情境,今天有個服務它的運作流程是先更新cache 再更新 database,由於兩邊的更新都需要使用到網路進行訊息傳遞,我們也不能保證說兩次的網路使用都會沒問題,那我們該怎麼確保兩邊資料上都要確保一致呢?
2PC理論
在2PC的腳色分為兩種: 協調者(服務本身)、參與者(資料源)。 那他們之前的交互如下:
由上圖可以看到整體的Flow 被分成兩個階段
- 階段一: 我們的服務也就是協調者會先發送 ask 的請求詢問參與者是否可用,若兩個參與者皆回答 ok 就會進入階段二。
- 階段二: 協調者會提出變動的內容 Commit,若一切正常則回 ACK,若其中一個參與者回傳 No,則表示為操作失敗,此時協調者需要進行以更動過的參與者的Rollback作業。
2PC 缺點
- 問題1: 性能問題,需要等待資源端都回復Ok 訊息後才能進行Commit 作業,不能很好的應對高併發場景
- 問題2: 如果在階段二中,參與者當機後還需要協調者進行 Rollback的作業。
- 問題3: 若協調整當機了,所有的參與者都會卡住,做不了任何的 Commit或是Rollback作業