事件

2023年的美國時間黑色星期五,一早被 Call 了起來,運營在網站折扣給到 400~650美金,瞬間湧進大量的人,每秒都有人下單,訂單量是平常的XX倍以上,網站加載頁面後後無法正確在redis 拿到即時庫存,導致畫面卡死在加載從 Redis 拉取庫存時顯示的 Loading 按鈕上,造成了用戶正確加入購物車。

image
image

分析問題

經過調查發現 3台Redis 同步異常,分析硬體效能後發現這三台 Redis slave 容器在一台巢狀的 Hyper-v host中 ,依序檢檢查CPU 、記憶體、硬碟IO、且共用一張網卡,Windows Host 被分配的記憶體只有16G ,Docker Desktop 最高只有 8GB的記憶體可以使用,且使用率都是接近滿載,推測記憶體資源不足是導致同步異常的主因,最後把那台的 Host裡的 Redis 容器實體關掉一個,讓 Host 資源能能夠被充份使用。

image
image

解決方案

短期

  • 關閉一個實體,讓Host 能被正常使用
  • 加大記憶體

中期

  • 用Nginx 替換掉很浪費硬體資源的巢狀 Hyper-v
  • 調整 Redis 緩存淘汰機制設定,沒有用到的要將期釋放。

長期

  • 可以考慮採用Redis Cluster ,透過分片。
  • 用 linux 容器替代 Windows Server
  • 導入 K8S 自動部署、擴展和管理容器化應用程序的系統。

參考

Related Posts