成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WeOLAP:微信 OLAP 湖倉新場景優(yōu)化實(shí)踐

大數(shù)據(jù) 數(shù)據(jù)湖
ClickHouse 在微信團(tuán)隊(duì)有著廣泛應(yīng)用,如實(shí)時(shí)報(bào)表、AB 實(shí)驗(yàn)和實(shí)時(shí)計(jì)算等,通過將 Hadoop 相關(guān)生態(tài)集成到 ClickHouse 中,性能得到了十倍到百倍的提升,能夠做到萬億級(jí)數(shù)倉、亞秒級(jí)響應(yīng)和穩(wěn)定高可用。

 ClickHouse 在微信有著廣泛應(yīng)用,如何保障其自身查詢性能,并能在新場景中結(jié)合應(yīng)用成為了關(guān)鍵問題。基于該背景,開發(fā)團(tuán)隊(duì)首先針對(duì)ClickHouse 的性能問題,開發(fā)了相應(yīng)的性能觀測工具,并在數(shù)據(jù)查詢、策略實(shí)驗(yàn)等場景針對(duì)性進(jìn)行了湖倉讀取、bitmap 計(jì)算等方面的探索優(yōu)化,最后將 ClickHouse 在 AI 場景進(jìn)行落地應(yīng)用,沉淀了融合 OLAP 能力的成熟數(shù)據(jù)管線。

一、ClickHouse 在微信的應(yīng)用

1. ClickHouse 在微信的應(yīng)用

ClickHouse 在微信團(tuán)隊(duì)有著廣泛應(yīng)用,如實(shí)時(shí)報(bào)表、AB 實(shí)驗(yàn)和實(shí)時(shí)計(jì)算等,通過將 Hadoop 相關(guān)生態(tài)集成到 ClickHouse 中,性能得到了十倍到百倍的提升,能夠做到萬億級(jí)數(shù)倉、亞秒級(jí)響應(yīng)和穩(wěn)定高可用。

圖片

ClickHouse 在微信的集群規(guī)模有數(shù)千臺(tái),Top50 響應(yīng)時(shí)長約 0.34 秒,平均響應(yīng)時(shí)長為 4 秒,查詢量級(jí)為每天百萬級(jí)。當(dāng)前的主要版本是基于社區(qū)的 22.8,少量版本對(duì)應(yīng)社區(qū) 23.3。

圖片

2. 新場景應(yīng)用

過去一年我們探索了 ClickHouse 的一些新的應(yīng)用場景。在湖倉讀取方面,基于 Iceberg/Hive 進(jìn)行讀取和湖上數(shù)據(jù)加工,來緩解數(shù)據(jù)孤島問題;在實(shí)驗(yàn)新場景上,進(jìn)行畫像分析、人群圈選,支撐實(shí)時(shí)可見的在線實(shí)驗(yàn)系統(tǒng);另外,也與 AI 進(jìn)行結(jié)合,通過成熟的 OLAP 數(shù)據(jù)管線為近/離線模型推理進(jìn)行提效。

圖片

二、ClickHouse 的性能觀察工具

作為一個(gè)用戶,需要感知查詢的資源消耗;作為一個(gè)運(yùn)維同學(xué),需要知道如何優(yōu)化集群負(fù)載;作為一個(gè)開發(fā)同學(xué),需要快速定位慢查詢的原因。這些都離不開性能觀察工具。ClickHouse 提供了一系列便捷的性能觀測工具,如 Query Log、Query Thread Log、Sampling Query Profiler 和 Flame Graph 等。

圖片

首先是最常用的 Query Log 和 Query Thread Log,通過查詢的 query id,可以對(duì)這條查詢性能進(jìn)行觀察分析。我們還可以在代碼中增加自定義的 Profile Event,方便定制一些觀測指標(biāo)。

圖片

第二個(gè)是 Sampling Query Profiler 和 ClickHouse Flame Graph,通過可視化的火焰圖能夠直觀地對(duì)內(nèi)存和 CPU 進(jìn)行分析,在 CH 可以對(duì)指定查詢進(jìn)行 profile,支持的最細(xì)粒度為 query 級(jí)別。它有一個(gè)缺點(diǎn),會(huì)將一個(gè)查詢涉及到的多個(gè)線程匯聚到一起,導(dǎo)致無法對(duì)單個(gè)線程的情況進(jìn)行分析。我們針對(duì)這個(gè)問題也做了改進(jìn)優(yōu)化,使它能支持線程級(jí)的單個(gè)展示和查詢聚合。

