

# PERF04-BP04 使用負載平衡將流量分配到多個資源
<a name="perf_networking_load_balancing_distribute_traffic"></a>

 在多個資源或服務之間分配流量，以讓您的工作負載能夠利用雲端提供的彈性。您也可以使用負載平衡來卸載加密終止，以提升效能、可靠性，以及有效管理和路由流量。

 **常見的反模式：**
+  您在選擇負載平衡器類型時未考慮工作負載需求。
+  您不利用負載平衡器功能來進行效能最佳化。
+  工作負載在不使用負載平衡器的情況下，直接公開到網際網路。
+  您可以透過現有的負載平衡器路由所有網際網路流量。
+  您可以使用一般 TCP 負載平衡，並讓每個運算節點處理 SSL 加密。

 **建立此最佳實務的優勢：**負載平衡器會處理單一可用區域中或跨多個可用區域的應用程式流量不同的負載，並實現高可用性、自動擴展及更充分利用您的工作負載。

 **未建立此最佳實務時的曝險等級：**高 

## 實作指引
<a name="implementation-guidance"></a>

 負載平衡器會做為您的工作負載的進入點，從那裡將您的流量分散到後端目標，例如運算執行個體或容器，以提高利用率。

 選擇正確的負載平衡器類型是最佳化架構的第一步。從列出您的工作負載特性開始，例如通訊協定 (例如 TCP、HTTP、TLS 或 WebSockets)、目標類型 (例如執行個體、容器或無伺服器)、應用程式要求 (例如長時間執行連線、使用者身分驗證或黏性) 和置放 (例如 Region、Local Zone、Outpost 或區域隔離)。

 AWS 為您的應用程式提供了多種模型來使用負載平衡。[Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 最適合 HTTP 和 HTTPS 流量的負載平衡，並提供了針對現代應用程式架構 (包括微型服務和容器) 交付的進階請求路由。

 [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) 最適合需要極高效能的 TCP 流量的負載平衡。它能夠每秒處理數百萬個請求，同時保持超低延遲性，並且還進行優化，可處理突發的和不穩定的流量模式。

 [Elastic Load Balancing](https://aws.amazon.com/elasticloadbalancing/) 提供整合的憑證管理和 SSL/TLS 解密，讓您能夠靈活地集中管理負載平衡器的 SSL 設定，並從工作負載中卸載 CPU 密集型工作。

 選擇正確的負載平衡器之後，您可以開始利用其功能來減少後端為流量提供服務所需投入的工作量。

 例如，同時使用 Application Load Balancer (ALB) 和 Network Load Balancer (NLB)，您可以執行 SSL/TLS 加密卸載，這是避免 CPU 密集型 TLS 交握由您的目標完成，並且改善憑證管理的機會。

 在您的負載平衡器中設定 SSL/TLS 卸載時，它會負責往返用戶端的流量的加密，同時將未加密的流量交付給您的後端，釋放您的後端資源並且改善用戶端的回應時間。

 Application Load Balancer 也可以為 HTTP/2 流量提供服務，不需要在您的目標上支援它。這個簡單的決策可以改善您的應用程式回應時間，因為 HTTP/2 更有效率地使用 TCP 連線。

 定義架構時，應該考慮您的工作負載延遲要求。例如，如果您有對延遲敏感的應用程式，您可能會決定使用 Network Load Balancer，以獲得極低的延遲。另外，您可能會決定讓工作負載更靠近您的客戶，也就是利用 [AWS Local Zones](https://aws.amazon.com/about-aws/global-infrastructure/localzones/) 或甚至 [AWS Outposts](https://aws.amazon.com/outposts/rack/) 中的 Application Load Balancer。

 對延遲敏感的工作負載的另一個考慮是跨區域負載平衡。使用跨區域負載平衡，每個負載平衡器節點會將已註冊目標之間的流量分散到所有允許的可用區域中。

 使用與您的負載平衡器整合的 Auto Scaling。效能效率系統的其中一個關鍵層面與適當調整後端資源大小有關。若要完成此操作，您可以利用後端目標資源的負載平衡器整合。使用與 Auto Scaling 群組整合的負載平衡器，目標會視需要從負載平衡器新增或移除，以因應傳入流量。負載平衡器也可以針對容器化工作負載與 [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html) 和 [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html) 整合。
+  [Amazon ECS - 服務負載平衡](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html) 
+  [Amazon EKS 上的應用程式負載平衡](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html) 
+  [Amazon EKS 上的網路負載平衡](https://docs.aws.amazon.com/eks/latest/userguide/network-load-balancing.html) 

### 實作步驟
<a name="implementation-steps"></a>
+  定義您的負載平衡需求，包括流量、可用性和應用程式可擴展性。
+  為您的應用程式選擇正確的負載平衡器類型。
  +  針對 HTTP/HTTPS 工作負載使用 Application Load Balancer。
  +  針對在 TCP 或 UDP 上執行的非 HTTP 工作負載使用 Network Load Balancer。
  +  如果要利用這兩種產品的功能，請使用兩者的組合 ([ALB 作為 NLB 的目標](https://aws.amazon.com/blogs/networking-and-content-delivery/application-load-balancer-type-target-group-for-network-load-balancer/))。例如，如果您想要搭配使用 NLB 的靜態 IP 與來自 ALB 的 HTTP 標題型路由，或者如果您想要將您的 HTTP 工作負載公開到 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-share-your-services.html)。
  +  如需負載平衡器的完整比較，請參閱 [ELB 產品比較](https://aws.amazon.com/elasticloadbalancing/features/)。
+  盡可能使用 SSL/TLS 卸載。
  +  使用與 [AWS Certificate Manager](https://aws.amazon.com/certificate-manager/) 整合的 [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html) 和 [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html) 來設定 HTTPS/TLS 接聽程式。
  +  請注意，基於合規理由，某些工作負載可能需要端對端加密。在此情況下，必須允許在目標進行加密。
  +  如需安全性最佳實務，請參閱 [SEC09-BP02 強制執行傳輸中加密](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_protect_data_transit_encrypt.html)。
+  選取正確的路由演算法 (僅 ALB)。
  +  路由演算法可以造成您的後端目標的妥善使用程度和它們影響效能程度的差異。例如，ALB [為路由演算法提供兩個選項](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#modify-routing-algorithm)：
  +  **最低未解決請求：**針對應用程式的請求因複雜性而異，或目標因處理功能而異的情況，用來讓負載更妥善地分散到您的後端目標。
  +  **循環配置：**當請求和目標類似，或是如果您需要在目標之間平均分散請求時使用。
+  考慮跨區域或區域隔離。
  +  針對延遲改善和區域失敗網域使用跨區域關閉 (區域隔離)。在 NLB 中預設關閉它，在 [ALB 中，您可以根據每個目標群組將其關閉](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/disable-cross-zone.html)。
  +  使用跨區域開啟來增加可用性和彈性。預設情況下，針對 ALB 關閉跨區域，[在 NLB 中，您可以根據每個目標群組將其關閉](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-cross-zone.html)。
+  為您的 HTTP 工作負載開啟 HTTP keep-alives (僅 ALB)。使用這項功能，負載平衡器可以重複使用後端連線，直到 keep-alive 逾時到期，改善您的 HTTP 請求和回應時間，同時減少您的後端目標上的資源使用率。有關如何為 Apache 和 Nginx 執行此操作的詳細資訊，請參閱[使用 Apache 或 NGINX 作為 ELB 的後端伺服器的最佳設定是什麼？](https://aws.amazon.com/premiumsupport/knowledge-center/apache-backend-elb/) 
+  開啟負載平衡器的監控功能。
  +  開啟 [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/enable-access-logging.html) 和 [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-access-logs.html) 的存取記錄。
  +  針對 ALB 要考慮的主要欄位是 `request_processing_time`、`request_processing_time` 和 `response_processing_time`。
  +  針對 NLB 要考慮的主要欄位是 `connection_time` 和 `tls_handshake_time`。
  +  請準備好在您需要日誌時進行查詢。您可以使用 Amazon Athena 查詢 [ALB 日誌](https://docs.aws.amazon.com/athena/latest/ug/application-load-balancer-logs.html)和 [NLB 日誌](https://docs.aws.amazon.com/athena/latest/ug/networkloadbalancer-classic-logs.html)。
  +  建立效能相關指標的警示，例如 [ALB 的 `TargetResponseTime`](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)。

## 資源
<a name="resources"></a>

 **相關文件：**
+  [ELB 產品比較](https://aws.amazon.com/elasticloadbalancing/features/) 
+  [AWS 全球基礎設施](https://aws.amazon.com/about-aws/global-infrastructure/) 
+  [使用可用區域親和性改善效能並且降低成本](https://aws.amazon.com/blogs/architecture/improving-performance-and-reducing-cost-using-availability-zone-affinity/) 
+  [使用 Amazon Athena 逐步執行日誌分析](https://github.com/aws/elastic-load-balancing-tools/tree/master/amazon-athena-for-elb) 
+  [查詢 Application Load Balancer 日誌](https://docs.aws.amazon.com/athena/latest/ug/application-load-balancer-logs.html) 
+  [監控 Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-monitoring.html) 
+  [監控 Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-monitoring.html) 
+  [使用 Elastic Load Balancing 在 Auto Scaling 群組的執行個體中分配流量](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-load-balancer.html) 

 **相關影片：**
+  [AWS re:Invent 2023：聯網可以為您的應用程式做些什麼？](https://www.youtube.com/watch?v=tUh26i8uY9Q) 
+  [AWS re:Inforce 20：如何使用 Elastic Load Balancing 大規模增強您的安全態勢](https://www.youtube.com/watch?v=YhNc5VSzOGQ) 
+  [AWS re:Invent 2018：Elastic Load Balancing：深入探討和最佳實務](https://www.youtube.com/watch?v=VIgAT7vjol8) 
+  [AWS re:Invent 2021 - 如何為您的 AWS 工作負載選擇正確的負載平衡器](https://www.youtube.com/watch?v=p0YZBF03r5A) 
+  [AWS re:Invent 2019：針對不同工作負載充分發揮 Elastic Load Balancing](https://www.youtube.com/watch?v=HKh54BkaOK0) 

 **相關範例：**
+  [Gateway Load Balancer](https://catalog.workshops.aws/gwlb-networking/en-US) 
+  [使用 Amazon Athena 進行日誌分析的 CDK 和 CloudFormation 範例](https://github.com/aws/elastic-load-balancing-tools/tree/master/log-analysis-elb-cdk-cf-template) 