connect() - 为什么这么慢?

💡 原文英文,约2900词,阅读约需11分钟。
📝

内容提要

Cloudflare 鼓励从 IPv4 向 IPv6 地址过渡。他们的缓存服务消耗了许多 IPv4 地址,导致延迟。他们提出了三种解决方案:“选择、测试、重复”,“通过随机移动范围选择端口”,以及 IP_LOCAL_PORT_RANGE 套接字选项。还提到了其他协议的端口选择算法。

🎯

关键要点

  • Cloudflare 鼓励企业从 IPv4 地址过渡到 IPv6 地址。
  • Cloudflare 的缓存服务消耗了大量 IPv4 地址,导致延迟。
  • 提出三种解决方案:选择、测试、重复;通过随机移动范围选择端口;使用 IP_LOCAL_PORT_RANGE 套接字选项。
  • 缓存工作流程包括用户请求、请求路由和缓存资产返回。
  • 在高流量情况下,可能会对单一目标建立超过 50,000 个 TCP 单播连接。
  • 测试显示,使用两个 IPv4 地址的连接性能优于使用一个 IPv4 地址。
  • 发现性能瓶颈主要在于端口选择算法,尤其是奇偶端口的分配。
  • 奇数端口的连接速度显著慢于偶数端口,导致性能瓶颈。
  • 提出的用户空间解决方案适用于内核版本低于 6.8 的系统。
  • 在内核版本 6.8 及以上,新的补丁消除了窗口移动的需要,简化了端口选择过程。
  • 其他协议(如 DCCP 和 UDP)在端口选择算法上与 TCP 有相似之处,但也存在差异。
  • Cloudflare 通过负载均衡来避免端口资源耗尽,并提出了多种解决方案以优化性能。
➡️

继续阅读