用Rust 實現的現代化實時開源資料倉儲

roc_guo發表於2023-02-03
一、簡單介紹

TensorBase 是使用 Rust 實現的現代化實時開源資料倉儲。

二、特性

All in Rust。TensorBase 稱已經在日常測試中經歷數十 TB 的資料注入錘鍊,是目前 Rust 社群中,面向使用者特別是中小企業實際場景深度最佳化的、生產完成度最高的通用資料倉儲類專案。
開箱即用。TensorBase 已經支援從資料插入或匯入到查詢完整資料倉儲流程,具備了較高的早期完成度,使用者可以從 TensorBase 的 Release 頁下載相關   環境下的二進位制檔案,進行嘗試。(Windows 10 的 WSL2 目前應該也可以使用)
相容 ClickHouse 協議。ClickHouse 是一個 C++ 編寫的資料倉儲。TensorBase 則使用 Rust 語言從頭開始實現了一個高效能的 ClickHouse SQL 方言解析器和 TCP 通訊協議棧。ClickHouse TCP 客戶端可以無縫連線 TensorBase。
效能為先。TensorBase 期望透過新的軟體和系統設計將現代硬體的所有潛力發揮出來。TensorBase 首次在核心鏈路程式碼上實現了 “F4”:Copy-free,Lock-free,Async-free,Dyn-free(無動態物件分發)。初步的效能評估顯示:在 14.7 億行的紐約計程車資料集上,TensorBase 的簡單查詢的效能上已經領先 ClickHouse。
化繁為簡。目前的大資料系統使用非常複雜,即使想執行一個最簡單的系統,都需要配置大量難以理解的引數或者安裝大量第三方依賴。
對於使用者,除了現在已經達成的開箱即用,TensorBase 希望系統在執行時能在自治執行,而不是依賴運維管理員。
對於開發者,TensorBase 希望將貢獻門檻降低。整個專案架構設計簡潔高效(更多資訊參見後文),專案外依賴很少,完全重新編譯(cargo clean 到 cargo build)的單機時間在 1 分鐘之內。(大資料系統或者 C++ 資料庫的完整構建時間往往以小時計。)
互聯未來。TensorBase 在核心上改造了 Apache Arrow 和 DataFusion,無縫支援 Arrow 格式查詢、分析和傳輸。Arrow 格式作為越來越廣泛採用的大資料交換中間格式,已經被多個資料庫及大資料生態平臺所支援。TensorBase 在引擎上相容 Arrow,未來可以同時支援雲原生和雲中立場景下的資料倉儲體驗,提供儲存中立的資料湖服務。

三、架構

用Rust 實現的現代化實時開源資料倉儲用Rust 實現的現代化實時開源資料倉儲

  • Base Server
  • TensorBase 服務介面層。對外提供資料的介面服務,比如資料的寫入和查詢入口。TensorBase 創造性的實現了世界上第一個非 C++ 的 ClickHouse TCP 協議服務棧,可以支援 ClickHouse 客戶端(clickhouse-client  行)以及 native 協議語言驅動的直接連線。同時,Base Server 是第一個 async 中立的 Rust 高效能伺服器。Base Server 基於改造的 Actix 事件迴圈,在服務的實現中完全不使用 async,在提供絕佳的可除錯性的同時,評測效能也大幅超過基於 tokio 預設 async 表達層的實現。未來可以引入非 tokio 的網路 io 層實現。
  • Base Meta/Runtime/Storage
  • TensorBase 的後設資料層、執行時層和儲存層。在儲存層,TensorBase 非經典的列式儲存。這其中最重要的,我們給出了一個反重力設計:No LSM。我們不再使用在目前開源資料庫及大資料平臺流行的 LSM Tree(Log Structured Merge Tree)資料結構。而是使用一種我們自己稱之為 Partition Tree 的資料結構,資料直接寫入分割槽檔案,在保持 append only 寫入效能的同時,避免了 LSM 結構的後續 compact 開銷。得益於現代 Linux 核心的支援和巧妙的寫入設計,我們在使用者態(User-space)核心讀寫鏈路上不使用任何鎖(Lock-free),最大程度的發揮了高併發網路服務層所提供的能力,可以提供超高速資料寫入服務。
  • Base Engine
  • TensorBase 的引擎層。TensorBase 使用改造過的 Apache Arrow 和 DataFusion,並創造性的將底層儲存適配到 Arrow 格式,實現了 Zero Copy 的資料查詢。當然,目前的適配性儲存策略,還只算是一個現在進行中的次優解,TensorBase 未來會對儲存層進行持續迭代,提供更多與時俱進的最佳化。同時,TensorBase 也將進一步地最佳化幫助 Arrow/DataFusion 社群最佳化其查詢引擎的效能,和社群一起成長。
  • 其他
  • TensorBase 還有一些基礎性的元件,比如:
  • base,通用工具庫;
  • lang,語言層(目前主要實現一個 ClickHouse 相容解析和表示層)。
  • lightjit,類表示式 JIT 引擎,未來可擴充套件至高效能和安全可控的使用者定義函式 UDF(User Defined Functions)層。 TensorBase 未來將進一步開發和開放自己的高效能基礎件,為 Rust 社群貢獻一些獨特的高效能可複用基礎設施。
  • 注意,架構圖中的虛線連線尚未實現,這是一個全景式的架構藍圖。

    用Rust 實現的現代化實時開源資料倉儲用Rust 實現的現代化實時開源資料倉儲


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2933955/,如需轉載,請註明出處,否則將追究法律責任。

相關文章