使用 Rust 實現的現代化實時開源數據倉庫
作者:碼農世界
TensorBase 的元數據層、運行時層和存儲層。在存儲層,TensorBase 非經典的列式存儲。這其中最重要的,我們給出了一個反重力設計:No LSM。我們不再使用在目前開源數據庫及大數據平臺流行的 LSM Tree(Log Structured Merge Tree)數據結構。
一、簡單介紹
TensorBase 是使用 Rust 實現的現代化實時開源數據倉庫。
二、特性
- All in Rust。TensorBase 稱已經在日常測試中經歷數十 TB 的數據注入錘煉,是目前 Rust 社區中,面向用戶特別是中小企業實際場景深度優化的、生產完成度最高的通用數據倉庫類項目。
- 開箱即用。TensorBase 已經支持從數據插入或導入到查詢完整數據倉庫流程,具備了較高的早期完成度,用戶可以從 TensorBase 的 Release 頁下載相關 Linux 環境下的二進制文件,進行嘗試。(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,未來可以同時支持云原生和云中立場景下的數據倉庫體驗,提供存儲中立的數據湖服務。
三、架構
- 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 社區貢獻一些獨特的高性能可復用基礎設施。
注意,架構圖中的虛線連接尚未實現,這是一個全景式的架構藍圖。
責任編輯:武曉燕
來源:
今日頭條