什么时候需要重启呢?
- 版本升级
- 特殊情况如配置加载的重启
重启时有什么要求?
- 已接受的请求不能中断
- 新来的请求要及时响应
因此就需要服务端支持平滑重启的特点,现在设计两种平滑重启的方案:主动式、被动式
被动式平滑重启
特点:新进程是旧进程的子进程,默认继承老进程的所有环境变量
主动式平滑重启
特点:新旧进程完全是两个相互独立的进程,自由度高。但存在一种情况:两个进程bind、listen同一个IP + 端口,不同的操作系统版本上的处理方式也会不同:
-
- Unbuntu linux 内核 4.13.0
设置参数SO_REUSEADDR、SO_REUSEPORT,可以bind、listen成功,新的连接由系统分配到某一个进程; - Windows 7
不支持SO_REUSEPORT,仅设置参数SO_REUSEADDR时,可以bind、listen成功,但是新的连接仍然会发往老进程,老进程关闭socket后,会发至新进程; - Mac 10.12.6
设置参数SO_REUSEADDR、SO_REUSEPORT,可以bind、listen成功,新的连接只会发往新的进程。
- Unbuntu linux 内核 4.13.0