配置

配置

我有一個區域實例組有 2 個實例在連接埠 8000 上提供服務,未啟用自動縮放。

此實例組是一個實例組的後端全域外部應用程式負載平衡器

實例上的 Web 伺服器正在執行 Flask,每個請求將需要 1 秒鐘來處理:

@app.route("/", methods=["GET"])
def main() -> Response:
    sleep(1)
    response = jsonify(
        success=True,
        hostname=gethostname(),
    )
    response.status_code = 200
    response.headers["Access-Control-Allow-Origin"] = "*"
    return response

我可以透過存取全域負載平衡器公用 IP 來確認該行為,即需要 1 秒鐘才能獲得回應。

如果我同時執行 2 個請求,因為有 2 個實例,我希望每個請求都會傳送到不同的實例,而不是它們總是發送到同一個實例並在該實例上排隊,因此:

  • 一個請求需要 1 秒
  • 另一個請求將需要 2 秒

我嘗試將 、 和 改為Locality load balancing policy,Round-RobinLeast-RequestRandom但我總是得到相同的行為。

我是否正確理解這Locality load balancing policy只是選擇哪個後端?如果是,如何在後端(即實例組)內設定負載平衡策略?

謝謝

配置

實例組

  • 區域性
  • 目標分佈形狀:均勻
  • [x] 允許實例重新分配
  • 自動縮放開啟:最小 2,最大 2
  • 自動縮放訊號:HTTP 負載平衡 100%
  • 初始化時間:60s
  • 健康檢查:
    • 路徑:/健康
    • 協定:HTTP
    • 端口:8000
    • 間隔:30秒
    • 超時:30 秒
    • 健康閾值:1
    • 不健康閾值:10

負載平衡器

  • 前端:
    • 協定:HTTP
    • IP位址:xxx
    • 網路等級:進階
    • HTTP 保活超時:610 秒
  • 路由規則:全部不符
  • 後端服務:
    • 端點協定:HTTP
    • 命名連接埠:web
    • 超時:300秒
    • 雲端 CDN:已停用
    • 記錄:啟用(取樣率:1)
    • 會話關聯性:無
    • 連線耗盡逾時:300 秒
    • 交通政策:
      • Locality負載平衡策略:Round robin
      • 異常值偵測:停用
    • 後端安全策略:無
    • 邊緣安全策略:無
    • 身份感知代理:已停用
  • 平衡方式:最大。 RPS:1(每個實例)
  • 容量:100%

測試

siege \
    --concurrent 1 \
    --time 60s \
    "http://x.x.x.x"

有 2 個節點:

  • concurrent=1:平均 1.02 秒
  • concurrent=2:平均 1.66 秒
  • concurrent=4:平均 3.35 秒
  • concurrent=8:平均 5.54 秒

有 4 個節點:

  • concurrent=1:平均 1.02 秒
  • concurrent=2:平均 1.18 秒
  • concurrent=4:平均 2.70 秒
  • concurrent=8:平均 3.83 秒
  • concurrent=16:平均 7.26 秒

有 8 個節點:

  • concurrent=2:平均 1.20 秒
  • concurrent=4:平均 1.85 秒
  • concurrent=16:平均 4.40 秒
  • concurrent=64:平均 14.06 秒
  • concurrent=128:平均 19.04 秒

預期行為

我會假設結果如下:

  • 2個節點:
    • concurrent=1: 1秒
    • concurrent=2: 1秒
    • concurrent=4:~2 秒
    • concurrent=8:~4 秒
  • 4個節點:
    • concurrent=1: 1秒
    • concurrent=2: 1秒
    • concurrent=4: 1秒
    • concurrent=8:~2 秒
    • concurrent=16:~4 秒

更新1

如果我切換到 aClassic proxy network load balancer並發送 100 個請求:

  • 56 轉到vm0
  • 44 轉到vm1

對於 HTTP LB:

  • 99 轉到vm0
  • 1 進入vm1

答案1

基於全球外部應用程式負載平衡器GFE(Google 前端)估計哪些後端實例有能力接收請求。您可以掃描分享的鏈接,以了解更多流量分佈。

如果您認為循環法不適合您,我建議使用平衡模式其中概念或配置是均勻分配流量。

我也發現了這個關聯stackoverflow 中的一個問題可能會對使用平衡模式有所幫助。

相關內容