业务繁忙的系统,原则上是不允许停机的,那么问题来了,如果真有严重的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) - 生产环境如何不停机热发布?的更多相关文章

  1. spring cloud 学习(9) - turbine stream无法在eureka注册的解决办法

    turbine是啥就不多解释了,初次接触的可以移步spring cloud 学习(4) - hystrix 服务熔断处理 拉到最后看一下,turbine stream默认情况下启动成功后,eureka ...

  2. Spring Cloud学习(一):Eureka服务注册与发现

    1.Eureka是什么 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的. Eureka ...

  3. spring cloud 学习资料

    spring cloud 学习资料 网址 拜托!面试请不要再问我Spring Cloud底层原理 https://mp.weixin.qq.com/s/ZH-3JK90mhnJPfdsYH2yDA

  4. Spring Boot和Spring Cloud学习资源推荐

    Spring Boot和Spring Cloud学习资源推荐   比较好的学习资源,分享一下. 1.Spring Boot官方文档:http://projects.spring.io/spring-b ...

  5. Spring Cloud 学习 之 Spring Cloud Eureka(源码分析)

    Spring Cloud 学习 之 Spring Cloud Eureka(源码分析) Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 ...

  6. Spring Cloud学习(一)

    Spring Cloud是什么? Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载 ...

  7. 分布式配置中心介绍--Spring Cloud学习第六天(非原创)

    文章大纲 一.分布式配置中心是什么二.配置基本实现三.Spring Cloud Config服务端配置细节(一)四.Spring Cloud Config服务端配置细节(二)五.Spring Clou ...

  8. Spring Cloud 学习 之 Spring Cloud Eureka(搭建)

    Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 文章目录 搭建服务注册中心: 注册服务提供者: 高可用注册中心: 搭建服务注册中心: ...

  9. Spring Cloud 学习笔记(一)——入门、特征、配置

    [TOC] 0 放在前面 0.1 参考文档 http://cloud.spring.io/spring-cloud-static/Brixton.SR7/ https://springcloud.cc ...

随机推荐

  1. 2017-2018-2 20165227 实验四《Android程序设计》实验报告

    一.实验报告封面 课程: Java程序设计 班级: 1652班 姓名: 朱越 学号: 20165227 指导教师: 娄嘉鹏 实验日期: 2018年5月14日 实验时间: 13:45 - 3:25 实验 ...

  2. 使用phpstorm+wamp实现php代码实时调试审计

    转载自:https://www.bugbank.cn/q/article/5853afaffc0bf4f010ee6ac3.html php调试有N多好用的工具,最近研究到phpstorm配合wamp ...

  3. 基于Disruptor并发框架的分类任务并发

    并发的场景 最近在编码中遇到的场景,我的程序需要处理不同类型的任务,场景要求如下: 1.同类任务串行.不同类任务并发. 2.高吞吐量. 3.任务类型动态增减. 思路 思路一: 最直接的想法,每有一个任 ...

  4. 【Pyhon】利用BurpSuite到SQLMap批量测试SQL注入

    前言 通过Python脚本把Burp的HTTP请求提取出来交给SQLMap批量测试,提升找大门户网站SQL注入点的效率. 导出Burp的请求包 配置到Burp的代理后浏览门户站点,Burp会将URL纪 ...

  5. vue 兼容IE报错解决方案

    IE 页面空白 报错信息 此时页面一片空白 报错原因 Babel 默认只转换新的 JavaScript 语法(如箭头函数),而不转换新的 API ,比如 Iterator.Generator.Set. ...

  6. kibana提示"[illegal_argument_exception] mapper [hits] cannot be changed from type [long] to [integer]"

    =============================================== 2019/1/30_第1次修改                       ccb_warlock == ...

  7. 使用管道和cronolog切割日志

    安装cronolog git clone https://github.com/fordmason/cronolog ./configure make && make install ...

  8. https-配置使用HTTPS的ASP.NET Web应用

    有关HTTPS.SSL以及SSL证书的工作原理,参见 <HTTPS-HTTPS原理> <HTTPS-SSL证书> <HTTPS-攻击实例与防御> 本文将演示如何在I ...

  9. sublime text2快捷键

    mac: command+option+f : 替换, find what: (.*) replace with:"$1": "1"     或者: data: ...

  10. 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)——转载

    原文链接:http://blog.chinaunix.net/uid-22548820-id-3181798.html fork ( /directory/script.sh) :如果shell中包含 ...