Calvin:分割槽資料庫系統的快速分散式事務

banq發表於2021-10-02

這篇論文是由耶魯大學的一組電腦科學家發表的,很好地討論了分散式事務的問題,解釋了為什麼它很複雜,以及為什麼許多分散式資料庫決定完全放棄事務以簡化操作。然後它引入了一個非常有趣的想法,即透過確定性鎖定方案避免昂貴的提交協議。
Calvin 本身並不是一個資料庫,它就像論文中描述的那樣“ ......一個實用的事務排程和資料複製層...... ”。Calvin 使用確定性排序保證來顯著降低與分散式事務相關的通常令人望而卻步的爭用成本。
Calvin 旨在與非事務性儲存系統一起執行,將其轉換為無共享的近線性可擴充套件資料庫系統,提供高可用性和完整的 ACID 事務。這些事務可能跨越分佈在叢集中的多個分割槽。Calvin 透過在儲存系統之上提供一個層來實現這一點,該層處理分散式事務的排程,以及系統中的複製和網路通訊。
在本文的其餘部分,我們將討論分散式事務問題的概述以及 Calvin 如何解決這個問題,然後我們將快速概述 Calvin 的體系結構以及一切如何協同工作以使之前的承諾成為可能。
Calvin 實現低成本分散式事務和同步複製的方法如下:當多臺機器需要就如何處理特定事務達成一致時,它們會在事務邊界之外進行處理——也就是說,在它們獲取鎖並開始執行事務之前。一旦就如何處理事務達成一致,就必須按照計劃執行完成——節點故障和相關問題不會導致事務中止,因為故障節點可以從執行相同計劃的副本中恢復平行或透過重播它的歷史。並行計劃執行和計劃歷史的重放都要求活動計劃是確定性的——否則副本可能會發散或歷史可能會錯誤地重複。
Calvin 依賴於複製事務輸入而不是效果,並且因為執行計劃(執行所有事務的順序)是確定性的,並且對於接下來嘗試哪個事務存在全域性協議,Calvin 不需要進行重做日誌記錄,例如,而不是像 Aurora 這樣支援事務可交換性的其他資料庫系統。
 

Calvin架構
Calvin 旨在充當任何實現基本 CRUD 介面(建立/插入、讀取、更新和刪除)的儲存系統之上的可擴充套件事務層。
Calvin 由 3 個主要部分組成:

  1. Sequencer:負責攔截事務並將事務放入全域性事務輸入序列中。它還負責複製。
  2. 排程器:它負責使用確定性鎖定方案來協調事務執行,以保證與排序器指定的序列順序等效,同時允許事務由事務執行執行緒池併發執行。
  3. 儲存:負責處理所有物理資料佈局。Calvin 事務使用簡單的 CRUD 介面訪問資料,因此任何支援類似介面的儲存引擎都可以相當容易地插入 Calvin。

更多點選標題


 

相關文章