

# 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 为您的应用程序提供多种模型，以使用负载均衡。[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，它提供极低的延迟。或者，您可以决定利用 Application Load Balancer（在 [AWS Local Zones](https://aws.amazon.com/about-aws/global-infrastructure/localzones/) 甚至 [AWS Outposts](https://aws.amazon.com/outposts/rack/)中），让工作负载更靠近客户。 

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

 使用与负载均衡器集成的 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 卸载。 
  +  配置 HTTPS/TLS 侦听器，将 [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) 与 [AWS Certificate Manager](https://aws.amazon.com/certificate-manager/)集成。 
  +  请注意，出于合规性原因，有些工作负载可能需要端到端加密。在这种情况下，必须允许在目标上启用加密。 
  +  有关安全最佳实践，请参阅 [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/) 
+  为您的负载均衡器开启监控。 
  +  启用 [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)。 
  +  为性能相关指标（例如 [`TargetResponseTime` for ALB](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 Balancers](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) 

 **相关视频：** 
+  [AWSre: 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:Inforce 2022 - 如何使用 Elastic Load Balancing 全面改善安全状况](https://www.youtube.com/watch?v=YhNc5VSzOGQ) 
+  [AWS re:Invent 2019：充分利用适用于不同工作负载的 Elastic Load Balancing](https://www.youtube.com/watch?v=HKh54BkaOK0) 

 **相关示例：** 
+  [使用 Amazon Athena 进行日志分析的 CDK 和 CloudFormation 示例 ](https://github.com/aws/elastic-load-balancing-tools/tree/master/log-analysis-elb-cdk-cf-template) 