圖片

第三個(gè)是 Processors Profile Log,它可以幫助我們清晰地看到每個(gè)算子的耗時(shí),判斷算子間是否均衡、是否存在傾斜情況,也可以幫助我們看到算子間的依賴關(guān)系。

圖片

WeOLAP 團(tuán)隊(duì)還自研了性能分析工具 Profile Engine,從事前和事后兩個(gè)場景進(jìn)行優(yōu)化。在事前對(duì)用戶提交的 SQL 結(jié)合集群信息和表信息進(jìn)行分析,并基于索引、分區(qū)等給出相應(yīng)可視化改進(jìn)建議;在事后基于制定的規(guī)則對(duì)大查詢和慢查詢進(jìn)行分析,給出優(yōu)化建議。通過這個(gè)工具,既可以給使用者提出優(yōu)化建議,也可以幫助使用者平衡集群負(fù)載。該工具上線后的使用效果很不錯(cuò)。

圖片

三、湖倉讀取優(yōu)化

ClickHouse 在湖倉鏈路中既是存儲(chǔ)組件又是計(jì)算組件,跨層的存在會(huì)導(dǎo)致一些問題:

  • ClickHouse 中的數(shù)據(jù)有孤島化傾向,不能被 Spark、Presto 等引擎查詢。
  • 數(shù)據(jù)冗余,Shared-nothing 帶來昂貴的機(jī)器成本。
  • 繁瑣的數(shù)據(jù) ETL。

我們的改進(jìn)目標(biāo)是讓 ClickHouse 作為計(jì)算組件,直接讀取湖倉數(shù)據(jù)。

圖片

其中存在一些挑戰(zhàn):

  • ClickHouse 目前只支持單機(jī)讀取 Hive。
  • ClickHouse 支持讀取 Iceberg,但僅限 S3 存儲(chǔ)。
  • Iceberg 沒有 C++ 的 API。
  • 現(xiàn)在只支持 Hive/Iceberg 外表,一旦表 schema 變化,需要手動(dòng)同步 DDL 修改。
  • 部分場景的 ORC 讀取性能不佳。

圖片

針對(duì)上述問題,我們采取了如下優(yōu)化措施:

  • 新增外置 HTTP 協(xié)議的 Iceberg API server,使用 Java 繞開 C++ 限制,實(shí)現(xiàn)外置 server。
  • 通過一致性 hash 分發(fā)文件路徑到各節(jié)點(diǎn)實(shí)現(xiàn)分布式讀取。
  • 對(duì)元信息和數(shù)據(jù)文件進(jìn)行 cache。
  • 讀取集群和計(jì)算集群分離。

圖片

增加外庫實(shí)現(xiàn),避免手動(dòng)繁瑣的建表和元信息不一致問題。

圖片

ClickHouse 在讀取某些 ORC 文件時(shí)會(huì)很慢,例如示例的 select * 和 select count(1)。

圖片

通過火焰圖分析,我們發(fā)現(xiàn) Apache Arrow 庫讀取 ORC 有大量的 memcpy,十分影響性能。我們切換到了 Apache ORC 庫進(jìn)行讀取,整體性能提升了 0.5 到 1 倍。

圖片

在某些場景會(huì)出現(xiàn) IO 浪費(fèi),如圖中的 select 一列,在 stripe size 為 4MB 和 64MB 時(shí),對(duì)應(yīng)解壓后的大小相等,但 HDFS 讀取量差異很大。

圖片

ReadBuffer 在讀取時(shí)很容易 cache 大量我們不需要的數(shù)據(jù),幫我們緩存很多不需要的列,造成大量 IO 浪費(fèi)。此外,在讀取時(shí)會(huì)先讀 stripe footer,再讀 row data,導(dǎo)致頻繁地 HDFS seek。以上這兩點(diǎn)是造成 IO 浪費(fèi)的主要原因。

圖片

