產業脈動 2026 年 10 月 2 日

2026-10-02 — LinkedIn 把三套指標中繼資料系統併入單一 ClickHouse

primary=https://clickhouse.com/blog/linkedin-observability-at-scale

LinkedIn 把三套指標中繼資料系統併入單一 ClickHouse

ClickHouse 官方部落格(User stories) · 2026-10-01

LinkedIn 觀測團隊把原本由自製記憶體搜尋索引、Elasticsearch、自製記憶體 KV store 組成的指標中繼資料(metric metadata)查詢,全部換成單一 shard 的 ClickHouse。這套索引現在涵蓋 130 億以上的指標,每分鐘服務 15 萬次以上查詢,平均延遲 68ms。

這是 LinkedIn 繼分散式追蹤之後,第二個放上 ClickHouse 的觀測場景;內容整理自 staff software engineer Jacob Zelek 在 Open House SF 2026 的分享,由 ClickHouse 於 2026-10-01 發文。

原本的問題

LinkedIn 早年用 RRDtool 記錄與繪製時間序列,它的命名習慣一路留到現在:一個指標由 RRD 字串表示,把兩到六個標準化維度串成一條,例如 my-server/responses.status.200.rrd。後來又加入對多個指標套用 regex 的能力,一張圖或一次告警可以展開成多條序列。

規模讓這件事變得很痛:仍以 RRD 語意引用的指標超過 130 億個,每日約 30% 汰換,數百萬張圖表與告警都用這種方式定義,還有數十個工具與服務在查詢。工程師想問的問題包括「哪些主機送出某個指標」「某服務送出哪些 RRD」「跨所有服務符合某個 pattern 的指標有哪些」。

舊系統長成三個服務掛在同一個 gateway 後面。Jacob 加入時有自製記憶體搜尋索引與自製記憶體 KV store,他後來引入 Elasticsearch,希望一個系統就能取代其他兩個,結果它反而成了第三個要維運的服務:大範圍聚合表現不佳,回傳大型結果集也得在記憶體中序列化。到 2025 年,三個服務都碰到擴展上限,有些查詢三者合起來也答不出來。

採用的方法

團隊評估過的選項各有硬傷。再做一套自製系統,彈性不及通用方案,專業知識也只會留在少數人手上;分片 MySQL 則因為先前用 Vitess 當 source of truth 時讀取擴展不了而排除;Elasticsearch 早先遷移流量已失敗,只保留作探索用途。ClickHouse 支援所有既有查詢,在與自製記憶體資料庫的基準測試中大多更快,較慢的也在可接受範圍內。

新架構相當簡單:時間序列資料庫透過持續的變更捕捉(change capture)同步到 ClickHouse,原本的 gateway 改為把中繼資料查詢改寫成 SQL 送進 ClickHouse。因為公司內所有工具本來就走這個 gateway,遷移對下游是透明的,文中的說法是「Anyone using RRD is already using ClickHouse」。

  • 表引擎:replicated ReplacingMergeTree,排序鍵針對探索用的維度,以唯一 ID 去重。變更捕捉串流是 at-least-once,重複資料由 ClickHouse 在 merge 時丟棄,不用另外寫去重邏輯。
  • 每日重建:從離線時間序列資料庫建出當天新表,補上變更捕捉資料後,用 alias 切換表指標、導流,再刪舊表。
  • 重型聚合:用 projection 處理服務對指標數、服務對唯一 RRD 數、資料中心對主機清單這類舊系統做不到的查詢。
  • 維度成欄:每個維度直接是欄位,原本對整條 RRD 字串跑 regex 的查詢,可改成欄位過濾。
-- 舊:對整條 RRD 字串做 regex
match(rrd, 'my-server/responses\\.status\\..*\\.rrd')
-- 新:直接過濾維度欄位(欄位名稱為示意,原文未公布 schema)
WHERE service = 'my-server' AND metric LIKE 'responses.status.%'

實際效果

項目舊(三系統)新(ClickHouse)
系統數3 個服務1 個索引、單一 shard
記憶體基準約 1/5(團隊估計)
運算基準約 2/3
查詢量與延遲已達擴展上限15 萬+ 次/分鐘,平均 68ms
擴充空間無可再容納兩倍指標量

68ms 是所有查詢類型的平均,包含舊系統根本答不出來的深度分析查詢;Jacob 說若攤開分布,會看到個位數毫秒的查詢。記憶體與運算的數字是他的估計,不是正式基準測試。

影響範圍

仍在大量使用 regex 的指標查詢使用者是最直接的受益對象:維度成欄後,主要客戶正把 regex 查詢改寫成原生查詢,叢集甚至可能隨使用方改寫而縮小。若你的團隊也有「先上 Elasticsearch 再補自製索引」的中繼資料系統,這個案例提供了評估項目:聚合是否需要跨整個基數、重複資料能否交給引擎 merge 去處理、是否有 quota 與 query log 可以追到是哪個團隊的查詢拖慢系統。

文中提到 ClickHouse 的 quota 與 query log 讓團隊能看出每個查詢來自哪個團隊或服務,不只擋掉濫用查詢,也能一起改寫。另外需要注意:這是廠商發布的客戶案例,成本與延遲數字皆為 LinkedIn 自述,原文未公布硬體規格、資料量對應的叢集大小,也沒有與舊系統同條件的對照測試。

前一階段:分散式追蹤

這次擴充的前提是兩年前的追蹤系統。OpenTelemetry 追蹤在 1% head sampling 下,每天仍產生約 0.8 兆個 span、200 TB 未壓縮資料。三個資料中心各有一個 22 shards 的叢集,採 red-black 配置(寫兩個叢集、讀一個,另一個待命,第三個做驗證),3x 本地複寫,壓縮約 5x,每節點穩態每秒吃 35 萬個 span,尖峰超過 120 萬。調整欄位順序、改以實際查詢欄位重新分區、收緊 Bloom filter 誤判率後,查詢壓到兩秒內。這段經驗讓第二個專案的導入門檻很低。

原始來源:ClickHouse:How LinkedIn extended ClickHouse from distributed tracing to metric discovery and analytics、ReplacingMergeTree 文件


End of article
0
Would love your thoughts, please comment.x
()
x