ClickHouse進階|如何自研一款企業級高效能閘道器元件?

2023-05-31 12:01:13

使用原生ClickHouse叢集進行節點資料查詢和寫入時,離不開第三方開源閘道器元件chproxy支援。但由於chproxy缺少TCP協定支援,導致效能、查詢能力等受限。這也成為困擾眾多ClickHouse開發者的一大難題。那麼,究竟應該如何突破?本文將揭祕火山引擎ByteHouse企業版自研閘道器元件如何解決以上問題。

一、引言

ClickHouse是一款廣受歡迎且應用廣泛的分析型資料庫。它通過列式儲存和向量化處理等成熟的優化手段,配合高質量的工程化,實現了極高的效能表現。在許多業務場景下,

ClickHouse展現出了非常強悍的效能表現,因此吸引了大量實際生產使用使用者。在使用原生ClickHouse叢集時,使用者往往通過直連節點進行資料查詢或寫入。然而,由於缺少中間層進行負載均衡,在某些情況下會導致分片節點上的資料寫入不均衡。同時,由於使用者端設定ClickHouse資料來源時指定了連線的具體節點資訊,查詢請求也會集中於部分節點。這樣一來,如果某個節點宕機,就會引發單點故障。

為了解決這些問題,ClickHouse官方檔案推薦了一些第三方開源閘道器元件,如chproxy和KittenHouse等。其中,chproxy是應用最廣泛的元件之一,具備豐富的功能。它支援靈活的使用者和叢集對映設定,代理HTTP型別的請求。然而,目前開源社群還沒有提供在TCP協定基礎上支援的閘道器元件。由於TCP協定是ClickHouse叢集間預設的通訊協定,也是ClickHouse使用者端和許多高效能第三方驅動程式所預設選擇的查詢協定,缺少對TCP協定的支援使得使用上存在很大限制。

ByteHouse企業版是基於開源ClickHouse的企業級分析型資料庫,支援使用者互動式分析PB級別的資料,通過多種自研表引擎,靈活支援各類資料分析和應用。為解決原生ClickHouse叢集存在的一些問題,ByteHouse企業版試圖提供一個高效能的閘道器元件。同時,這也將進一步釋放ByteHouse強大的查詢引擎能力,為使用者提供極致的使用體驗。

本文將主要介紹火山引擎ByteHouse企業版閘道器元件的功能和特性、ClickHouse不同的查詢協定對比、ByteHouse閘道器與開源chproxy的功能對比。

二、ByteHouse閘道器元件的功能

2.1 查詢路由與負載均衡

ByteHouse企業版查詢閘道器同時支援HTTP協定和TCP協定的查詢請求,最大程度上相容了各種社群語言的Driver,例如ClickHouse GO、ClickHouse JDBC等,同時也支援諸如DataGrip、DBeaver等資料庫管理工具的使用。例:企業版查詢閘道器架構

監聽層,同時支援HTTP和TCP兩種Protocol,接收請求。流量控制層,記錄並限制請求的頻率和並行數。分發層,根據設定中的叢集資訊和狀態,負載均衡演演算法以及使用者等資訊,將請求傳送至對應clickhouse節點健康檢查器,通過傳送探針請求的方式,時刻關注每個節點的健康狀態以及響應靈敏度,避免將請求轉發至不健康節點

2.2 打通ByteHouse控制面後設資料

企業版閘道器通過與控制面後設資料的連線,使得閘道器使用者可以直接在控制面進行建立和授權。同時,閘道器讀取控制面叢集後設資料,獲取ByteHouse叢集節點的資訊。ByteHouse控制面支援多叢集下的管控,因此對於企業版閘道器來說也需要支援多叢集模式。與chproxy不同的是,企業版閘道器可以直接讀取控制面使用者叢集授權後設資料。對於可自動推斷對應叢集的使用者,閘道器可以實現自動代理請求到對應的叢集,更加靈活和便捷。

2.3 監控告警

火山引擎ByteHouse企業版查詢閘道器與控制面的深度整合也體現在監控告警方面。ByteHouse企業版控制面監控元件可以通過收集閘道器的查詢指標 metrics,支援在控制面設定來自閘道器指標的告警規則。例:企業版閘道器監控告警設定介面

2.4 其他功能

通過連線閘道器元件,ByteHouse為使用者提供了更多的靈活性,基於代理層能夠實現許多原來不便於實現的能力和管控。

因此,基於伺服器端代理模式的ByteHouse企業版查詢閘道器還拓展實現了其他更多功能,諸如下發指定節點和全部節點。其中當用戶使用社群ClickHouse Client連線ByteHouse企業版查詢閘道器可支援直接通過SQL語句來切換連線的ClickHouse節點設定閘道器連線指定節點 範例:clickhouse client --host --user --password

ByteHouse Gateway