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