

# PERF05-BP04 利用负载均衡和加密卸载
<a name="perf_select_network_encryption_offload"></a>

使用负载均衡器实现目标资源的最佳性能效率，并提高系统的响应能力。

 **期望结果：**减少提供流量的计算资源数量。避免目标中的资源消耗不平衡。将计算密集型任务分流到负载均衡器。利用云弹性和灵活性来提高性能和优化架构。 

 **常见反模式：** 
+ 在选择负载均衡器类型时不考虑工作负载要求。
+ 不利用负载均衡器功能进行性能优化。
+  工作负载直接暴露给互联网，而不使用负载均衡器。 

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

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

 负载均衡器充当工作负载的接入点，它们从这里将流量分发到您的后端目标，例如计算实例或容器。优化架构的第一步是选择适合的负载均衡器类型。 

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

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

 例如，您可以使用 Application Load Balancer（ALB）和 Network Load Balancer（NLB）执行 SSL/TLS 加密卸载，这是一个机会，可以避免目标完成 CPU 密集型 TLS 握手，同时还可以改进证书管理。 

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

 Application Load Balancer 还可以提供 HTTP2 流量，无需在您的目标上支持它。因为 HTTP2 更有效地使用 TCP 连接，所以这个简单的决定可以缩短应用程序的响应时间。 

 负载均衡器还可以将流量分布到不同的后端类型（如容器和无服务器），从而使您的架构更加灵活。例如，Application Load Balancer 可配置[侦听器规则](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-update-rules.html)，根据标头、方法或模式等请求参数将流量转发到不同的目标组。 

 在定义架构时还应考虑工作负载延迟要求。例如，如果您有延迟敏感型应用程序，则可以决定使用 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，让工作负载更靠近客户。 

 延迟敏感型工作负载的另一个考虑因素是跨区域负载平衡。借助跨区域负载平衡，每个负载均衡器节点在所有已启用可用区中的已注册目标之间分配流量。这样可以提高可用性，但也会增加几毫秒的往返延迟。 

 最后，ALB 和 NLB 均提供日志和指标等监控资源。适当地设置监控有助于收集应用程序的性能洞察。例如，您可以使用 ALB 访问日志来查明哪些请求需要花更长的时间才能得到响应，或哪些后端目标会导致性能问题。 

 **实施步骤** 

1.  为工作负载选择适合的负载均衡器。 

   1.  为 HTTP/HTTPS 工作负载使用 Application Load Balancer。 

   1.  为在 TCP 或 UDP 上运行的非 HTTP 工作负载使用 Network Load Balancer。 

   1.  如果您想利用两个产品的功能，则可以使用以下组合：[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) 公开，则可以使用此组合。 

   1.  有关负载均衡器的全面对比，请参阅 [ELB 产品对比](https://aws.amazon.com/elasticloadbalancing/features/)。 

1.  使用 SSL/TLS 卸载。 

   1.  配置 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/) 集成。 

   1.  请注意，出于合规性原因，有些工作负载可能需要端到端加密。在这种情况下，必须在目标上启用加密。 

   1.  有关安全最佳实践，请参阅 [SEC09-BP02 执行传输中加密](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_protect_data_transit_encrypt.html)。 

1.  选择适合的路由算法。 

   1.  路由算法会影响后端目标的使用情况，从而决定它们对性能的影响。例如，ALB 提供[两个路由算法选项](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#modify-routing-algorithm)： 

   1.  **最少未完成请求：**用于在应用程序的请求复杂程度不同或目标处理能力不同的情况下，实现更好的后端目标负载分布。 

   1.  **循环：**当请求和目标类似，或需要在目标之间平均分配请求时使用。 

1.  考虑跨区域和区域隔离。 

   1.  使用跨区域关闭（区域隔离）来改善延迟和区域故障域。它在 NLB 中默认关闭，而在 [ALB 中，您可以按目标组来关闭](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/disable-cross-zone.html)。 

   1.  使用跨区域开启以提高可用性和灵活性。默认情况下，为 ALB 开启跨区域，而在 [NLB 中，您可以按目标组来开启](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-cross-zone.html)。 

1.  为 HTTP 工作负载开启 HTTP 保持活动。 

   1.  对于 HTTP 工作负载，在 Web 服务器设置中为后端目标开启 HTTP 保持活动。借助此功能，在保持活动超时到期之前，负载均衡器可以重复使用后端连接，从而改进 HTTP 请求和缩短响应时间，还可以降低后端目标的资源利用率。有关如何为 Apache 和 Nginx 执行此操作的详细信息，请参阅[使用 Apache 或 NGINX 作为 ELB 后端服务器的最佳设置是什么？](https://aws.amazon.com/premiumsupport/knowledge-center/apache-backend-elb/) 

1.  使用 Elastic Load Balancing 集成，更好地编排计算资源。 

   1.  使用与负载均衡器集成的 Auto Scaling。高效性能系统的其中一个关键方面与合理调整后端资源的大小有关。为此，您可以为后端目标资源使用负载均衡器集成。使用负载均衡器与 Auto Scaling 组的集成，根据需要在负载均衡器中添加或删除目标，以应对传入流量。 

   1.  对于容器化工作负载，负载均衡器也可与 Amazon ECS 和 Amazon EKS 集成。 
      + [使用 Elastic Load Balancing 在 Auto Scaling 组中的不同实例间分配流量](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-load-balancer.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)

1.  监控负载均衡器以找出性能瓶颈。 

   1.  启用 [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) 的访问日志。 

   1.  对于 ALB，要考虑的主要方面是 `request_processing_time`、`request_processing_time`和 `response_processing_time`。 

   1.  对于 NLB，要考虑的主要方面是 `connection_time` 和 `tls_handshake_time`。 

   1.  准备好在需要时查询日志。您可以使用 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)。 

   1.  为性能相关指标（如[`TargetResponseTime` for ALB](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)）创建警报。 

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

 **相关最佳实践：** 
+  [SEC09-BP02 执行传输中加密](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_protect_data_transit_encrypt.html) 

 **相关文档：** 
+ [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)

 **相关视频：** 
+ [AWS re:Invent 2018：[REPEAT 1] Elastic Load Balancing：深度挖掘和最佳实践（NET404-R1）](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 全面改善安全状况（NIS203）](https://www.youtube.com/watch?v=YhNc5VSzOGQ)
+ [AWS re:Invent 2019：充分利用适用于不同工作负载的 Elastic Load Balancing（NET407-R2）](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)