

# PERF05-BP05 选择网络协议以提高性能
<a name="perf_select_network_protocols"></a>

评估工作负载的性能要求，并选择可优化工作负载整体性能的网络协议。

延迟和带宽之间的关系可以实现高吞吐量。例如，如果文件传输使用传输控制协议（TCP），则延迟越高，整体吞吐量越低。有一些方法可以使用 TCP 调整和优化的传输协议来解决此问题，有些方法则使用用户数据报协议（UDP）。

 [可扩展的可靠数据报（SRD）](https://ieeexplore.ieee.org/document/9167399)协议是 AWS 为 Elastic Fabric Adapter 构建的网络传输协议，可提供可靠的数据报传送。与 TCP 协议不同，SRD 可以对数据包重新排序，并且不按顺序传送它们。SRD 的这种乱序传送机制通过备用路径并行发送数据包，可提高吞吐量。 

 **常见反模式：** 
+  无论有怎样的性能要求，都为所有工作负载使用 TCP。 

 **建立此最佳实践的好处：** 
+  为工作负载组件之间的通信选择适当的协议，可确保您获得该工作负载的最佳性能。 
+  确认已为用户和工作负载组件之间的通信使用适当的协议，有助于改善应用程序的整体用户体验。例如，同时使用 TCP 和 UDP，让 VDI 工作负载可以利用 TCP 对关键数据的可靠性以及 UDP 对实时数据的速度。 

 **在未建立这种最佳实践的情况下暴露的风险等级：**中等（使用不适当的网络协议会导致性能不佳，例如响应速度慢、延迟高和可扩展性差） 

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

提高工作负载性能的主要考虑因素是了解延迟和吞吐量要求，然后选择可优化性能的网络协议。

 **何时考虑使用 TCP** 

 TCP 提供可靠的数据传输，并可用于工作负载组件之间的通信，在这种情况下，可靠性和有保证的数据传输很重要。许多基于 Web 的应用程序依赖基于 TCP 的协议（例如 HTTP 和 HTTPS）来打开 TCP 套接字，以用于与 AWS 上的服务器通信。由于 TCP 能够控制数据交换速率和网络拥塞，所以电子邮件和文件数据传输是也可以使用 TCP 的常见应用。在 TCP 之上使用 TLS 会对通信增加一些开销，进而会导致延迟增加和吞吐量降低。该开销主要来自握手过程（需要多次往返才能完成）的额外开销。握手完成后，加密和解密数据的开销相对较小。 

 **何时考虑使用 UDP** 

 UDP 是一种面向无连接的协议，因此适用于需要快速、高效传输的应用，例如日志记录、监控和 VoIP 数据。此外，如果您的工作负载组件要响应来自大量客户端的小型查询，以确保工作负载实现最佳性能，则可考虑使用 UDP。数据报传输层安全性（DTLS）是 TLS 的 UDP 等效项。在 UDP 上使用 DTLS 时，因为简化了握手过程，所以开销来自加密和解密数据。因为 DTLS 包括额外的字段，用于指明安全性参数和检测篡改，所以它也会给 UDP 数据包增加少量的开销。 

 **何时考虑使用 SRD** 

 可扩展的可靠数据报（SRD）是一种针对高吞吐量工作负载而优化的网络传输协议，因为它能够跨多条路径对流量进行负载均衡，并能在发生丢包或链路故障时快速恢复。因此，SRD 非常适合在计算节点之间需要高吞吐量、低延迟通信的高性能计算（HPC）工作负载。这可能包括并行处理任务（例如，涉及在节点间进行大量数据传输的模拟、建模和数据分析）。 

 **实施步骤** 

1.  使用 [AWS Global Accelerator](https://aws.amazon.com/global-accelerator/) 和 [AWS Transfer Family](https://aws.amazon.com/aws-transfer-family/) 服务提高在线文件传输应用程序的吞吐量。AWS Global Accelerator 服务帮助您在客户端设备与 AWS 上的工作负载之间实现更低延迟。借助 AWS Transfer Family，您可以使用基于 TCP 的协议 [安全外壳文件传输协议（SFTP）和基于 SSL 的文件传输协议（FTPS）] 安全地扩展和管理到 AWS 存储服务的文件传输。 

1.  使用网络延迟来确定 TCP 是否适合工作负载组件之间的通信。如果客户端应用程序和服务器之间的网络延迟很高，则 TCP 三次握手需要一些时间，因而会影响应用程序的响应能力。可以使用第一个字节的时间（TTFB）和往返时间（RTT）来衡量网络延迟。如果您的工作负载向用户提供动态内容，请考虑使用 [Amazon CloudFront](https://aws.amazon.com/cloudfront/)，它会为动态内容建立到每个源的持久连接，以便减少连接设置时间，要不然会减慢每个客户端请求的速度。 

1.  由于在 TCP 或 UDP 上使用 TLS 会影响加密和解密，从而导致工作负载的延迟增加和吞吐量降低。对于此类工作负载，请考虑使用 [Elastic Load Balancing](https://aws.amazon.com/elasticloadbalancing/) 上的 SSL/TLS 卸载，允许负载均衡器处理 SSL/TLS 加密和解密过程，而不是让后端实例来处理，从而提高工作负载性能。这可以帮助降低后端实例上的 CPU 利用率，进而可以提高性能并增加容量。 

1.  使用 [Network Load Balancer（NLB）](https://aws.amazon.com/elasticloadbalancing/network-load-balancer/)来部署依赖 UDP 协议的服务（例如，身份验证和授权、日志记录、DNS、IoT 和串流媒体），以便提高工作负载的性能和可靠性。NLB 在多个目标之间分配传入的 UDP 流量，使您可以横向扩展工作负载、提高容量和减少单个目标的开销。 

1.  对于高性能计算（HPC）工作负载，考虑使用[弹性网络适配器（ENA）Express](https://aws.amazon.com/about-aws/whats-new/2022/11/elastic-network-adapter-ena-express-amazon-ec2-instances/) 功能，它使用 SRD 协议为 EC2 实例之间的网络流量提供更高的单流带宽（25Gbps）和更低的尾延迟（99.9 百分位数），从而提高网络性能。 

1.  使用 [Application Load Balancer（ALB）](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)对工作负载组件之间或支持 gRPC 的客户端与服务之间的 gRPC（远程过程调用）流量进行路由和负载平衡。gRPC 使用基于 TCP 的 HTTP/2 协议进行传输，并且它可带来性能优势，例如更少的网络占用、压缩、高效的二进制序列化、支持众多语言以及双向流式传输。 

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

 **相关文档：** 
+  [Amazon EBS - 优化实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html) 
+  [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 
+  [Linux 上的 EC2 增强联网](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html) 
+  [Windows 上的 EC2 增强联网](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/enhanced-networking.html) 
+  [EC2 置放群组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) 
+  [在 Linux 实例上启用弹性网络适配器（ENA）增强联网](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking-ena.html) 
+  [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) 
+  [AWS 联网产品](https://aws.amazon.com/products/networking/) 
+  [Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw) 
+  [过渡到 Amazon Route 53 中基于延迟的路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/TutorialTransitionToLBR.html) 
+  [VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) 
+  [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) 

 **相关视频：** 
+  [连接 AWS 和混合 AWS 网络架构（NET317-R1）](https://www.youtube.com/watch?v=eqW6CPb58gs) 
+  [优化 Amazon EC2 实例的网络性能（CMP308-R1）](https://www.youtube.com/watch?v=DWiwuYtIgu0) 
+ [调优云：提高应用程序的全球网络性能](https://www.youtube.com/watch?v=00ukhVcgWrs)
+ [使用 EFA 和 SRD 进行应用程序扩展](https://pages.awscloud.com/HPC-Application-Scaling-with-Elastic-Fabric-Adapter-EFA-and-Scalable-Reliable-Datagram-SRD_2020_0004-CMP_OD.html)

 **相关示例：** 
+  [AWS Transit Gateway 和可扩展的安全解决方案](https://github.com/aws-samples/aws-transit-gateway-and-scalable-security-solutions) 
+  [AWS 联网研讨会](https://networking.workshop.aws/) 