2PC時代即將結束,2PC只是提供原子性提交而不是事務本身 · Exactly Once

19-10-31 banq
                   

如果有分布式事務協議,那么每個軟件工程師都知道它:“兩階段提交”,也稱為2PC。盡管使用了幾十年,但是由于缺乏云環境的支持,它卻一直在穩步下降。

過去在相當長的一段時間里,它是構建企業分布式系統的實際標準。也就是說,隨著云成為默認的部署模型,設計人員需要學習如何在沒有云的情況下構建可靠的系統。

回答如何替換2PC的問題首先需要了解協議的含義。盡管它曾經很受歡迎,但圍繞2PC仍存在許多誤解。這篇文章旨在澄清其中至少一些。

2PC不提供“事務”

2PC是原子提交協議,這意味著如果所有參與者都投票“是”,則所有參與者最終都將提交,否則將使系統保持不變。當用戶觸發了提交操作完成后,要么應用了所有本地修改,要么都沒有應用。提交可能要花很長時間才能完成,在某些失敗情況下,它將永遠掛起。

讓我們看一個例子,看看“不提供事務”的含義。在我們的場景中,我們有兩個參與者:數據庫和消息隊列。該圖顯示了兩個參與者都投票“是”并且協調者正在提交。

我們的示例假定隊列事務首先提交,但是2PC并沒有說明參與者提交的順序。它是不確定的,每次執行時可以針對同一組參與者進行更改。

最有趣的是外部觀察者,即客戶。它向兩個參與者發出讀取請求。消息隊列的讀取請求在協調器提交之后到達。這意味著讀取操作將返回寫入剛剛提交的事務中的隊列的消息。

對于數據庫,讀取請求在提交之前到達。這將是什么結果?2PC對此行為一無所知-?不在協議定義的系統模型之內。讀取行為不是由協議定義的,而是部署配置。

讀取操作可以至少有兩種可能的行為:

  • 阻塞直到提交本地事務-當本地事務以Serializable隔離級別運行時,將發生這種情況。這是Microsoft分布式事務處理協調器和Microsoft SQL Server?的默認配置,但是可以基于每個事務進行更改,
  • 返回最后的提交值(與本地事務寫入的值不同)-當本地事務Snapshot隔離運行時,會發生這種情況。

總而言之,當存在使用2PC提交的事務以及在每個參與者級別運行的其他本地事務時,2PC不會提供系統中原子的原子可見性。確切的行為不是由2PC定義的,而是取決于協議的具體實現,所涉及的資源以及部署和運行時配置。

2PC實現高可用

任何不平凡的協議都定義了它可以容忍的故障條件,而2PC也不例外。2PC特有的是,某些類型的故障會使參與者“卡住死鎖”。只要參與者投票“是”,就無法取得任何進展,直到協調員返回響應。

參與者卡住的原因可能是什么?首先,協調員的失敗。其次,協調者和參與者之間的網絡分區腦裂。卡住的可能性取決于協調器的可用性和網絡故障的可能性。通過減少故障的可能性,我們可以使2PC的可用性更高。

這涉及已經提到的實現和配置方面。例如,在MSDTC中,協調器是單個進程,但可以在故障轉移群集模式下部署。那是部署決定。2PC中也沒有任何東西可以阻止將協調器實現為法定人數的流程。

最后,如果所有各方(協調者和所有參與者)都在同一本地網絡上,單個群集上或單個VM內運行,那么網絡分區的可能性是多少?

一如既往,環境為王。

提交延遲不是最大的問題

在2PC中進行提交需要協調者和每個參與者之間進行2次往返,并且生成了4n消息,其中n參與者的數量是多少。有時,這被認為是協議中許多實際問題的根本原因。這不是理想的選擇,但只能解決其他更大的問題。

問題是鎖定導致參與者級別的潛在爭用,尤其是在處理關系數據庫時。持有鎖意味著處理給定狀態的其他事務需要等待該事務提交才能取得任何進展。

這種情況在沒有2PC的情況下就存在,但是協議使得情況總是最糟糕的,因為在2PC中,最慢的參與者定義了持有鎖的時間。

2PC非常適合云端?

眾所周知,云計算供應商在其服務內部使用2PC,并且在IaaS級別運行時用戶可以使用2PC?。也就是說,沒有任何一個云供應商在本地云服務級別上支持MSDTC和/或XA,即本地服務不能參與2PC。

通常,可用性和性能被認為是造成這種情況的原因。盡管這不是2PC的強項,但可以說安全(或缺乏安全性)更為重要。

2PC假定參與者和協調者之間高度信任。可以想象一個邪惡的用戶操作特制的協調器,通過故意使事務掛起在“阻塞狀態”來耗盡參與者的資源。

從云供應商的角度來看,這可能會帶來非常有害的后果。根據協議,參加者在投票“是”后不得取得任何進展。因此,在惡意協調員的情況下,他們將不得不中斷協議或允許其資源被阻止。

即使云供應商將他們的協調器作為唯一有效的選擇,惡意的參與者仍然可能造成很大的傷害。使云服務能夠充當2PC參與者有效地為拒絕服務(DoS)攻擊打開了大門。

(單點風險)

2PC不是唯一的提交協議

2PC只是原子提交的一種可能解決方案。它在某些情況下工作良好,但在違反其假設的環境中使用時性能較差。

實際上,很少有2PC對參與者的假設。圍繞事務確定性設置更多約束條件允許使用其他方法來最大程度地減少鎖保持時間。

當我們認識到缺乏原子可見性時,會采取一些具體措施,例如根據消息隊列的性質,確保一次性提交提交成功,也有可能最終要求一種對每個參加者實現一次性順序寫入的提交協議。

總結

希望這篇文章對2PC以及我們從協議中得到的內容有更多的了解。盡管2PC的時代即將結束,但是很高興知道我們需要在構建的系統中通過其他方式提供什么保證。

?

                   

1
美女漫画大全