spring cloud 学习(7) - 生产环境如何不停机热发布?
业务繁忙的系统,原则上是不允许停机的,那么问题来了,如果真有严重的bug要修复,不得不发布,怎么做到不停机发布,对业务无感知呢?
eureka 提供了一系列rest url,可以对注册实例进行操作,比如:将服务离线/上线,注册/注销,动态修改meta元数据等,详情见本文最后的参考wiki。
不停机发布的思路:
通常spring-cloud微服务是以集群方式部署的,而且内网微服务,通过zuul网关来进行访问,再次搬出上一篇中的示意架构图:

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
参数下图:

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

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

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

注:下线后,还要经过几次心跳,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
参考文章:
https://github.com/Netflix/eureka/wiki/Eureka-REST-operations
spring cloud 学习(7) - 生产环境如何不停机热发布?的更多相关文章
- spring cloud 学习(9) - turbine stream无法在eureka注册的解决办法
turbine是啥就不多解释了,初次接触的可以移步spring cloud 学习(4) - hystrix 服务熔断处理 拉到最后看一下,turbine stream默认情况下启动成功后,eureka ...
- Spring Cloud学习(一):Eureka服务注册与发现
1.Eureka是什么 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的. Eureka ...
- spring cloud 学习资料
spring cloud 学习资料 网址 拜托!面试请不要再问我Spring Cloud底层原理 https://mp.weixin.qq.com/s/ZH-3JK90mhnJPfdsYH2yDA
- Spring Boot和Spring Cloud学习资源推荐
Spring Boot和Spring Cloud学习资源推荐 比较好的学习资源,分享一下. 1.Spring Boot官方文档:http://projects.spring.io/spring-b ...
- Spring Cloud 学习 之 Spring Cloud Eureka(源码分析)
Spring Cloud 学习 之 Spring Cloud Eureka(源码分析) Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 ...
- Spring Cloud学习(一)
Spring Cloud是什么? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载 ...
- 分布式配置中心介绍--Spring Cloud学习第六天(非原创)
文章大纲 一.分布式配置中心是什么二.配置基本实现三.Spring Cloud Config服务端配置细节(一)四.Spring Cloud Config服务端配置细节(二)五.Spring Clou ...
- Spring Cloud 学习 之 Spring Cloud Eureka(搭建)
Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 文章目录 搭建服务注册中心: 注册服务提供者: 高可用注册中心: 搭建服务注册中心: ...
- Spring Cloud 学习笔记(一)——入门、特征、配置
[TOC] 0 放在前面 0.1 参考文档 http://cloud.spring.io/spring-cloud-static/Brixton.SR7/ https://springcloud.cc ...
随机推荐
- MyCat分库分表入门
1.分区 对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm. 根据一定的规则把数据文件(MYD)和索引文件(MYI)进行了分割,分区后 ...
- python垃圾回收之分代回收
可参考vamei的博客和https://www.jianshu.com/p/1e375fb40506
- python抓取内涵段子文章
# coding:utf-8 from urllib.request import urlretrieve import threading import requests from bs4 impo ...
- ConvertUtils.register的作用
BeanUtils的populate方法或者getProperty,setProperty方法其实都会调用convert进行转换 但Converter只支持一些基本的类型,甚至连Java.util.D ...
- Windows环境下python的安装与使用
Windows环境下python的安装与使用 一.python如何运行程序 首先说一下python解释器,它是一种让其他程序运行起来的程序.当你编写了一段python程序,python解释器将读取程序 ...
- TPCC-MySQL安装、使用及结果解读
tpcc-mysql用于MySQL基准测试,percona基于TPC-C(下面简写成TPCC)衍生出来的产品.下面对tpcc-mysql进行安装然后使用,最后结果解读,安装very easy,let ...
- Web Automation with Selenium (C#)
Web Automation is a quite regular task nowadays, scripting for repeated operations and testing. Sele ...
- IntelliJ IDEA快捷键:Esc
the Esc key in any tool window moves the focus to the editor. 任何工具窗口都会将焦点移动到编辑器.
- Centos7 服务器启动jar包
首先Centos7 推荐我们这么运行项目 首先执行命令: cd /ets/systemd/system到这个目录下,新建一个 yourProjectName.service,可以把yourProjec ...
- 005.iSCSI客户端配置示例-Windows
一 环境 Linux作为iSCSI服务端,Windows2008R2作为iSCSI客户端 二 服务端配置过程 2.1 客户端配置 在Linux上参照之前的配置建立三个LUN卷作为共享盘,最终配置如下: ...