更新程序不中断已有的 tcp 连接
knight42 opened this issue · 2 comments
knight42 commented
更新程序不中断已有的 tcp 连接
iBug commented
考察了一下各种方案,由于技术限制,zero-downtime 和跨平台(其实也就是支持 Windows)两个特性只能二选一。简而言之,原因是 Windows 没有 SO_REUSEPORT
这种东西。
我倾向于放弃跨平台实现 Linux-only 的 zero-downtime,这样有一些很方便现成的库可以用,例如 cloudflare/tableflip。
iBug commented
讨论了一下,需要考虑的事情有点多:
- 如何让 systemd 更新进程,同时不要管旧进程(答案:
KillMode=none
,但这会让旧进程完全失控) - 如何处理日志:
- 写冲突(查资料可知
O_APPEND
可以保证原子追加,但只有“足够小”的 write 操作能保证不会交错) - 旧进程的 logrotate 问题(还没写完就被 logrotate 了)
- 写冲突(查资料可知
暂定结论是虽然能实现但是会很麻烦,所以决定暂时搁置这个功能。