1、何为无损发布?
无损发布就是在应用进行发布升级的时候,不会影响到正在使用系统的用户,比如用户正在进行资料更新,如果这个时候进行升级,系统升级往往需要重启,重启会导致用户的资料更新失败。如何做到升级不影响用户的使用,就是今天我们讨论的无损发布。不会因为系统重启导致系统数据的丢失。
2、如何做到无损发布?
2.1、首先我们来看看web应用的无损发布,也即Nginx+Tomcat的架构模式,如下图:
2.2、无损发布的基本思路:
2.2.1、首先Nginx 动态修改 upstream,请求不再路由到Tomcat1
2.2.2、等待Tomcat1上面的请求处理完毕
2.2.3、对Tomcat1进行升级
2.2.4、检查Tomcat1是否升级成功
2.2.5、再修改Nginx 的upstream,把请求路由到Tomcat1上面
2.2.6、循环上面的步骤,直到所有的Tomcat都升级完毕
2.3、需要解决的技术问题:
2.3.1、Nginx 动态修改 upstream:
2.3.1.1、ngx_http_dyups_module模块能动态修改upstream
或者
2.3.1.2、通过lua动态更改upstream
(修改之后,路由到被踢掉的Tomcat上面的请求是否还能继续处理,待验证?)
2.3.2、识别Tomcat上面的请求处理完毕(只有等到Tomcat上面的请求处理完毕以后,才能对Tomcat进行进行重启,这样才能做到无损发布,否则还是会有部分请求会失败):
2.3.2.1、通过监控Tomcat的处理请求的线程的状态,来判断现在是否还有请求没有处理完毕