生产环境,如何发布更新?

evilk

以前php-fpm,都是直接发布代码,没有其他顾虑
现在用webman,线上环境,如何更新呢?

1.
如果直接 php start.php restart -d,会造成请求中断吗?
比如,某一个worker进程,正在处理请求,这时候直接 restart,会中断请求吗?

2.
redis队列,消费者正在消费消息,这个时候更新,这条消息是不是就没有了?
所以这种情况,专业的MQ,有ack机制,就能避免这种情况的发生?

3.
如果只用一台服务器运行webman,应该如何发布更新呢?
有没有思路可以提供一下

2070 3 4
3个回答

Mr_Deng
  • 暂无评论
walkor 打赏

1、如果直接 php start.php restart -d,会造成请求中断吗?

框架会等待业务执行完毕关闭进程,所以正常情况下不会中断请求。但是如果进程收到停止命令后业务超过2秒还没有结束会被强行杀死,强行杀死进程时会造成请求中断。

2、redis队列,消费者正在消费消息,这个时候更新,这条消息是不是就没有了?

同上,redis队列没有ack机制,如果消费慢超过2秒可能发生restart 可能导致消费中断,消息丢失。
专业的MQ,有ack机制,可避免。

更改业务代码reload即可,不需要restart。
如果更新vendor里的库,需要restart。

  • evilk 2022-04-12

    老大,这个2秒,是否可以自定义
    因为很多时候,进程不一定能在2秒内处理完,从而响应主进程的指令
    如果,可以根据具体的业务情况,自定义这个2秒,比如设置为10秒
    这样,就可以避免强行杀死进程,造成数据丢失的情况
    这样的话,在线上,直接 restart 或者 reload,就更好了

  • walkor 2022-04-12

    下个workerman版本支持自定义

  • evilk 2022-04-12

    谢谢老大
    多问已经,下个workerman版本,大概什么时候上

  • walkor 2022-04-12

    时间不定,你先手动改下吧 KILL_WORKER_TIMR_TIME

evilk

截图
就是这个数值

  • 暂无评论
年代过于久远,无法发表回答
×
🔝