資料庫會演變成分散式計算平臺嗎? - Nikita

banq發表於2022-06-02

“資料庫”一詞是否會在 5 到 10 年內慢慢演變成“分散式計算平臺”?
隨著無伺服器市場的擴大,更多的資料庫解決方案開始考慮模組化架構,其中系統的各個元件都是分開的。這允許為每個無伺服器租戶分配此類元件的一個例項,從而在使用者之間提供清晰的分離。這種分解資料庫並模組化的解決方案也是使其各個部分可被非資料庫應用程式重用。

資料庫 = 分散式系統的框架?

分散式資料庫具有以下元件是很常見的:
  • 分散式儲存:該元件有一個鍵值儲存介面:Get(key)和Set(key, value),其中key和value是一些二進位制字串。這個元件對資料一無所知——它可以是表中的行、JSON 文件或其他東西。通常,該元件提供“耐用性”保證,這意味著在某些故障情況下資料不會丟失。這種情況的一個常見示例是“不到一半的伺服器停機”。
  • 叢集節點之間的通訊: 該元件實現了某種通訊協議,以便從一個節點向另一個節點傳送和接收訊息。
  • 計算模型該元件對使用者的查詢執行結果:例如,使用 SQL 請求的一組行。

在經典資料庫(例如 PostreSQL)中,所有這些元件都在一個應用程式中實現。此類應用程式自行管理所有內容:控制儲存、與叢集中的其他節點通訊以及計算 SQL 查詢的結果。

在 MapReduce 系統(如 Hadoop)和其他一些資料庫(如 Google BigQuery)中,各種資料庫元件在物理上是分開的。一些叢集節點專門用於儲存。其他節點僅用於計算 SQL 查詢的結果。如果 SQL 查詢需要一些資料,它會通過網路從儲存節點傳輸到計算節點。

分散式系統的特點
現在讓我們想象我們想要建立一個新的分散式系統 - 一個監控各種指標的服務(如Prometheus)。根據對該系統的具體要求,我們可能需要以下內容:

  • 具有“永續性”保證的分散式儲存我們需要將使用者的指標儲存在某個地方,並且我們不想因為資料中心停機而丟失有價值的資料。
  • 叢集節點之間的通訊監控系統可以部署在多個資料中心,以減少延遲並提高容錯能力。我們系統的各種例項需要相互協調。
  • 計算模型首先,我們的系統必須接受儲存新指標的請求。其次,它應該響應讀取時間序列資料並生成監控圖報告的請求。

編寫這些元件中的每一個都是一項艱鉅的任務。我們不僅需要編寫程式碼和測試,還需要在生產中強化系統。後者通常會導致發現意外錯誤和設計效率低下。

現在讓我們回到資料庫。它們擁有我們構建分散式系統所需的所有元件。這些元件已經被數千種不同的工作負載實施、測試和強化。更重要的是,這些元件中的每一個都可以與資料庫本身分離並單獨使用。

這基本上意味著資料庫可以用作構建新分散式系統的框架。

案例1:YDB
YDB是一個在Yandex開發的分散式資料庫。它提供了橫向可擴充套件性和強大的一致性保證。

在引擎蓋下,YDB使用actor模型,Actor是一個併發的單位,它能夠:

  • 接收來自其他Actor的訊息
  • 向其他Actor傳送訊息
  • 啟動新的Actor

Actor始終是單執行緒的,只能改變其內部狀態。Actor沒有共享狀態的概念,這意味著所有的同步都是通過訊息傳遞完成的。一方面,程式碼中不再有mutexes。另一方面,你不能再只是寫到記憶體中讓其他Actor看到它。

YDB對actor有一個特殊的名字--tablet。它是YDB的構建模組。SQL查詢的執行,事務的協調,tablet的建立--這些任務都是由一個或多個tablet執行的。用這個帖子的術語來說,tablet是計算模型。

作為Actor,tablet需要傳送和接收資訊。在YDB中,有一個特殊的系統就是為此而建立的--它被稱為互連。每個tablet都有一個ID,tablet可以用這個ID作為他們的地址互相傳送訊息。互聯是一個用於叢集節點之間通訊的系統。

最後,tablet需要在某個地方儲存它們的狀態。例如,代表SQL表分片的tablet需要儲存分配給它們的錶行的範圍。YDB有一個分散式儲存,它可以儲存任意的二進位制blob,並有 "永續性 "保證。

擁有所有這些元件使得YDB不僅是一個資料庫,也是一個通用的分散式計算平臺。分散式系統的開發者可以通過建立一種新的平板電腦來編寫自己的應用邏輯,併為自己的目的重用系統的其他部分。

免責宣告:YDB被宣傳為一個資料庫解決方案。沒有公佈關於使用它作為分散式系統平臺的公開檔案。

案例2:Tarantool

Tarantool是一個用 Lua 編寫的分散式系統應用伺服器。在 Tarantool 中啟動的 Lua 應用程式可以通過 API 訪問以下元件:

  • 分散式事務資料庫。該資料庫支援 2 種操作模式 - 記憶體中和提交到磁碟。第二種模式使這個元件在本文中被稱為分散式儲存。
  • 通訊協議稱為 SWIM。它允許在叢集節點之間傳送和接收訊息。

由於應用伺服器本身製作了計算模型,因此我們擁有將 Tarantool 稱為通用分散式計算平臺所需的所有元件。

這聽起來並不令人印象深刻。看起來 Tarantool 最初是為了成為這樣一個平臺而建立的,所以它符合所有標準也就不足為奇了。問題是,Tarantool 最初是作為一個資料庫建立的,然後迅速發展成為一個成熟的計算平臺。僅用了 2-3 年的時間這一事實非常出色,但它也顯示了資料庫解決方案如何演變為構建分散式系統的“框架”。

 

相關文章