Netflix 分散式圖譜查詢層曝光:16 條執行緒如何撐住 8 億節點的即時 gRPC 查詢
Netflix TechBlog · 2026-08-07
原本的問題
Netflix 在系列文章 Part 1、Part 2 中描述了將會員互動事件即時寫入以 KVDAL(建構於 Apache Cassandra 之上的 key-value 抽象層)為底層的圖儲存,規模來到 80 億節點、1500 億邊,分散在約 27 個獨立 namespace、12 組 Cassandra cluster 上。Part 3 要解決的是查詢層:如果沿用一般的「一條路徑走到底」深度優先查詢,加上傳統 thread-per-request 模型,單一節點的高扇出(fan-out)就會讓執行緒被 I/O 卡死,無法撐住每秒數千筆並發查詢。作者 Nilesh Mishra 與 Ajit Koti 因此重新設計了 gRPC 查詢服務的執行模型與資料流。
採用的方法
新架構分三層:Graph Query Service 作為 gRPC 入口驗證 traversal 規格、Storage Abstraction Layer 對接 KVDAL 並提供串流與 EVCache 節點快取、Enrichment Layer 按需抓取外部 metadata 並支援優雅降級。核心改動是把深度優先換成廣度優先:查詢引擎「一次處理一整層、跨所有節點,而不是一次一條路徑」,同一層的多個節點可以批次向 KVDAL 發出請求。
執行模型上只用 16–24 條執行緒的小型 thread pool 處理數千筆並發請求,因為沒有任何執行緒會阻塞在 I/O 上——這是與傳統同步阻塞模型最大的差異。對於高扇出的鄰接表(adjacency list),系統把它當成串流而非一次性讀出的 blob 處理,搭配批次交付與提前終止(early termination),一旦命中限制就停止讀取。
過濾邏輯採階層式設計,依序套用 application 預設值、全域覆寫、每層深度限制、每種邊類型限制,並提供兩種選取模式:
LATEST:依時間戳排序,回傳最新的邊,需要額外排序成本ANY:回傳第一批遇到的邊,不排序,速度較快
時間相關的過濾在從儲存層串流讀取的過程中就完成,避免把不需要的資料先實體化(materialize)出來再篩選,是效能的另一個關鍵點。
實際效果
在 8 億節點、1500 億邊規模下,查詢層達到以下延遲數字:
| 查詢類型 | P50 | P99 |
|---|---|---|
| 單跳(single-hop) | 15–30ms | <100ms |
| 三跳(3-hop traversal) | — | 100–150ms |
EVCache 快取節點查詢命中率落在 70–80%,設計上刻意把 TTL 對齊資料本身的變動頻率,而不是一律套用長 TTL;接近圖資料保留窗口(retention window)到期的節點則完全不進快取,避免浪費記憶體。文章最後把這套設計歸納為四項原則:優先設計面向 frontier 的 API、把過濾邏輯盡量下推到儲存層、對併發要有主動且可動態調整的控制機制,以及把快取視為架構層級的必要條件而非事後優化。
PostgreSQL HA 平台 Autobase 發布 2.10:UI 直接觸發 Failover,新增本機磁碟部署模式
postgresql.org · 2026-08-07
背景
Autobase 定位是「自架的 DBaaS」,目標是把公有雲代管資料庫的操作體驗搬進自有機房,支援裸機、虛擬機與部分雲端環境部署高可用 PostgreSQL cluster。其 HA 機制底層仍是 Patroni 那套模式:各節點狀態寫入 DCS(Distributed Configuration Store,通常是 etcd),由持有 leader lock 的節點擔任 primary,一旦連不上多數 DCS 節點、lock 到期未續約就會自動觸發 failover,switchover 則是主動交接的計畫性版本。2.10.0 這個版本的重點是把過去只能靠 Ansible playbook 或 CLI 操作的叢集管理動作,搬進圖形化介面。
核心改動
Enterprise 版新增 Actions 選單,可直接在 UI 上執行 switchover、failover、replica 重裝、restart、stop/start 與刪除叢集,背後對應的是新增的 Ansible playbook:
switchover_pgcluster
failover_pgcluster
reinit_pgcluster
stop_pgcluster / start_pgcluster
stop_pgnode / start_pgnode / restart_pgnodeParameters 頁面新增 System 分頁,在 Expert Mode 下可調整 Regional Settings、Host Mappings、DNS Servers、NTP Servers、Kernel Parameters 與 SSH Public Keys。另一項變動是支援把 PostgreSQL 資料直接放在本機磁碟(local disk),不用再掛額外的網路磁碟區——做法是把 volume size 設為 0,或在 Expert Mode 明確選擇 System Disk。
依賴套件同步升級:etcd 3.6.13、vip_manager 4.2.0、WAL-G 3.0.8、caddy-docker-proxy v2.13。etcd 版本的更新直接影響的是上述 DCS 層的穩定性,與 leader lock 續約行為相關。
影響範圍
Bug fix 部分修掉了既有叢集上啟用 TLS 會導致 health-check 死鎖的問題,修正了 pg_hba.conf 裡預設 host_type 設定錯誤,並改善叢集建立表單與 SSH public key 驗證流程;節點移除操作現在也支援用 host name 指定,同時移除了一批已棄用的 API endpoint。完整差異可見 GitHub 上 2.9.0...2.10.0 的 compare 頁面。