雲計算

四兩撥千斤:小巧新秀ClickHouse如何完美支撐史上最強雙十一?

關於雲數據庫ClickHouse

ClickHouse是一款開源的列式分析型數據庫,自從2016年開源以來在全世界開源社區內的受歡迎程序逐漸上升,GitHub上Star數目已經超過了Presto、Impala、Greenplum等開源時間更久的老牌經典項目。在國內,ClickHouse也越來越火,諸多互聯網大廠都紛紛在內部業務中跟進使用並且普遍反饋性能優異。另外雲廠商也推出了對應的雲上託管服務,阿里雲就已經推出了雲數據庫ClickHouse。

雲數據庫ClickHouse不僅面向公共雲客戶售賣,同時也在阿里巴巴集團內部承擔著重要業務。2020年雙十一,雲數據庫ClickHouse承載了阿里巴巴集團OLAP平臺全量查詢日誌的存儲分析,單日400億級別增量數據導入,全量千億級別數據聚合分析毫秒返回,平均10倍存儲壓縮率;提供的超低成本、超高性能的日誌查詢分析解決方案,助力監控告警、錯誤排查、查詢Pattern分析、OLAP全景大屏、重點實例保障等業務場景穩定運行。下文將深入分析雲數據庫ClickHouse的核心技術。

雲數據庫ClickHouse核心技術解析

穩定高效的管控能力

開源ClickHouse的特色是性能十分優異,但是在運維上卻相對比較複雜。自建ClickHouse往往面臨著安全管理、擴縮容、配置管理、SQL查詢分析、Failover高可用等多方面的挑戰。雲數據庫ClickHouse基於開源ClickHouse內核,為之配備了穩定、高效、全方位的管控能力。

• 安全增強
在管控操作方面,藉助於阿里雲RAM身份鑑權服務,雲數據庫ClickHouse控制檯提供了多用戶登陸、子賬號授權、跨賬號授權等多種能力,方便企業客戶按照自身需要合理切分權限體系,既保證權限可用,又不至於過度授權。搭配數據管理服務DMS,提供數據工單審批機制,進一步限制查詢、導出、修改等權限的使用範圍。

在網絡鏈路方面,默認情況下只提供VPC endpoint,只能在內網聯通,降低數據洩露風險;同時也保留了開通公網endpoint的能力,讓客戶自由選擇。白名單機制配合ECS安全組策略,確保了只有指定IP Range能夠訪問數據庫服務,進一步增強鏈路安全。

• 集群配置管理
ClickHouse是鬆散的share-nothing架構,一個集群往往有多個server共同構成。一般情況下,要修改配置需要逐臺登陸機器進行修改,非常耗時費力而且容易出錯。如何保持多臺server上的配置一致性,也是個難題。

雲數據庫ClickHouse從2個方面增強了配置管理功能。首先,對於用戶配置,修改數據庫內核提供了新語法 set global on cluster default key = value,一行SQL即可修改所有server的用戶配置,並且自動持久化。其次,對於系統參數,通過控制檯頁面提供可視化的修改功能,不僅能自動校驗參數合法性,而且根據內核原理判斷是否需要重啟才能生效。最後,通過後臺任務檢查,確保所有server參數一致。

• 擴縮容&升降配
水平擴縮容、垂直升降配是數據庫必備的能力,確保數據庫集群能夠動態滿足業務需求。但是擴縮容無法自動rebalance數據、無法自動遷移庫表結構等,是社區版本ClickHouse的一大痛點。

雲數據庫ClickHouse內在的實現了擴縮容場景下數據自動rebalance的能力,確保集群成員變更後能夠不同server之間負載均衡。基於管控和內核的共同優化,自動rebalance數據的速度可以高達單機100MB/S~200MB/S,而且支持遷移本地表、分佈式表、外部表、物化視圖、詞典、集群配置、安全白名單等多種數據庫對象。

雲數據庫ClickHouse也提供了垂直升降配的能力,在不改變集群節點個數的情況下,完全動態的調整CPU、Memory、Disk的規格,在高峰期升配滿足業務需求,在低峰期降配節省成本。

• 監控告警及SQL分析
雲數據庫ClickHouse提供開箱即用的監控界面,包括了豐富的性能及集群狀態指標,如CPU利用率、內存利用率、磁盤空間及使用率、查詢QPS、寫入TPS、ZooKeeper延時等。搭配阿里云云監控產品CMS, 實現了強大的告警能力,支持客戶按照業務特點靈活的自定義告警規則,比如可以通過頁面拖拽的方式實現磁盤使用率超過80%時自動短信、電話、郵件告警等。

在監控告警的基礎上,雲數據庫ClickHouse進一步提供了SQL分析的功能,幫助客戶定位引起系統異常的原因。SQL分析功能能夠自動識別系統中的慢SQL,並且展示這些慢SQL的執行統計信息,如耗時、執行狀態、掃描數據量等。

流暢通達的數據鏈路

分析業務往往需要從不同數據源頭匯聚數據,並最終基於多方數據給出分析結果。數據導入導出是否有相應的通道支持、速度是否滿足性能要求,直接決定著分析業務的開發效率和產出質量。

雲數據庫ClickHouse提供了完善的雲上數據生態。當前支持的數據源包括:

1)RDS MySQL及自建MySQL:配合阿里雲數據傳輸服務DTS,雲數據庫ClickHouse實現了從RDS MySQL實時增量導入數據到ClickHouse。通過batch化寫入,既保證了增量導入的性能,又提供了可控的同步延時。通過將delete/update轉化為insert,避開了ClickHouse對於delete/update的限制,消除了常見的too many parts報錯。另外,雲數據庫ClickHouse還支持批量自動遷移MySQL庫表結構到ClickHouse,智能的根據MySQL庫表特點、ClickHouse集群特點,從ClickHouse十幾種表引擎中選擇最合適的表引擎,並設置合理的引擎參數。

