swoole重启问题

在访问量比较大的程序中,如果使用重启服务的话,会导致一些访问出错,请问这种情况下。
比如一个请求正在处理中,可是因为重启的缘故,可能导致请求处理一半的数据写到数据中出现数据错误的问题。
项目用的是hyperf,请问有什么好的解决方案吗?

阅读 3.5k
1 个回答

平滑重启的基本流程:

  1. 启动新的实例,新旧实例同时提供服务
  2. 旧服务停止接受新请求,处理完已有请求后退出

实现的方式很多,例如用 nginx 做负载均衡,或者自己用 SO_REUSEPORT + 停止 accept + 等待已有请求完成后退出。

我们现在用K8s,就是启动新实例,新实例加到负载均衡器, 同时旧实例在preStop里等待一段时间让已有的请求被处理完再退出,不需要改动应用代码。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题