Application Load Balancer 在什麼時候會向後端建立新的連線

0

我的 EC2 上有控管每個 IP 的連線數量,我前方有使用 Application Load Balancer,我參考了文件 https://docs.aws.amazon.com/zh_tw/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-protocol-version Application Load Balancer 似乎支援透過 HTTP/1.1, HTTP/2, gRPC 連到我的 EC2。我並沒有使用到 gRPC,所以先不討論他。

我想了解以下狀況:

  1. 在 client 使用 HTTP/2 連線到 ALB ,且 ALB 藉由 HTTP/1.1 連到 EC2,如果 client 在同一個 TCP 連線同時 (小於 1秒 )送了 50 個請求,每個請求都至少處理 2 秒,這個時候 ALB 會建立多少連線?
  2. 在 client 使用 HTTP/2 連線到 ALB ,且 ALB 藉由 HTTP/2 連到 EC2,如果 client 在同一個 TCP 連線同時 (小於 1 秒 )送了 50 個請求,每個請求都至少處理 2 秒,這個時候 ALB 會建立多少連線? ALB 到 EC2 這段,會把請求塞在同個連線不同 stream 嗎? client 送的優先權是否會轉到 EC2 上?
  3. Application Load Balancer 在做狀態檢查時,會每次都建立新的連線嗎?
Luke W
已提问 6 个月前855 查看次数
1 回答
2
已接受的回答

在 client 使用 HTTP/2 連線到 ALB ,且 ALB 藉由 HTTP/1.1 連到 EC2,如果 client 在同一個 TCP 連線同時 (小於 1秒 )送了 50 個請求,每個請求都至少處理 2 秒,這個時候 ALB 會建立多少連線?

  1. ALB 沒有像 CLB 的那種 Surge Queue 的概念,原則上所有的請求被 ALB 收到之後,ALB 會立即往 Target 送。
  2. HTTP/1.1 協定不支援 multiplexing 的功能,所以一條連線同一時間內只能有一個請求。換句話說一條連線如果前一個請求還沒有處理完,那這條連線就不能接受下一個請求。
  3. 無論 Frontend 的請求協定是 HTTP/1.1 或 HTTP/2,預設的情況下 ALB 使用 HTTP/1.1 與 Target Server 進行連線。(除非你有額外設定 gRPC 等協議)

所以回到你的問題,假定 50 個請求在短時間內併發,原則上 ALB 要準備 50 條連線給 HTTP/1.1 使用。 然而在 2 秒過後,ALB 就會有 50 條 Idle Keep-Alive Connection 可以給後續的 Request 重複使用。

===========================================================

在 client 使用 HTTP/2 連線到 ALB ,且 ALB 藉由 HTTP/2 連到 EC2,如果 client 在同一個 TCP 連線同時 (小於 1 秒 )送了 50 個請求,每個請求都至少處理 2 秒,這個時候 ALB 會建立多少連線? ALB 到 EC2 這段,會把請求塞在同個連線不同 stream 嗎? client 送的優先權是否會轉到 EC2 上?

如果 HTTP/2 正常的情況下可以支援 multiplexing 讓一條連線中有多個未完成請求,在 Frontend connection 中,ALB 最高可以支援 128 個 stream。然而,在 Backend Connection 中,根據我的實驗 ALB 即使對 Target 使用 HTTP/2 也不會使用 multiplexing 的功能。在官方文件裡面只有強調 HTTP/2 在 Frontend 中 multiplexing 帶來的優勢,Backend 的部分就沒有提到,我估計就是不支援。

https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html#http-connections:~:text=Application%20Load%20Balancers%20use%20HTTP,name%20of%20the%20load%20balancer.

回到你的問題,實驗結果跟 backend HTTP/1.1 一樣。

============================================================

Application Load Balancer 在做狀態檢查時,會每次都建立新的連線嗎? 會。文件這邊有寫。

After your target is registered, it must pass one health check to be considered healthy. After each health check is completed, the load balancer node closes the connection that was established for the health check. https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html

如果你覺得這些資訊對你有幫助,歡迎你給我一個讚:)

profile picture
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则