我們采用 IO 預(yù)讀機(jī)制對(duì) ORC 的讀取性能進(jìn)行優(yōu)化。首先,ORC 文件可以提前計(jì)算文件中哪些 range 是需要被讀取的,基于此,我們將讀取規(guī)則改為當(dāng)讀命中某個(gè) range 時(shí),按照 range 粒度執(zhí)行預(yù)讀,并將臨近 range 進(jìn)行合并,減少HDFS seek 次數(shù)。

圖片

在應(yīng)用該讀取優(yōu)化后,性能提升十分明顯,以圖中的讀取 6 列為例,原有的 40 秒查詢縮短至 3.7 秒,提升了 10 倍。

圖片

此外,我們還做了 HDFS 優(yōu)化、元信息優(yōu)化和資源并發(fā)鏈接限制,基于這些優(yōu)化,在典型場景性能提升了 5 到 10 倍。

四、實(shí)驗(yàn)場景 Bitmap 優(yōu)化

在命中分析、畫像圈選中可以使用 bitmap 進(jìn)行查詢加速,將原有的交并補(bǔ)邏輯轉(zhuǎn)換為位圖操作,相比明細(xì)表的聚合或 join 查詢,通常可以取得數(shù)倍的性能提升。

圖片

ClickHouse 數(shù)據(jù)按行進(jìn)行拆分運(yùn)算,在 bitmap 場景中,不用批數(shù)據(jù)的行數(shù),即使行數(shù)相同,其代表的計(jì)算工作量也存在很大差異,造成了數(shù)據(jù)傾斜,其中某個(gè) pipe 的工作量顯著高于別的 pipe,以至拖慢了整個(gè)查詢。

圖片

我們的解決方案是在執(zhí)行引擎新增 repartition 階段,重新進(jìn)行數(shù)據(jù)均衡,并將數(shù)據(jù)分發(fā)到所有后續(xù) pipe。在大 bitmap 計(jì)算中,數(shù)據(jù)傾斜場景性能提升約 10%~20%。

圖片

我們通過 ClickHouse Flame Graph 對(duì)三個(gè)線程的執(zhí)行過程進(jìn)行分析,發(fā)現(xiàn)有兩個(gè)執(zhí)行線程長時(shí)間等待,而另一個(gè)執(zhí)行線程耗時(shí)在讀取 bitmap,讀取開銷遠(yuǎn)大于計(jì)算。

圖片

ClickHouse 在 mark 級(jí)以下沒有任何并行化機(jī)制,我們針對(duì)性優(yōu)化成支持行級(jí)并行讀取,對(duì)于大 bitmap 異步進(jìn)行反序列化讀取,并減少內(nèi)存拷貝操作。

圖片

另外,我們通過對(duì)原有字段編碼進(jìn)行壓實(shí),既節(jié)省了存儲(chǔ)空間,又提升了性能。

圖片

新增內(nèi)核特性可編碼字典 Encode Dictionary,支持單機(jī)字典和副本同步字典,支持所有原生 ClickHouse 字典函數(shù),支持 value to key 反查,以及 bitmap to bitmap 編碼。

圖片

在經(jīng)過以上優(yōu)化后,我們?cè)跍y試數(shù)據(jù)集上的性能提升很明顯。在 bitmap32 上,求并集和交集有 10 倍的性能提升,在 bitmap64 上,有百倍的提升。

圖片

在實(shí)際業(yè)務(wù)應(yīng)用上,bitmap64 場景從查不了變?yōu)椴榈每欤琤itmap32 場景從快到更快,在畫像分析、實(shí)驗(yàn)留存分析和表存儲(chǔ)等方面優(yōu)化效果都很不錯(cuò)。

圖片

五、ClickHouse with AI

隨著機(jī)器學(xué)習(xí)的興起,圖片或文本通過 embedding 高維向量的方式表達(dá),求解相似度會(huì)轉(zhuǎn)換為計(jì)算向量間的距離。在離線加工場景使用 OLAP 有很多優(yōu)勢(shì),比如可以基于元數(shù)據(jù)過濾、做一些聚合操作,以及配合 UDF 進(jìn)行加工等等。此外,我們也在精確距離運(yùn)算、ANN 索引等方面做了一些探索性的優(yōu)化。

圖片

