JuiceFS 在 Elasticsearch/ClickHouse 溫冷數據存儲中的實踐( 三 )

在示例的右側,以 Column 作為前綴的這些文件是實際的數據文件,相比元信息通常會比較大 。這個示例中只有 A、B 兩列,實際的表里可能有很多列 。所有這些文件,包括元信息、索引信息,都會共同幫助用戶快速地在不同文件之間去做跳轉或者查找 。
ClickHouse 存儲策略如果要在 ClickHouse 里做冷熱數據分層,會用到類似于 ES 中提到的生命周期策略 , 在 ClickHouse 里稱為存儲策略(Storage Policy) 。
與 ES 稍有不同 , ClickHouse 官方并沒有將數據劃分不同的階段 , 比如熱數據、溫數據、冷數據這些不同的階段,ClickHouse 提供了一些規則和配置方法,需要用戶自己來制定分層策略 。
每個 ClickHouse 節點支持同時配置多塊磁盤,存儲介質可以是多種多樣的 。比如,一般用戶為了性能會給 ClickHouse 節點配置 SSD 盤;對于一些溫冷數據,用戶可以把數據存儲在成本更低的介質,如機械盤 。ClickHouse 的用戶對底層存儲介質是無感知的 。
與 ES 相似,ClickHouse 用戶需要根據數據不同的維度特征去制定存儲策略,比如每個 part 子目錄的大小、整個磁盤的剩余空間比例等,當滿足某個維度特征設定的條件時就會觸發存儲策略的執行 。這個策略會將某一個 part 從一塊盤遷移到另外一塊盤 。在 ClickHouse 中,一個節點配置的多塊盤是有優先級的,默認情況下數據會優先落在最高優先級的盤上 。這樣實現了 Part 從一個存儲介質轉移到另外一個存儲介質上 。
通過 ClickHouse 的一些 SQL 命令 , 如 MOVE PARTITION/PART 命令可以手動觸發數據遷移,用戶也可以通過這些命令做一些功能性的驗證 。其次有某些情況下,可能也希望能夠通過手動的方式,而不是自動轉移的方式來顯式把 part 從當前的存儲介質上轉移到另外一個存儲介質上 。
ClickHouse 還支持基于時間的遷移策略,這是一個獨立于存儲策略的概念 。數據寫入后,ClickHouse 會按照每個表的 TTL 屬性設置的時間來觸發磁盤上數據的遷移 。比如設置 TTL 為 7 天 , ClickHouse 就會把表中超過 7 天的數據從當前的磁盤(如默認的 SSD)再寫到另外一個更低優先級的磁盤上(如 JuiceFS) 。
03- 溫冷數據存儲:為什么使用對象存儲+ JuiceFS ?企業把溫、冷數據存放到云上后 , 存儲成本相較于傳統的 SSD 架構大為下降 。企業還享受到了云上的彈性伸縮空間;不用為數據存儲去做任何運維操作,比如擴縮容 , 或者一些數據清理類的工作 。溫冷數據所需的存儲容量比熱數據大很多,尤其是隨著時間推移,會產生大量需要長期保存的數據,如果這些數據都存儲在本地,相應的運維工作將不堪重負 。
但如果在對象存儲上使用 Elasticsearch、ClickHouse 這類數據應用組件 , 會存在寫入性能差、兼容性等問題 。希望兼顧查詢性能的企業,開始在云上尋找解決方案 。在這樣的背景之下,JuiceFS 被越來越多地應用于數據分層的架構之中 。
通過下面 ClickHouse 寫入性能測試可以直觀了解到寫入SSD、JuiceFS 以及對象存儲的性能差異 。

JuiceFS 在 Elasticsearch/ClickHouse 溫冷數據存儲中的實踐

文章插圖
JuiceFS 的寫入吞吐量遠大于直接對接對象存儲,接近 SSD 。當用戶把熱數據轉移到溫暖數據這一層時,對于寫入性能也有一定要求 。在遷移的過程中,如果底層存儲介質的寫入性能差,整個遷移的流程也會拖得很長,對于整個 pipeline 或數據管理也會帶來一些挑戰 。
下圖的 ClickHouse 查詢性能測試使用真實業務中的數據,并選取幾個典型的查詢場景進行測試 。其中 q1-q4 是掃描全表的查詢,q5-q7 是命中主鍵索引的查詢 。測試結果如下圖:
JuiceFS 在 Elasticsearch/ClickHouse 溫冷數據存儲中的實踐

文章插圖

JuiceFS 在 Elasticsearch/ClickHouse 溫冷數據存儲中的實踐

文章插圖
JuiceFS 與 SSD 盤的查詢性能基本相當,平均差異在 6% 左右 , 但是對象存儲相比 SSD 盤有 1.4 至 30 倍的性能下降 。得益于 JuiceFS 高性能的元數據操作以及本地緩存特性,可以自動將查詢請求需要的熱數據緩存在 ClickHouse 節點本地,大幅提升了 ClickHouse 的查詢性能 。需要注意的是以上測試中對象存儲是通過 ClickHouse 的 S3 磁盤類型進行訪問,這種方式只有數據是存儲在對象存儲上,元數據還是在本地磁盤 。如果通過類似 S3FS 的方式把對象存儲掛載到本地,性能會有進一步的下降 。
另外值得一提的是 JuiceFS 是一個完全兼容 POSIX 的文件系統 , 它能夠與上層應用(如 Elasticsearch、ClickHouse)有很好的兼容 。用戶對底層存儲是分布式文件系統或者是本地磁盤是沒有感知的 。如果直接使用對象存儲,不能很好地實現與上層應用的兼容 。

推薦閱讀