2)日誌服務SLS:日誌是分析數據的一大來源,雲數據庫ClickHouse打通了與日誌服務SLS的數據遷移通道。能夠自動識別SLS的數據schema,實時增量同步數據。同時,也提供了豐富的日誌傳輸監控功能,包括導入速度、錯誤率、當前CPU/MEM消耗等。

3)MaxCompute(原ODPS):離線數倉中往往存儲著海量歷史數據,但是在業務越來越趨近實時化的大背景下,離線計算的性能已經無法滿足要求。因此將熱數據導入到ClickHouse中進行計算加速,是常見的業務架構。雲數據庫ClickHouse支持以外表方式直接導入MaxCompute數據,藉助於精心實現的導入架構,雲數據庫ClicckHouse支持集群內多機並行、單機內多線程並行導入,能夠實現單機80MB/S~100MB/S的導入速度,而且伴隨著集群機器臺數的增長,完全可線性拓展。

4)對象存儲服務OSS及分佈式文件系統HDFS:在OSS/HDFS中往往存儲著大量Parquet、ORC、CSV等格式的對象文件,雲數據庫ClickHouse同樣支持以外表方式直接導入各種格式的原始數據。

除了以上數據源,雲數據庫ClickHouse還支持Spark、Flink、Kafka等多種數據源的導入功能。

極致優化的內核技術

基於開源ClickHouse,雲數據庫ClickHouse實現了大量的內核優化及新功能開發。

• 維度表
開源ClickHouse提供了詞典功能來模擬維度表,該方法存在以下問題:1)需要從外部數據源如MySQL中加載,對於詞典數據的管理需要在其他系統中進行,業務上實現邏輯相對複雜且無法在ClickHouse中實時感知詞典變化;2)詞典數據需要一直保存在內存中,當詞典數據較大且個數較多時,內存耗用大;3)使用時,需要通過dictGet等函數進行讀取,不符合常規SQL使用習慣。

雲數據庫ClickHouse原生實現了維度表功能,解決了以上問題。首先,寫入數據會自動同步到每臺server上確保一致性;其次,數據落盤確保數據不丟且不會佔用過多內存,結合cache機制也保證了熱數據的IO性能;最後,維度表完全在雲數據庫ClickHouse內部管理,無需耦合其他系統,極大的簡化了業務上的使用和維護代價。

• 資源隊列
在分析型業務中,workload通常靈活多變,帶來了穩定性上的諸多挑戰。系統中既有對於響應速度要求高的簡單查詢,也有需要長時間run的複雜查詢,如何避免高併發的複雜查詢耗盡系統資源導致server OOM?又如何避免複雜查詢一直佔據系統資源不釋放從而影響了簡單查詢的響應時間?

為了解決以上問題,雲數據庫ClickHouse開發了資源隊列功能,使得用戶可以指定某個資源隊列的CPU、內存使用量。一來確保了特定資源隊列中的查詢,不會使用超過該隊列限定的資源量,確保系統不會因為複雜查詢併發太大而OOM;二來也確保了不同資源隊列之間不會相互干擾,從而確保不同業務的相互獨立。

此外,簡單的資源隊列硬隔離方案,會造成資源浪費,比如隊列A不使用的內存也無法被隊列B利用。雲數據庫ClickHouse在資源隊列基礎上,還實現了動態的資源共享與搶佔。當一個隊列資源空閒時,可以共享給其他隊列使用;當查詢下發到隊列中後,會動態的將被佔用資源搶佔回來。

• 冷熱數據分層存儲
海量數據的存儲成本往往是業務系統技術選型的關鍵考慮因素之一。在分析業務中,通常有著明顯的冷熱數據特徵,比如經常查詢最近一個月的數據且對性能要求較高,其他數據查詢頻率極低且可以容忍更高的響應時間。結合這個業務特點,將冷熱數據分別存儲於不同介質上,可以大幅度降低存儲成本。

雲數據庫ClickHouse基於OSS,設計並實現了分層存儲:熱數據被存放在本地盤中,確保查詢性能;冷數據按照過期時間或指定存儲策略被轉移到OSS上。考慮到OSS有如下系統特點,也即單次訪問latency相對較高、對於metadata 的操作有QPS限制、按照object key前綴有序保存數據會引起訪問熱點。為了最大化分層存儲的性能,雲數據庫ClickHouse全新設計了存儲方案:將實際數據文件改名為隨機文件名,並且存儲到OSS bucket中;將數據文件對應的metadata仍舊保存在本地盤中,並在metadata中保存指向OSS實際文件的指針。這樣對於metadata的訪問延時很小且不會超出OSS QPS限制,而數據文件也因為隨機文件命名而被分散到了OSS的不同分片上,從而具有最大的IO吞吐能力。

未來展望

雲數據庫ClickHouse未來會繼續夯實彈性管控、數據鏈路等基礎能力,同時從內核上不斷增強ClickHouse現有性能優勢,開發二級稠密索引、存儲計算分離等核心功能,並且逐步優化分佈式計算能力。雲數據庫ClickHouse將在產品體驗和性價比上持續投入,做最快最便宜的列式數據庫!

瞭解更多詳情可點擊:
https://www.aliyun.com/product/clickhouse

Leave a Reply

Your email address will not be published. Required fields are marked *