Netflix 工程師詳細說明了一種適用於 Apache Cassandra 的動態分割機制,該機制將超大型時間序列分割的讀取延遲從數秒降低至低雙位數毫秒,同時降低讀取逾時、CPU 使用率,以及生產叢集中的執行緒排隊現象。此技術是為 Netflix 的 TimeSeries Abstraction 平台所開發,能在不需要修改應用程式、不停機或進行大規模重新分割的情況下,自動將持續成長的分割拆分為較小的子分割。
該系統解決了 Cassandra 時間序列工作負載長期存在的挑戰:持續成長的分割會因讀取延遲增加、壓縮負擔、記憶體壓力及負載不均而降低效能。Netflix 表示,原本管理超過 500 MB 分割的服務曾遭遇可用性問題,但在功能部署後,仍能繼續分頁並查詢資料且維持運作。
Cassandra 中的時間序列資料通常會將事件依識別碼與時間範圍組織成分割。雖然系統初次部署時的分割大小假設可能合理,但流量模式、保留政策與資料成長不均可能導致部分分割明顯大於預期。根據 Netflix 的說法,傳統上解決這些問題需要重新設計結構描述、進行重新分割,或修改應用程式,這在大規模環境中成本高昂且容易造成營運中斷。
為了解決這些挑戰,Netflix 建立了一套自動化的分割演進框架,當分割超過預設閾值時,會偵測過大的分割並以非同步方式進行拆分。系統會維護描述分割邊界與分割歷史的中繼資料,讓應用程式能持續查詢相同的邏輯分割,而底層儲存配置則以透明方式演進。

動態寬分割非同步分割管線(來源:Netflix 部落格文章)
此架構引入一個追蹤父子分割關係的中繼資料層。在讀取時,中繼資料服務會判斷哪些子分割包含請求的資料,並據以路由查詢。從多個分割取得的結果會在回傳給用戶端前進行合併。Netflix 指出,此方法可在無需停機或修改應用程式介面的情況下,完成資料重新分配。
營運安全性是設計時的重要考量。在分散式系統中進行分割拆分,會帶來並行寫入、資料移動與一致性保證等挑戰。為了降低複雜度與部署風險,初始實作聚焦於不可變分割。原始分割會在整個遷移過程中保留,提供資料重新分配時若發生問題的備援機制。
Netflix 也納入驗證機制,以在分割演進期間確認正確性。他們使用現有的驗證管線,比較從原始分割回傳的結果與透過新讀取路徑產生的結果。工程師採取分階段推出策略,在確認兩種方法的一致性後,才逐步增加生產環境流量。
根據 Netflix 的說明,受影響分割的平均讀取延遲在部署後從數秒降至低雙位數毫秒。尾端延遲則從數秒降至約 200 毫秒或更低。公司還表示,讀取逾時減少、CPU 使用率降低,且 Cassandra 叢集的執行緒排隊現象大幅減少。

分階段讀取推出與驗證流程(來源:Netflix 部落格文章)
Netflix 表示,未來工作將包含對可變寬分割的支持,以及重新處理先前失敗分割拆分的機制。工程團隊在回顧此次部署時指出,在導入此功能至生產系統時,縮小複雜架構變更的影響範圍並逐步驗證,證明是相當有價值的做法。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.