Discord Scylla Control Plane:Rust 任務編排系統將叢集建置從 36 小時縮至 2 小時
Discord Engineering · 2026-05-29
Discord 的 7 人 Persistence Infrastructure 團隊維護數十個 ScyllaDB 叢集、數百個資料庫節點。過去建立一套 shadow cluster 需要 36 小時以上的人工操作,充滿仰賴個人知識的手動步驟。為此他們以 Rust 打造 Scylla Control Plane(SCP)——一個以 YAML 定義工作流程、以 SQLite 持久化狀態的任務編排系統,現在完成同樣的工作不到 2 小時,大部分時間是節點啟動等待。
架構設計
SCP 把叢集操作拆成三類任務:
- Node Task:單節點操作(安裝、重啟、升級 binary)
- Cluster Task:跨節點協調(rolling restart、擴容)
- Condition Check:狀態驗證(等待節點就緒、確認 repair 完成)
工作流程以 YAML 定義,參數化設計不需重新編譯即可調整。任務必須冪等(idempotent),以支援安全重試。狀態持久化到 SQLite,中斷後可從斷點繼續,不需重頭執行。
並行控制與 Availability Zone 感知
任務可按 availability zone 批次執行,每個任務設定並行上限,確保 rolling 操作不會同時影響多個 zone。Prometheus 指標輪詢作為 condition check 的依據,操作完成透過 Discord webhook 通知 ops 頻道。
效果
| 操作 | 之前 | 之後 |
|---|---|---|
| 建立 shadow cluster | 36+ 小時 | <2 小時 |
| 作業模式 | 持續人工守候 | 事件驅動通知 |
| 機構知識依賴 | 高(個人手動步驟) | 低(YAML 工作流程) |
同一套系統也用於管理 Elasticsearch 和 PostgreSQL 叢集。
End of article