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 通过负载均衡来避免端口资源耗尽,并提出了多种解决方案以优化性能。
🏷️
标签
➡️