




極光開發(fā)者服務(wù)為移動app開發(fā)者提供各種豐富可靠高效的開發(fā)者產(chǎn)品服務(wù),面對不同產(chǎn)品服務(wù)的業(yè)務(wù)數(shù)據(jù)分析統(tǒng)計(jì)訴求,如何在千億級的海量數(shù)據(jù)中實(shí)現(xiàn)多維分析和ad-hoc即席查詢,為開發(fā)者提供高效、精準(zhǔn)的數(shù)據(jù)分析查詢服務(wù)成為極光面臨的問題。
極光大數(shù)據(jù)服務(wù)團(tuán)隊(duì)通過對ClickHouse的深入探索實(shí)踐表明,ClickHouse比較完美解決了查詢瓶頸,單表十億級別數(shù)據(jù)量級查詢,95%可以在毫秒級別(ms)完成計(jì)算返回結(jié)果。
極光開發(fā)者服務(wù)包括推送、統(tǒng)計(jì)、認(rèn)證、魔鏈、IM、短信等產(chǎn)品服務(wù),隨著業(yè)務(wù)發(fā)展,每天有上百萬個(gè)app使用,為14億級月活終端用戶提供各類移動應(yīng)用服務(wù),每天產(chǎn)生千億級記錄,而且每個(gè)產(chǎn)品服務(wù)依據(jù)自身業(yè)務(wù)特點(diǎn),對數(shù)據(jù)分析有不同要求,涵蓋基礎(chǔ)用戶統(tǒng)計(jì)分析、推送統(tǒng)計(jì)分析、認(rèn)證消耗分析、頁面流分析、留存分析、終端分析、事件分析、用戶行為路徑分析、用戶畫像分析等業(yè)務(wù)分析模塊,涉及的數(shù)據(jù)指標(biāo)多達(dá)500+,這對數(shù)據(jù)分析和BI指標(biāo)統(tǒng)計(jì)提出了挑戰(zhàn)。極光服務(wù)中典型的數(shù)據(jù)分析需求有如下幾類:
極光推送產(chǎn)品的「消息實(shí)時(shí)統(tǒng)計(jì)」,開發(fā)者希望以小時(shí)為維度實(shí)時(shí)查看消息下發(fā)、送達(dá)和點(diǎn)擊等數(shù)據(jù),以判斷消息下發(fā)進(jìn)度。
極光推送產(chǎn)品的「消息轉(zhuǎn)化漏斗」,開發(fā)者希望從APP應(yīng)用維度和單條消息維度,分別查看推送消息的轉(zhuǎn)化數(shù)據(jù),同時(shí)希望可以支持平臺、通道和消息類型等維度篩選。
極光推送產(chǎn)品的「消息折損分析」,開發(fā)者希望從APP應(yīng)用維度和單條消息維度,分別查看消息折損的原因和類別,能夠查看在不同消息發(fā)送階段的折損數(shù)量。
極光運(yùn)營增長產(chǎn)品的「精準(zhǔn)人群計(jì)算與人群預(yù)測」,運(yùn)營人員自定義條件規(guī)則圈選目標(biāo)人群,人群需要例行計(jì)算出人群包用與運(yùn)營觸達(dá)服務(wù)。同時(shí)還希望使用極光AI服務(wù)預(yù)測潛在沉默人群、潛在高價(jià)值人群用于提前干預(yù)運(yùn)營。
極光運(yùn)營增長產(chǎn)品的「運(yùn)營計(jì)劃實(shí)時(shí)監(jiān)控」,運(yùn)營人員希望創(chuàng)建完成運(yùn)營計(jì)劃后,可以實(shí)時(shí)查看運(yùn)營計(jì)劃的用戶消息觸達(dá)、用戶目標(biāo)達(dá)成率等數(shù)據(jù),以便于隨時(shí)優(yōu)化和干預(yù)運(yùn)營計(jì)劃,確保運(yùn)營目標(biāo)的達(dá)成。
極光運(yùn)營增長產(chǎn)品的「營銷分與智能標(biāo)簽」,運(yùn)營人員基于可視化規(guī)則創(chuàng)建的營銷分和智能標(biāo)簽,需要例行計(jì)算以便更新用戶數(shù)據(jù),用于支撐營銷運(yùn)營策略。
經(jīng)過對主流OLAP組件對比調(diào)研發(fā)現(xiàn),ClickHouse有三個(gè)特征滿足極光開發(fā)者服務(wù)數(shù)據(jù)分析使用要求:
01、支持列式存儲和數(shù)據(jù)壓縮
為了實(shí)現(xiàn)支持單表百億數(shù)據(jù)集中查詢分析時(shí),能夠靈活選擇各種維度組合并且秒級返回執(zhí)行結(jié)果,ClickHouse按列存儲的特性便可以極大提升數(shù)據(jù)查詢的效率,因?yàn)榘戳写鎯εc按行存儲相比,前者可以有效減少查詢時(shí)所需掃描的數(shù)據(jù)量,如果數(shù)據(jù)按行存儲,數(shù)據(jù)庫首先會逐行掃描,并獲取每行數(shù)據(jù)的所有字段,再從每一行數(shù)據(jù)中返回查詢所需要的字段,導(dǎo)致會掃描所有的字段。如果數(shù)據(jù)按列組織,數(shù)據(jù)庫可以直接獲取想查詢的列的數(shù)據(jù),從而避免了多余的數(shù)據(jù)行掃描。
ClickHouse采用的壓縮算法可以將列的數(shù)據(jù)進(jìn)行壓縮處理,數(shù)據(jù)中的重復(fù)項(xiàng)越多,則壓縮率越高;壓縮率越高,則數(shù)據(jù)體量越?。欢鴶?shù)據(jù)體量越小,則數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸越快,對網(wǎng)絡(luò)帶寬和磁盤I/O的壓力也就會進(jìn)一步地變小,并且支持LZ4、ZSTD壓縮算法,其中ZSTD可以提供極高壓縮比,節(jié)省大量存儲空間。
02、MPP架構(gòu)
03、高性能表引擎+向量執(zhí)行+高效索引
為了高效的使用CPU,數(shù)據(jù)不僅僅按列存儲,同時(shí)還可利用SIMD 指令進(jìn)一步加速執(zhí)行效率,這部分是ClickHouse 優(yōu)于大量同類OLAP 產(chǎn)品的重要因素;
主鍵索引采用排序+稀疏索引結(jié)構(gòu),只要過濾條件在索引列中包含即可觸發(fā)索引快速查詢,即使作為過濾條件的數(shù)據(jù)不在索引中,由于各種并行處理機(jī)制ClickHouse全表掃描的速度也很快,列式存儲用于減少不必要的字段讀取,而索引則用于減少不必要的記錄讀取。ClickHouse同時(shí)支持豐富的二級索引,支持跳表結(jié)構(gòu)、Bloom Filter等過濾功能,從而在查詢時(shí)盡可能的減少不必要的記錄讀取,提高查詢性能。
架構(gòu)設(shè)計(jì)特點(diǎn):
對比Lambda架構(gòu),采用ZooKeeper將實(shí)時(shí)和離線作為統(tǒng)一存儲,很大程度上規(guī)避了Lambda架構(gòu)上實(shí)時(shí)和離線分離維護(hù)復(fù)雜度高的問題,數(shù)據(jù)完整性、一致性、準(zhǔn)確性、時(shí)效性得到極大提高;
對比Kappa架構(gòu),避免了重度依賴消息隊(duì)列,數(shù)據(jù)查詢和計(jì)算性能可靠穩(wěn)定性得到保證;
支持SQL查詢語法,配合Native、Jdbc多種服務(wù)接口,ZooKeeper通過多項(xiàng)技術(shù)優(yōu)化實(shí)現(xiàn)高效OLAP執(zhí)行查詢;
支持實(shí)時(shí)批量插入數(shù)據(jù)和離線文件導(dǎo)入,即滿足現(xiàn)網(wǎng)實(shí)時(shí)流秒級ad-hoc即席查詢,同時(shí)離線導(dǎo)入海量預(yù)計(jì)算指標(biāo)數(shù)據(jù)文件,滿足大時(shí)間范圍指標(biāo)快速查詢,為業(yè)務(wù)提供最佳SLA上卷下鉆查詢服務(wù);
提供豐富高效的數(shù)據(jù)結(jié)構(gòu)類型和功能函數(shù),滿足快速開發(fā)實(shí)現(xiàn)各種業(yè)務(wù)數(shù)據(jù)分析場景;
ClickHouse不同于Elasticsearch、HDFS這類主從架構(gòu)的分布式系統(tǒng),它采用多主(無中心)架構(gòu),集群中的每個(gè)節(jié)點(diǎn)角色對等,客戶端訪問任意一個(gè)節(jié)點(diǎn)都能得到相同的效果。
ClickHouse借助分片將數(shù)據(jù)進(jìn)行橫向切分,而分片依賴集群,每個(gè)集群由1到多個(gè)分片組成,每個(gè)分片對應(yīng)了ClickHouse的1個(gè)服務(wù)節(jié)點(diǎn);分片數(shù)量的上限取決于節(jié)點(diǎn)數(shù)量(1個(gè)分片只能對應(yīng)1個(gè)服務(wù)節(jié)點(diǎn))。ClickHouse提供了本地表與分布式表的概念;一張本地表等同于一個(gè)數(shù)據(jù)分片。而分布式表是張邏輯表,本身不存儲任何數(shù)據(jù),它是本地表的訪問代理,其作用類似分庫中間件。借助分布式表,能夠代理訪問多個(gè)數(shù)據(jù)分片,從而實(shí)現(xiàn)分布式查詢。
ClickHouse的數(shù)據(jù)副本一般通過ReplicatedMergeTree復(fù)制表系列引擎實(shí)現(xiàn),副本之間借助ZooKeeper實(shí)現(xiàn)數(shù)據(jù)的一致性,在生產(chǎn)環(huán)境一般是分布式表提供查詢服務(wù),本地表提供寫入功能,實(shí)現(xiàn)讀寫分離。
綜上所述,生產(chǎn)環(huán)境高可用組網(wǎng)方式:
部署ZooKeeper集群,支持ClickHouse分布式DDL執(zhí)行、ReplicatedMergeTree表主備節(jié)點(diǎn)之間的狀態(tài)同步功能;
部署Chproxy集群,為外部查詢提供代理功能,提供多種能力:
將ClickHouse集群劃分為多個(gè)邏輯集群,不同邏輯集群按需進(jìn)行配置;
Chproxy節(jié)點(diǎn)都是無狀態(tài)模式,上層可以掛在負(fù)載均衡(loadbalancing),可做到Chproxy層面的高可用,也可橫向擴(kuò)展業(yè)務(wù)能力;
對邏輯用戶進(jìn)行查詢、訪問、安全等限制,并支持緩存結(jié)果;
ClickHouse采用分布式表+集群分片方式,實(shí)現(xiàn)表存儲高可用和負(fù)載均衡;
選用了ClickHouse官方提供的一個(gè)測試方案:SSB(Star Schema Benchmark)
https://clickhouse.com/docs/en/getting-started/example-datasets/star-schema
測試服務(wù)器選取中等配置:
cpu:16核Intel(R)Xeon(R) Gold 6278C CPU @ 2.60GHz;
內(nèi)存:32GB;
超高速云盤(350MB/s):500GB;
數(shù)據(jù)盤采用ext4文件系統(tǒng),ioscheduler采用deadline方式;
使用dbgen生產(chǎn)6億數(shù)據(jù),導(dǎo)入test庫中:
測試結(jié)果如下:
掃描6億數(shù)據(jù)執(zhí)行查詢分析SQL,時(shí)間消耗保持在10秒以下,性能已經(jīng)非常出眾,滿足產(chǎn)品業(yè)務(wù)要求。
ZooKeeper集群生產(chǎn)環(huán)境建議采用3.6.x以上版本,集群采用5節(jié)點(diǎn),配置文件使用ClickHouse推薦配置參數(shù),采用supervisor?;睿M量保證ZooKeeper集群運(yùn)行穩(wěn)定可靠;
生產(chǎn)環(huán)境建議采用高配置服務(wù)器,推薦內(nèi)存和存儲空間(壓縮后)比1:50,存儲采用ssd,對比機(jī)械硬盤讀寫可以提高10倍以上,如果考慮成本可以采用zstd壓縮和冷熱數(shù)據(jù)分級存儲;
Hive導(dǎo)入ClickHouse,推薦使用Apache Seatunnel,開發(fā)簡單穩(wěn)定高效;
離線預(yù)決算指標(biāo)結(jié)果文件導(dǎo)出為Parquet格式,并且按照ClickHouse表分區(qū)方式拆分文件,文件內(nèi)數(shù)據(jù)按照orderby字段排序,滿足TB級別數(shù)據(jù)1小時(shí)導(dǎo)入;
實(shí)時(shí)寫入批量建議大于20萬條,并且按照表分區(qū)拆分,數(shù)據(jù)按照orderby字段排序,這樣導(dǎo)入效率極高,減少分區(qū)排序消耗;
推薦生產(chǎn)環(huán)境分布式表提供查詢服務(wù),本地表提供寫入功能,實(shí)現(xiàn)讀寫分離;
不同用戶賬號查詢并發(fā)數(shù)使用max_concurrent_queries_for_user實(shí)現(xiàn)控制,避免出現(xiàn)某個(gè)賬號占用所有查詢資源,其他賬號無法得到資源保證;
建議增加groupby或者sort的磁盤溢出功能,配置max_bytes_before_external_group_by和max_bytes_before_external_sort 參數(shù),提高查詢穩(wěn)定性;
數(shù)據(jù)去重查詢建議采用ReplacingMergeTree+Final查詢,實(shí)現(xiàn)數(shù)據(jù)精準(zhǔn)去重;
數(shù)據(jù)更新不同場景可以采用不同方案,單條更新可以參考數(shù)據(jù)去重實(shí)現(xiàn)方式,批量更新可以采用先刪后寫方式實(shí)現(xiàn),這里要注意刪除采用同步刪除并且設(shè)置insert_deduplicate=0;
啟動字典表和低基數(shù)字典功能,可以提高維度字典關(guān)聯(lián)速度和減少存儲;
物化視圖和projection可以實(shí)現(xiàn)多種維度排序組合加速查詢,但是需要更多空間和消耗部分服務(wù)器性能,簡單理解為空間換時(shí)間;
udf實(shí)現(xiàn)支持3種方式,推薦選擇2:
lambda語法內(nèi)建udf,實(shí)現(xiàn)簡單,但是功能受限;
配置
user_defined_executable_functions_config,導(dǎo)入外部程序?qū)崿F(xiàn)udf功能,通過開發(fā)獨(dú)立腳本或者程序?qū)崿F(xiàn)復(fù)雜處理功能;
修改源碼,直接加入udf函數(shù),需要較高人力成本投入,運(yùn)維復(fù)雜高;
維度變化較少的指標(biāo),建議使用預(yù)計(jì)算實(shí)現(xiàn)歷史數(shù)據(jù)計(jì)算,這樣可以提高查詢效率,如果出現(xiàn)查詢OOM情況,在沒有辦法增加資源情況下,建議縮短查詢范圍,分解為多次查詢再聚合結(jié)果;
盡量避免大表之間JOIN,如果確實(shí)無法避免,可以考慮采用分區(qū)分桶實(shí)現(xiàn),本地化JOIN結(jié)果再聚合,避免全局JOIN內(nèi)存不足;
數(shù)據(jù)遷移可以按照分區(qū)方式導(dǎo)出為native格式文件,采用離線加載方式導(dǎo)入;
ClickHouse、ZooKeeper、Chproxy可以通過Prometheus+Grafana實(shí)現(xiàn)監(jiān)控告警。
ClickHouse集群監(jiān)控:
ZooKeeper集群監(jiān)控:
Chproxy集群監(jiān)控:
ClickHouse集群維護(hù)開發(fā)工具,提高集群擴(kuò)縮容、數(shù)據(jù)遷移等操作效率;
ClickHouse-keeper代替ZooKeeper,簡化組網(wǎng)部署,提高服務(wù)穩(wěn)定性和可維護(hù)性;
ClickHouse采用RBAC實(shí)現(xiàn)精細(xì)化訪問控制;
ClickHouse容器化+存算分離探索。
關(guān)于極光
極光(Aurora Mobile,納斯達(dá)克股票代碼:JG)成立于2011年,是中國領(lǐng)先的客戶互動和營銷科技服務(wù)商。成立之初,極光專注于為企業(yè)提供穩(wěn)定高效的消息推送服務(wù),憑借先發(fā)優(yōu)勢,已經(jīng)成長為市場份額遙遙領(lǐng)先的移動消息推送服務(wù)商。隨著企業(yè)對客戶觸達(dá)和營銷增長需求的不斷加強(qiáng),極光前瞻性地推出了消息云和營銷云等解決方案,幫助企業(yè)實(shí)現(xiàn)多渠道的客戶觸達(dá)和互動需求,以及人工智能和大數(shù)據(jù)驅(qū)動的營銷科技應(yīng)用,助力企業(yè)數(shù)字化轉(zhuǎn)型。
熱門文章
GPTBots × ZohoSalesIQ 集成實(shí)戰(zhàn):智能代理與?效轉(zhuǎn)??的最佳實(shí)踐解析
2025-09-05
EngageLab 發(fā)布 Chrome 插件推送能力:解鎖 WebPush 免授權(quán)、系統(tǒng)級通知新體驗(yàn)
2025-09-01
GPTBots 技術(shù)揭秘:我們?nèi)绾螐?到1打造支撐AI高效運(yùn)行的會話級代碼解釋器
2025-08-18
開發(fā)者必看:2025最高效的推送圖標(biāo)配置指南
2025-07-16
低延遲音頻深度解析:GPTBots 技術(shù)方案
2025-07-14
相關(guān)文章
極光官方微信公眾號
關(guān)注我們,即時(shí)獲取最新極光資訊
現(xiàn)在注冊,領(lǐng)取新人大禮包