主要观点:
- Cloudflare 致力于避免服务中断,常部署新代码版本,而 UDP 服务器的优雅重启颇具难度。
- 介绍了 udpgrm,一个帮助升级 UDP 服务器且不丢包的轻量级守护进程,包括其历史背景、REUSEPORT 组、套接字生成和工作生成等原理。
- udpgrm 有用于系统管理员和程序员的不同使用方式,还提供了高级套接字创建脚本和系统服务生命周期相关内容。
- udpgrm 支持三种 dissector 模式,以处理不同协议的旧流路由逻辑,且有一个更高级的定制 dissector 模板。
- udpgrm 解决了优雅重启 UDP 服务器的重要问题,虽易使用但隐藏了复杂性,希望能推动系统改进。
关键信息:
- 早期 UDP 用于无状态通信,现代协议需处理流状态,TCP 有常见重启方法,UDP 较复杂。
- Linux 的 SO_REUSEPORT 可让多个套接字绑定同一 IP:端口,可通过 eBPF 控制数据包路由。
- udpgrm 维护工作生成以处理新流,通过 flow dissector 区分新旧流,支持三种 dissector 模式。
- 对于系统管理员,可通过命令行操作 udpgrm,需设置 cgroup 钩子等;对于程序员,服务器通过特定 API 与 udpgrm 通信。
- 提供 udpgrm_activate.py 脚本用于创建绑定低端口的套接字,还可通过 decoy 脚本绕过系统服务限制。
重要细节:
- 历史上曾描述的“established-over-unconnected”方法有缺陷。
- REUSEPORT 组内的套接字组织方式及不同分发数据包方法。
- udpgrm 内部通过安装 REUSEPORT eBPF 程序等方式处理各种情况。
- 不同 dissector 模式的特点及适用场景,如 FLOW 模式简单适用于旧协议等。
- Cloudflare 的各项服务及相关产品介绍,如 1.1.1.1 免费应用等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。