系統架構¶
規劃中的資料層與應用後端改進: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 與品質