問題現象
雙十一當晚,監控系統顯示:
- 兩個 Consumer Group 的 Lag 怎樣都降不下來
- 91APP 的 Queue 卡到 30 個以上
- Job 機不斷報 OOM(記憶體不足)
問題分析
各平台 API 響應時間實測
| 平台 | 訂單數 | 平均時間 |
|---|---|---|
| Shopee | 50 | 26 秒 |
| ShopLine | 2,686 | 57 秒 |
| 91APP | 472 | 3 分 21 秒 ~ 4 分 52 秒 |
| Yahoo | 53 | 2 秒 |
| Cyberbiz | 7 | 13 秒 |
問題一:91APP API 不穩
整點 Job 拉取已完成和已出貨訂單時:
- 訂單量大導致 API 響應時間接近 5 分鐘門檻
- 逼近 Kafka Session Timeout
- API 不穩時甚至超過 5 分鐘
問題二:記憶體爆炸
統計 Job 需要從 Solr 拉取訂單資料:
- 雙十一訂單量暴增
- 一次拉了將近 6,000 張訂單的完整資料
- 記憶體直接爆炸 → OOM
解決方案
問題一:API 超時
- 增加 Kafka 的 Timeout 設定
- 分批處理訂單
- 加入 Circuit Breaker(斷路器)
問題二:記憶體優化
// 修改前:拉取全部欄位
query.setFields("*");
// 修改後:只拉取需要計算的欄位
query.setFields("id", "amount", "status", "created_at");
同時將 Job 機記憶體從 1GB 提升到 2GB。
關鍵數據
雙十一的量,最好預估平常的 10~15 倍,免運真的很吸引人!
容量規劃建議
| 資源 | 平日 | 大促 |
|---|---|---|
| Queue 處理能力 | 1x | 10-15x |
| Job 機記憶體 | 1GB | 2-4GB |
| API Timeout | 30 秒 | 2-3 分鐘 |
| Consumer 數量 | 2 台 | 4-6 台 |
大促前檢查清單
- ✅ 各平台 API 響應時間測試
- ✅ 壓力測試(10 倍流量)
- ✅ 記憶體使用量監控
- ✅ Queue Lag 告警設定
- ✅ 緊急擴容方案準備
發佈留言