我們基于 ClickHouse 對(duì)整套算法鏈路做了重構(gòu),融合 OLAP 成熟數(shù)據(jù)管線,實(shí)現(xiàn)了推理、加工和檢索一體化。當(dāng)有復(fù)用需求時(shí),可以直接修改數(shù)據(jù)管線中的 SQL 配置或 UDF,從而大大降低了使用成本。

圖片

我們還做了向量精確檢索查詢優(yōu)化,將其封裝為 SQL,對(duì)于后續(xù)的需求可以方便地進(jìn)行修改迭代。并且對(duì)查詢 SQL 進(jìn)行了性能優(yōu)化:

圖片


  • 通過 SQL 改寫,采用 with 代替 join,減少冗余計(jì)算;prefilter 提前過濾不必要元素。
  • 使用 ZSTD 壓縮,優(yōu)化數(shù)據(jù)結(jié)構(gòu)。
  • 加入 repartition 階段,解決線程間數(shù)據(jù)傾斜問題。

圖片

另外,我們還優(yōu)化了 embedding 計(jì)算相關(guān)函數(shù),在業(yè)務(wù)場景中取得了 4 倍的性能提升:

  • 我們?cè)趦?nèi)核中新增了一個(gè)向量距離計(jì)算函數(shù) NormalizedCosineDistance,它可以在歸一化場景下減少整體計(jì)算量。
  • 同時(shí)我們也根據(jù)業(yè)務(wù)場景定制了 embedding vector distance 函數(shù),通過大幅減少計(jì)算的過程中的 memcpy,性能有了很大的提升。

圖片

以上就是本次分享的內(nèi)容,謝謝大家。

責(zé)任編輯:姜華 來源: DataFunTalk
相關(guān)推薦

2024-09-11 14:47:00

2023-10-13 07:25:50

2024-03-05 08:21:23

湖倉一體數(shù)據(jù)湖數(shù)據(jù)倉庫

2023-10-30 07:25:37

數(shù)據(jù)湖數(shù)據(jù)處理

2023-08-30 07:14:27

MaxCompute湖倉一體

2022-07-18 16:02:10

數(shù)據(jù)庫實(shí)踐

2024-12-16 08:34:13

2023-07-12 08:44:46

湖倉存儲(chǔ)系統(tǒng)數(shù)據(jù)湖

2022-09-15 09:32:42

數(shù)據(jù)倉處理

2023-06-28 07:28:36

湖倉騰訊架構(gòu)

2022-12-21 08:32:34

OLAPDruid架構(gòu)

2023-12-14 13:01:00

Hudivivo

2016-03-04 10:29:51

微信支付源碼

2019-06-21 10:40:25

微信小程序前端

2012-03-13 15:46:44

計(jì)世網(wǎng)

2021-06-07 10:45:16

大數(shù)據(jù)數(shù)據(jù)倉庫數(shù)據(jù)湖

2021-06-11 14:01:51

數(shù)據(jù)倉庫湖倉一體 Flink

2021-08-31 10:18:34

Flink 數(shù)倉一體快手
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 中文字幕 国产精品 | 91久久国产综合久久91精品网站 | 91看片在线观看 | 黄色a级一级片 | 久久久毛片| 99久久免费精品国产男女高不卡 | 日韩欧美国产一区二区 | 国产精品久久久久久久久久久久久 | xx性欧美肥妇精品久久久久久 | 一区二区三区视频在线免费观看 | 国产精品伦一区二区三级视频 | 久久99精品久久久久 | 91久久久精品国产一区二区蜜臀 | 久久精品视频免费看 | 国产精品一区二区福利视频 | 色桃网| 在线免费看黄 | 一区二区在线免费观看 | 国产精品一区二区三级 | 日韩国产中文字幕 | 喷潮网站 | a级片在线 | 精品91久久 | 精品亚洲一区二区 | 国产羞羞视频在线观看 | 免费看片在线播放 | 日韩欧美亚洲 | 国产精品久久久久久久久久久久 | 特级做a爰片毛片免费看108 | 国产成人精品一区二区三 | 精品国产乱码久久久久久老虎 | 久久亚洲国产精品日日av夜夜 | 国产专区免费 | 国产亚洲精品久久久久久牛牛 | av一二三四 | 夜夜操av| 亚洲午夜在线 | 一区二区三区国产精品 | 久久久久国产 | 久草视频网站 | 久久久久久久国产精品 |