

# PERF04-BP04 使用负载平衡在多个资源之间分配流量
<a name="perf_networking_load_balancing_distribute_traffic"></a>

 跨多个资源或服务分配流量，以便让工作负载能够利用云提供的弹性。您也可以使用负载均衡机制来分流加密终端，以便提高性能和可靠性，并有效管理和路由流量。

 **常见反模式：**
+  在选择负载均衡器类型时不考虑工作负载要求。
+  不利用负载均衡器功能进行性能优化。
+  工作负载直接暴露给互联网，而不使用负载均衡器。
+  通过现有负载均衡器来路由所有互联网流量。
+  使用通用 TCP 负载均衡，并让每个计算节点处理 SSL 加密。

 **建立此最佳实践的好处：**负载均衡器可在单个可用区内或多个可用区之间处理应用程序不断变化的流量负载，并实现高可用性、自动扩展和更高的工作负载利用率。

 **在未建立这种最佳实践的情况下暴露的风险等级：**高 

## 实施指导
<a name="implementation-guidance"></a>

 负载均衡器充当工作负载的接入点，从这里将流量分发到后端目标（例如计算实例或容器）来提高利用率。

 优化架构的第一步是选择适合的负载均衡器类型。首先列出工作负载特性，例如协议（如 TCP、HTTP、TLS 或 WebSocket）、目标类型（如实例、容器或无服务器）、应用程序要求（如长时间运行的连接、用户身份验证或粘性）和置放（如区域、Local Zone、Outpost 或分区隔离）。

 AWS 为应用程序提供多种模型来使用负载均衡。[应用程序负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)最适合 HTTP 和 HTTPS 流量的负载均衡，面向交付包括微服务和容器在内的现代应用程序架构，提供高级请求路由功能。

 若要对需要极高性能的 TCP 流量进行负载均衡，[网络负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)是最佳选择。网络负载均衡器每秒能够处理数百万请求，同时能保持超低延迟，还针对处理突发和不稳定的流量模式进行了优化。

 [弹性负载均衡](https://aws.amazon.com/elasticloadbalancing/)提供集成的证书管理和 SSL/TLS 解密，使您可以灵活地集中管理负载均衡器的 SSL 设置，并从工作负载中分流占用大量 CPU 的工作。

 选择适合的负载均衡器之后，您可以开始利用其功能来减少后端为提供流量所付出的工作量。

 例如，您可以使用应用程序负载均衡器（ALB）和网络负载均衡器（NLB）执行 SSL/TLS 加密分流，借此机会避免目标完成 CPU 密集型 TLS 握手，同时还可以改进证书管理。

 当您在负载均衡器中配置 SSL/TLS 分流时，它负责加密进出客户端的流量，同时将未加密的流量传输到您的后端，释放后端资源和缩短客户端的响应时间。

 应用程序负载均衡器还可以提供 HTTP/2 流量，无需在您的目标上支持它。因为 HTTP/2 可以更高效地使用 TCP 连接，所以这个简单的决定可以缩短应用程序的响应时间。

 在定义架构时应考虑工作负载延迟要求。例如，如果您有延迟敏感型应用程序，则可以决定使用提供极低延迟的网络负载均衡器。您也可以决定通过在 [AWS Local Zones](https://aws.amazon.com/about-aws/global-infrastructure/localzones/) 甚至 [AWS Outposts](https://aws.amazon.com/outposts/rack/) 中利用应用程序负载均衡器，让工作负载更接近客户。

 延迟敏感型工作负载的另一个考虑因素是跨可用区负载均衡。借助跨可用区负载均衡，每个负载均衡器节点在所有允许的可用区中的已注册目标之间分配流量。

 使用与负载均衡器集成的自动扩缩功能。高效性能系统的其中一个关键方面与合理调整后端资源的规模有关。为此，您可以为后端目标资源使用负载均衡器集成。使用负载均衡器与自动扩缩组的集成，根据需要在负载均衡器中添加或删除目标，以应对传入流量。对于容器化工作负载，负载均衡器也可与 [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 工作负载使用应用程序负载均衡器。
  +  为在 TCP 或 UDP 上运行的非 HTTP 工作负载使用网络负载均衡器。
  +  若想利用这两种产品的功能，请将两者结合使用（[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 分流。
  +  配置 HTTPS/TLS 侦听器，同时使用集成了 [AWS Certificate Manager](https://aws.amazon.com/certificate-manager/) 的[应用程序负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html)和[网络负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html)。
  +  请注意，出于合规性原因，有些工作负载可能需要端到端加密。在这种情况下，必须允许在目标上启用加密。
  +  有关安全最佳实践，请参阅 [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 保持活动（仅限 ALB）。借助此功能，在保持活动超时到期之前，负载均衡器可以重复使用后端连接，从而改进 HTTP 请求和缩短响应时间，还可以降低后端目标的资源利用率。有关如何为 Apache 和 Nginx 执行此操作的详细信息，请参阅[使用 Apache 或 NGINX 作为 ELB 后端服务器的最佳设置是什么？](https://aws.amazon.com/premiumsupport/knowledge-center/apache-backend-elb/) 
+  为您的负载均衡器开启监控。
  +  打开[应用程序负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/enable-access-logging.html)和[网络负载均衡器](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 的 [https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html](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/) 
+  [Improving Performance and Reducing Cost Using Availability Zone Affinity ](https://aws.amazon.com/blogs/architecture/improving-performance-and-reducing-cost-using-availability-zone-affinity/) 
+  [Step by step for Log Analysis with Amazon Athena ](https://github.com/aws/elastic-load-balancing-tools/tree/master/amazon-athena-for-elb) 
+  [查询应用程序负载均衡器日志](https://docs.aws.amazon.com/athena/latest/ug/application-load-balancer-logs.html) 
+  [Monitor your Application Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-monitoring.html) 
+  [Monitor your Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-monitoring.html) 
+  [使用弹性负载均衡跨自动扩缩组中的实例分配流量](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-load-balancer.html) 

 **相关视频：**
+  [AWS re:Invent 2023: What can networking do for your application?](https://www.youtube.com/watch?v=tUh26i8uY9Q)
+  [AWS re:Inforce 2022: How to use Elastic Load Balancing to enhance your security posture at scale](https://www.youtube.com/watch?v=YhNc5VSzOGQ) 
+  [AWS re:Invent 2018: Elastic Load Balancing: Deep Dive and Best Practices](https://www.youtube.com/watch?v=VIgAT7vjol8) 
+  [AWS re:Invent 2021 - How to choose the right load balancer for your AWS workloads ](https://www.youtube.com/watch?v=p0YZBF03r5A) 
+  [AWS re:Invent 2019: Get the most from Elastic Load Balancing for different workloads](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) 