搜尋

首頁  >  問答  >  主體

500 - nginx如何減少5xx錯誤

nginx前端,後端是n個docker容器,docker容器是nginx php-fpm,已知每個容器都有可能故障,容器故障時前端會有502或504錯誤,前端偶爾也會有網路延遲

目前的做法和問題

nginx前端使用tengine,並開啟健康檢查

  1. 假設interval設定為3s,fall為2,那麼如果後端在上一次檢查結束後立即掛掉,即有近6s的時間請求依然會轉發到故障後端

  2. 假設timeout設定為1s,那麼如果前端網路延遲,會導致瞬時全部後端都逾時,直接回傳502給使用者。但如果在增加timeout值,那麼健康檢查將沒有太大意義,正常的時候後端一般50ms以內會響應,1s已經不能過濾掉高負載後端

後端docker使用tengine,開啟sysguard模組

  1. 同上,在interval間隔內掛掉,仍有部分請求到達後端,如果後端負載在閾值頻繁波動,那麼5xx錯誤可能會比沒有健康檢查和sysguard還多

請問有什麼解決辦法嗎?

为情所困为情所困2745 天前704

全部回覆(2)我來回復

  • 漂亮男人

    漂亮男人2017-05-16 17:22:56

    不知道你的前端應用場景是怎麼樣的,似乎負載很高的樣子,不太可能直接暴露錯誤給用戶吧,大不了提示用戶稍後再試下,這深入研究還是得看看什麼技術架構,從根上找問題

    回覆
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 17:22:56

    個人感覺這東西是避免不了的負載大了就優化程序或者增大集群該出的錯誤還是要出只不過寫個含糊的名字就可以了
    淘寶也經常系統忙知乎沒事還自己給自己服務器提問呢

    回覆
    0
  • 取消回覆