跳轉到

系統架構

規劃中的資料層與應用後端改進:TimescaleDB(OHLCV)、SQS 背景任務、Redis Sorted Set 追蹤 Worker、全域速率限制。

依使用者數觸發

使用者數 架構變更 商業價值
1K 所有端點的速率限制中介軟體 防止 Webhook 以外的逐使用者濫用
5K 電子郵件通知和稽核日誌寫入使用 SQS 持久投遞;API 重啟不遺失任務
10K 所有背景任務使用 SQS;Redis Sorted Set 用於 Worker 追蹤 移除 O(N) 鍵掃描瓶頸;將所有非同步工作從 API 熱路徑卸載
任何時候 TimescaleDB 用於 OHLCV K 棒儲存 跨使用者共享歷史資料;啟用站內回測產品功能

TimescaleDB 用於 OHLCV K線資料

回測引擎目前使用本機 .npz 檔案作為歷史資料。規劃遷移至 TimescaleDB 可實現:

graph TB subgraph current["目前"] CCXT["CCXT 擷取"] --> NPZ["本機 .npz 檔案"] NPZ --> Backtest["回測引擎"] end subgraph future["規劃中"] Ingest["資料匯入管線"] --> TS["TimescaleDB<br/>Hypertables"] TS --> API2["REST API"] API2 --> Backtest2["回測引擎"] TS --> Resample["連續聚合<br/>(1m → 5m → 1h → 1d)"] end

主要特色:

  • Hypertables(超表):OHLCV 資料的自動時間分區
  • 壓縮:歷史資料 10-20 倍壓縮
  • Continuous Aggregates(連續聚合):預計算重新取樣(1m → 更高時間框架)
  • DataSource 協定:將 DiskSource 替換為 TimescaleSource——回測引擎零修改

應用程式(後端)改進

所有背景任務使用 SQS

任務類型 目前 未來 觸發條件
訂單成交驗證 SQS FIFO(已部署) SQS FIFO
電子郵件通知 BackgroundTasks(行程內) SQS 5K 用戶
Webhook 日誌 BackgroundTasks SQS 10K 用戶
稽核日誌寫入 同步 SQS 10K 用戶

為什麼要遷移?

FastAPI BackgroundTasks 在行程內執行——若 API 任務當機或重啟,待處理的背景任務將遺失。SQS 提供持久的至少一次送達保證,並以 DLQ 處理失敗訊息。

Redis Sorted Set 用於 Worker 追蹤

以 Redis Sorted Set 取代 SCAN 模式進行孤兒偵測:

目前 未來
SCAN 所有 worker:active:* ZADD worker:all {timestamp} {user_id}
O(N) 完整鍵掃描 O(log N) Sorted Set 操作
10K+ 鍵時速度慢 任何規模皆快速

速率限制中介軟體

目前速率限制為 Webhook 層級的每用戶限制。計畫:針對所有端點的全域速率限制中介軟體:

  • 每 IP 速率限制(WAF 的補充)
  • 跨所有端點的每用戶速率限制
  • 每端點群組可設定限制
  • 基於 Redis 的滑動視窗(已於 Webhook 實作)

總覽 · 基礎設施 · 系統功能與產品 · DevOps 與品質