spring不停机部署_spring cloud 学习(7) - 生产环境如何不停机热发布?

业务繁忙的系统,原则上是不允许停机的,那么问题来了,如果真有严重的bug要修复,不得不发布,怎么做到不停机发布,对业务无感知呢?

eureka 提供了一系列rest url,可以对注册实例进行操作,比如:将服务离线/上线,注册/注销,动态修改meta元数据等,详情见本文最后的参考wiki。

不停机发布的思路:

通常spring-cloud微服务是以集群方式部署的,而且内网微服务,通过zuul网关来进行访问,再次搬出上一篇中的示意架构图:

61098d2bcbf2897cef6a0295b9a0fa83.png

zuul网关层一般只是用于路由转发等轻量级的处理,不会涉及太多复杂的业务逻辑,发布相对较少,经常修改的多半是背后的微服务,对于微服务的不停机发布,思路如下:

1、先将目标机的服务状态调整成“下线”

即:利用 PUT /eureka/apps/appID/instanceID/status?value=OUT_OF_SERVICE 这个rest接口

shell终端下,可以类似下面这样直接输入:

curl -X PUT -i -H "Authorization:Basic d2**G9zOndSVEwxaUpaRVp3MFBU****" http://10.1.2.3:7001/eureka/apps/DEMO-SERVICE/10.0.2.*:7031/status?value=OUT_OF_SERVICE

注:

-X PUT 表示这是PUT请求

-H 表示设置http头,如果背后的微服务,启用了basic auth安全认证,不加头的话,会提示没有权限,至于Authorization:Basic 后面的这一串密文是怎么来的,后面会讲到

http://10.1.2.3:7001/ 这是eureka-server所在的ip或域名

DEMO-SERVICE 是要下线的服务名称

10.0.2.*:7031 是服务实例的instanceId

参数下图:

93eee170b9d6f38ccf1c65cbdb39ce43.png

当然,上面这个请求,也可以用postman之类的图形化工具来进行:

ada88216a5df88a0314a9ec4e73b8d6e.png

对于设置了Basic Auth的微服务,可参考上图,设置用户名、密码,然后点击Update Request,就得到了Header中的值(如下图)

f8cfa0bf2bb3823e5dd9a49f4d3e3ddf.png

调用成功后,再回到eureka server中观察,可以发现该服务已经下线:

671e08da6a7a84af04c733b465128101.png

注:下线后,还要经过几次心跳,zuul才会感知到这台节点的变化,建议下线后,先等待1-2分钟,这样新的请求,就不会通过zuul转发到这台目标机器。

2、对目标机进行常规发布

经常刚才的步骤,目标机上已经没有新请求进来,可以相对安全的进行程序更新发布

注:如果发布过程中,一般要先停止应用,建议用kill pid,不要带-9强杀,以防万一还有未执行完成的请求。另外,发布重启后,也建议等待1-2分钟,等应用彻底启动好,并注册到eureka server上,让zuul感知该节点已重新上线。

3、对其它节点重复1,2的操作。

其它技巧:

上一篇还提到了如何做灰度发布,其原理是通过meta-map元数据来实现,发布完成后,也可以通过eureka的rest url来动态修改元数据,让指定节点变成灰度机器,类似:

curl -X PUT -i -H "Authorization:Basic d2lucG9zOndSVEwxaUpaRVp1MFBUMm9=" http://10.0.19.71:7001/eureka/apps/DEMO-SERVICE/10.0.19.73:7031/metadata?gated-launch=true

参考文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值