PERF05-BP05 选择网络协议以提高性能 - AWS Well-Architected Framework

PERF05-BP05 选择网络协议以提高性能

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

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

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

常见反模式:

  • 无论有怎样的性能要求,都为所有工作负载使用 TCP。

建立此最佳实践的好处:

  • 为工作负载组件之间的通信选择适当的协议,可确保您获得该工作负载的最佳性能。

  • 确认已为用户和工作负载组件之间的通信使用适当的协议,有助于改善应用程序的整体用户体验。例如,同时使用 TCP 和 UDP,让 VDI 工作负载可以利用 TCP 对关键数据的可靠性以及 UDP 对实时数据的速度。

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

实施指导

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

何时考虑使用 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 AcceleratorAWS Transfer Family 服务提高在线文件传输应用程序的吞吐量。AWS Global Accelerator 服务帮助您在客户端设备与 AWS 上的工作负载之间实现更低延迟。借助 AWS Transfer Family,您可以使用基于 TCP 的协议 [安全外壳文件传输协议(SFTP)和基于 SSL 的文件传输协议(FTPS)] 安全地扩展和管理到 AWS 存储服务的文件传输。

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

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

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

  5. 对于高性能计算(HPC)工作负载,考虑使用弹性网络适配器(ENA)Express 功能,它使用 SRD 协议为 EC2 实例之间的网络流量提供更高的单流带宽(25Gbps)和更低的尾延迟(99.9 百分位数),从而提高网络性能。

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

资源

相关文档:

相关视频:

相关示例: