swoft-cloud / swoft

🚀 PHP Microservice Full Coroutine Framework
https://swoft.org
Apache License 2.0
5.58k stars 788 forks source link

RPC协议正式环境怎么样进行更新代码,而又不影响当前的请求 #1441

Open laiweijiemu opened 3 years ago

laiweijiemu commented 3 years ago

因为rpc协议也是守护进程的方式,但每一次更新代码都需要重启rpc进程,但在重启过程当中会异常有原有请求中断,怎么避免这种情况的发生。

JasonYHZ commented 3 years ago

这种情况你可以考虑更改一下你的发布方式,例如使用负载均衡,来做滚动式更新部署。

laiweijiemu commented 3 years ago

利用apollo吗?有没有相关的demo可以参考一下,或者是教程

JasonYHZ commented 3 years ago

这个我暂时无法回答,因为这并不存在一个标准的答案,这些操作更多的是偏向于运维的方向,你可以搜索下看看什么是滚动更新。 总体来说就是你要准备一些可用的备用节点,更新的时候逐个停止更新再上线,通过负载均衡或其他的方案来控制流量避免请求到您正在执行升级的节点上。

laiweijiemu commented 3 years ago

总体来说就是你要准备一些可用的备用节点,更新的时候逐个停止更新再上线,但是我们怎么什么时候停止呢?因为我通过控制流量的时候:已经进入的流量,还没有完成请求,如果我停止掉,哪么这个请求就被丢弃了。

JasonYHZ commented 3 years ago

你需要做的就是在更新的时候将你要更新的节点从负载均衡中下掉,确保不会有新的请求流入您要升级的节点中,之后使用正常的停止信号量,等待处理完所有的请求之后关闭进程开始进行更新,更新完成后, 将此节点恢复到负载中开始处理新的请求,以此类推,将你的所有节点逐步完成升级直到所有节点的代码都升级到最新,则此次升级结束。

NYYYL commented 2 years ago

希望能有像workerman一样的平滑重启功能