swoole重启问题

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

阅读 540
评论 2月12日提问
    1 个回答
    oraoto
    • 4.7k

    平滑重启的基本流程:

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

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

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

    评论 赞赏 2月14日