天天看點

為什麼SLB QPS沒有達到上限卻響應503狀态碼?什麼是503狀态碼?為何控制台看QPS遠沒達到規格上限卻也傳回503?如何判斷秒級qps超過規格?

很多使用者使用SLB 7層監聽的時候發現請求沒有到達後端,SLB直接響應了503狀态碼。

什麼是503狀态碼?

503狀态碼的定義可以參考

rfc7231

,如下圖所示翻譯過來就是503意味着伺服器過載導緻無法響應請求,在SLB上就相當于已經達到了SLB的規格上限,導緻SLB無法繼續處理請求是以直接響應503狀态碼給用戶端。

為什麼SLB QPS沒有達到上限卻響應503狀态碼?什麼是503狀态碼?為何控制台看QPS遠沒達到規格上限卻也傳回503?如何判斷秒級qps超過規格?

為何控制台看QPS遠沒達到規格上限卻也傳回503?

SLB性能保障型

規格

,這裡以slb.s1.small 規格舉例,此規格的qps是1000,但是使用的時候SLB控制台的qps明明沒到1000為何也會有503呢?

因為SLB的監控資料的最小機關是1分鐘,也就是1分鐘才會統計一個資料點,是以控制台顯示的qps其實是1分鐘内的平均值,是1分鐘内的所有請求除以60秒計算出來的,這跟真實qps是有所差别的,因為這樣計算的話會有削峰填谷的效果,比如真實業務裡面1分鐘内某幾秒的請求量特别大,其他時間請求量比較小,一平均之後qps就會看上去沒有多大,但是slb是根據秒級的qps限制的,是以如果幾秒鐘超過qps上限那就會出現503狀态碼。

下面通過一個簡單的測試進一步描述下控制台顯示qps的邏輯。

通過AB壓測5000請求并發5,通過下圖可以看到281,這裡的qps計算方法是:總的請求5000/總請求時間17.785秒=281 QPS

為什麼SLB QPS沒有達到上限卻響應503狀态碼?什麼是503狀态碼?為何控制台看QPS遠沒達到規格上限卻也傳回503?如何判斷秒級qps超過規格?

在控制台檢視此時qps隻與79,控制台計算方法是:5000請求/60秒 =83 跟下列圖示是比較接近的。

為什麼SLB QPS沒有達到上限卻響應503狀态碼?什麼是503狀态碼?為何控制台看QPS遠沒達到規格上限卻也傳回503?如何判斷秒級qps超過規格?

如何判斷秒級qps超過規格?

那如果是SLB傳回了503狀态碼,怎麼确定秒級qps呢。 可以開通SLB 7層通路日志。開通以後如下圖所示35分0秒到35分59秒一共是5000個請求,在18秒到19秒之間的1秒内的請求qps達到了 734QPS,是以秒級qps跟控制台看到的79 qps 是相差比較大的。

為什麼SLB QPS沒有達到上限卻響應503狀态碼?什麼是503狀态碼?為何控制台看QPS遠沒達到規格上限卻也傳回503?如何判斷秒級qps超過規格?

真實業務場景也是非常類似的,有些業務某幾秒的請求量會特别大,導緻觸發了秒級的qps上限進而響應503,這種情況就需要提升SLB規格來避免這種情況。

繼續閱讀