中间件核心技术与实战
丁威
中通快递资深架构师,RocketMQ 社区首席布道师
19674 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
中间件核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

12|案例:如何实现蓝绿发布?

你好,我是丁威。
前面,我们讲了服务的注册与发现机制,它是微服务体系的基石,这节课,我想聊聊微服务的另外一个重要课题:服务治理。
随着微服务应用的不断增加,各个微服务之间的依赖关系也变得比较复杂,各个微服务的更新、升级部署给整个服务域的稳定性带来很大挑战。怎么以不停机的方式部署升级微服务呢?
这就是我们这节课的任务,我们来看看如何在生产环境用蓝绿发布来满足不停机升级的要求

设计背景

在进行技术方案的设计之前,我们先来了解一下生产环境的基本部署情况,如下图所示:
用户在面向用户端(下文通称 C 端)下单后,C 端订单系统需要远程调用订单域中的“创建订单“接口。同时,订单域、运单域相关服务都需要调用基础服务域,进行基础数据的查询服务。
从这里也可以看出,基础服务的稳定运行对整个微服务体系至关重要。那如何确保基础服务域不受版本的影响,始终能够提供稳定可控的服务呢?

设计方案

我们公司为了解决这个问题实现了蓝绿发布。那什么是蓝绿发布呢?
蓝绿发布指的是在蓝、绿两套环境中分别运行项目的两个版本的代码。但是在进行版本发布时只更新其中一个环境,这样方便另一个环境快速回滚。
接下来我们看一下蓝绿发布的基本流程。
如果系统采取蓝绿发布,在下一个版本(base-service v1.2.0)发布之前,会这样部署架构:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了在生产环境中实现蓝绿发布的重要性和具体操作方法。随着微服务应用的增加,更新、升级部署给整个服务域的稳定性带来挑战。文章首先强调了基础服务的稳定运行对整个微服务体系的重要性,然后讨论了如何通过蓝绿发布来实现不停机升级微服务,以确保基础服务域不受版本影响,始终能够提供稳定可控的服务。文章详细介绍了蓝绿发布的基本流程,包括在蓝、绿两套环境中分别运行项目的两个版本的代码,并通过流量切分算法实现流量的切换和回滚。此外,还介绍了在Dubbo服务调用中如何通过路由选择和标签路由机制实现蓝绿发布的流量切分和选择。通过本文的介绍,读者可以了解到蓝绿发布在微服务系统中的重要性,以及如何在生产环境中应用蓝绿发布来实现微服务的稳定升级。整体而言,本文通过详细介绍蓝绿发布的实现流程和技术细节,为读者提供了在微服务系统中实现稳定升级的重要思路和方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《中间件核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • dudu-benny
    听完蓝绿发布模式 有点像spring cloud gateway 的动态路由策略 结合nacos的动态配置策略 进行 配置分类进行路由分发 也能达到蓝绿发布的效果 不知道这样理解对不对

    作者回复: 是的,蓝绿发布本质上就是路由选择。

    2022-07-30归属地:上海
    3
  • 算法成瘾者
    蓝绿发布时,也要保留default 默认版本的服务,让没接入考虑的服务使用该服务。 服务入口处蓝绿染色,层层传递 tag的过程和调用链传递traceId有点像

    作者回复: 正解,其实技术思想是相通的。

    2022-08-29归属地:上海
    2
  • 郭刚
    如果只是java代码的发布,我觉得是可以这么做,如果数据库上有加字段,加表的操作,这种是不是就不适用了?

    作者回复: 其实只要原先代码能正常运行,其实就不受影响,因为我们要知道,蓝绿发布,就是两套业务在同时运行,也就是说两条运行路径都是正确的,都是满足具体业务逻辑的,都能最终实现业务流程的完整性,新业务是对旧业务的优化,慢慢可以替换老业务。

    2022-09-08归属地:上海
  • 胡淘尘
    如果升级服务时有修改定时调度的代码逻辑,如何在蓝绿发布的过程中保证兼容性?对定时任务的服务还有哪些注意事项呢?

    作者回复: 其实这个是否兼容关系不大,我们可以理解为两个版本 v1、v2,其中v2为新版本,这个时候v1处理的数据还是原先的逻辑,走的数据还是原先的模式,而v2是新方式,这两个都是正常的业务,都是正确的数据。 当然,目前现在调度领域讲究一种新的设计思路:定时调度与业务逻辑分开,通常调度器只触发任务,具体的业务调度逻辑,我们会定义为rpc接口(dubbo),这样定时任务领域的蓝绿机制,就会转移到dubbo的蓝绿机制上。 不知这样,有解决你的疑问没,欢迎继续交流。

    2022-07-25归属地:上海
    3
  • 蓝绿需要多套环境成本较高

    作者回复: 嗯,对头,一般需要蓝绿的场景都是一些直接面向用户C端系统,而且有时候也存在启用蓝绿的目的是希望能无缝发布并支持快速回退。

    2022-07-14
  • open!?
    蓝绿发布 如果流量走蓝绿两套会有不一样的结果 那就不能蓝绿发布了吧 。 想问一下 上面写着RPC会带上标签依次调用 比如 链路是A1 B1 C1 如果只升级了B1 切换为B2 但RPC标签会导致调用链为A1 B2 C2吧 ?C如果没升级岂不是会调用到老的。。
    2022-11-29归属地:浙江
  • 公号-技术夜未眠
    采用蓝绿发布策略,数据库升级发布需要注意些什么?
    2022-07-11
    3
  • 雨落~紫竹
    为什么不通过nginx 代理的方式 对新旧版本所在容器的流量进行限制和切换呢 运维层可以做到 不需要代码层去干 增加开发量
    2022-07-11
    2
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部