引言
ByConity是一個由字節跳動開源的云原生數據倉庫引擎,采用存儲計算分離的架構,實現了讀寫分離和彈性擴縮容。這款引擎支持多個關鍵功能特性,如資源隔離、無感擴縮容、高性能和數據的強一致性等。該架構確保讀寫操作不會相互影響,同時使計算資源和存儲資源解耦,兩者可以按需獨立擴縮容,實現資源高效利用。ByConity適用于多租戶環境,支持多租戶資源隔離功能,保證不同租戶之間不會互相影響。另外,ByConity采用主流的OLAP引擎優化技術,如列存儲、向量化執行、MPP執行和查詢優化等,為用戶提供優異的讀寫性能。
ByConity存儲計算分離架構
為了讓大家更好的理解需要部署的組件,這里簡單介紹下ByConity的架構。想更深入了解請參考另一篇文章《談談ByConity存儲計算分離架構和優勢》(https://mp.weixin.qq.com/s/FNaC3RTr7BxBZbditTJxRw)。ByConity的存儲計算分離架構主要分為三層:共享服務層、計算層和云存儲層。共享服務層是所有查詢的入口,主要組件是Cloud Service和Metadata Storage,它會對查詢進行解析和優化,并負責一些服務、組件和事務的管理和元數據的管理。計算層是計算資源組,主要組件是Virtual Warehouse(VW),包括Read VW和Writer VW。云存儲層是分布式統一存儲系統,ByConity所有的數據都存儲在這一層,在計算層進行查詢時,會從云存儲層中讀取數據,具體實現可以采用各種云存儲服務,如HDFS、S3等。此外,ByConity還包括TSO、Daemon Manager、Resource Manager、后臺任務和服務發現等共享服務組件,為整個系統提供穩定的支持和管理。

圖1 ByConity三層技術架構
ByConity如何在Kubernetes上部署和操作
Kubernetes是一個開源的容器編排平臺,可以自動管理和部署容器化應用程序,并提供高可用性和彈性的部署模式。將ByConity部署在Kubernetes上,可以享受Kubernetes提供的可伸縮性、高可用性、負載均衡、容錯性等,同時簡化管理和部署的過程。下面將給大家詳細介紹下,如何在Kubernetes上部署ByConity。
硬件配置:
用戶需要部署和購買自己的Kubernetes集群,且要求在不影響測試性能前提下的最低硬件配置如下表:

同時,我們也給出一個生產環境下建議的硬件配置,供大家參考:

工具安裝:
本地安裝Kubernetes命令行工具kubectl,用于管理Kubernetes集群
本地安裝用于管理Kubernetes應用程序的包管理工具helm
本地安裝byconity-deploy代碼:

配置存儲
為了獲得最佳的 TCO(https://en.wikipedia.org/wiki/Total_cost_of_ownership) 和性能,本地存儲最好與 ByConity Server 和 Worker 一起使用。
ByConity Server 和 Worker 的存儲僅用于磁盤緩存,可以隨時刪除它們。
您可以使用 OpenEBS local PV (https://openebs.io/docs/concepts/localpv)等存儲.
配置helm
可以從安裝的byconity-deploy的目錄復制./chart/byconity/values.yml文件,并進行修改適配,需要修改的地方如下:
storageClassName
timezone
replicas for server/worker
hdfs storage request
部署ByConity集群

等待Pod啟動:

完成部署,啟動client:

測試ByConity集群
執行一些SQL語句測試:

手動更新ByConity集群
這里舉例說明如何增加新的計算組(Virtual Warehouse),假如用戶希望增加兩個計算組,5個副本用戶讀取(my-new-vw-default )2個副本用戶寫入(my-new-vw-write )。
更新用戶的values.yaml文件

使用新的value.yml文件,執行helm upgrade

在Byconity中運行執行DDL語句 CREATE WAREHOUSE 創建新的計算組

測試新的計算組

在Kubernetes上無感擴縮容
無感擴縮容是指在系統運行過程中,通過動態調整計算和存儲資源的分配,以滿足業務需求,同時不影響系統的正常運行和服務質量的一種擴容方式。無感擴縮容的目的是為了提高系統的可用性和可靠性,同時降低系統維護和運營的成本。下面介紹下如何利用Kubernetes對ByConity集群進行無感擴縮容:
1.部署ByConity集群:利用上面步驟在用戶的Kubernetes集群上部署ByConity
2.設定負載閾值:用戶需要設定負載閾值,即當ByConity集群負載達到一定程度時需要進行擴容操作。可以通過Kubernetes Horizontal Pod Autoscaler(HPA)對象進行設定,設置CPU使用率或內存使用率等指標作為負載閾值。例如,可以設置當ByConity集群的CPU使用率達到80%時,自動進行擴容操作。
3.自動觸發擴容:當ByConity集群負載達到設定的負載閾值時,Kubernetes HPA會自動觸發擴容操作,增加ByConity節點數量以滿足業務需求。例如,當ByConity集群的CPU使用率達到80%時,Kubernetes HPA會自動增加節點數量,保證ByConity集群的性能和可用性。Kubernetes會根據預設的規則和算法,自動增加或減少節點數量,并調整負載均衡策略,以保證系統的高性能和高可用性。
4.動態調整資源:Kubernetes會根據實際負載情況,動態調整計算和存儲資源的分配,以保證系統的高性能和高可用性。Kubernetes會自動將負載均衡地分配到不同的ByConity節點上,同時保證數據的一致性和可靠性。
5.實時監控和報警:可以通過Prometheus等監控工具,實時監控ByConity集群負載和資源使用情況,當出現異常情況時會自動觸發報警機制,通知管理員進行處理。
總結
總之,將ByConity部署在Kubernetes上,可以享受Kubernetes提供的可伸縮性、高可用性、負載均衡、容錯性等,同時簡化管理和部署的過程,同時ByConity可以利用Kubernetes進行無感擴縮容對用戶帶來的價值包括:
提高系統的可用性和可靠性:無感擴縮容可以根據實際負載情況動態調整計算和存儲資源的分配,保證系統始終能夠滿足業務需求,避免因系統資源不足而導致的系統宕機或服務中斷。
提高系統的靈活性和可擴展性:無感擴縮容可以根據業務需求動態地增加或減少計算或存儲資源,不需要進行系統停機或重啟,從而提高了系統的靈活性和可擴展性。
降低系統維護和運營成本:無感擴縮容可以自動調整系統資源,減少了系統管理員和運營人員的工作量,降低了系統維護和運營的成本。
同時ByConity也提供多種其他部署方式,歡迎社區開發者使用,并給我們提issue:
單機版本方式:https://github.com/ByConity/byconity-docker
物理機部署模式:https://github.com/ByConity/ByConity/tree/master/packages
源代碼編譯方式: https://github.com/ByConity/ByConity#build-byconity
加入我們
ByConity社區擁有大量的用戶,同時是一個非常開放的社區,我們邀請大家和我們一起討論共建,在Github上建立了issue:https://github.com/ByConity/ByConity/issues/26,也可以加入我們的飛書群、Slack或者Discord參與交流。