0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

微服务如何让用户切换到新的版本

jf_ro2CN3Fa 来源:芋道源码 2023-06-25 14:45 次阅读

在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。目前有很多部署发布的技术, 这儿将常见的做一个总结。

上面所说难免有些抽象, 举一个情景例子, 加入你是微博项目负责人员, 现在新版本较原来的老版本有很大的改变, 这设计到服务架构、前端UI等等, 经过测试功能没有障碍, 那么这时候如何让用户切换到新的版本呢?

显而易见, 第一次发布的应用是没有所谓的这个问题的, 这种如何发布的思考只会出现在后面的版本迭代中。

蓝绿发布

蓝绿部署中,一共有两套系统:一套是正在提供服务系统(也就是上面说的旧版),标记为“绿色”;另一套是准备发布的系统,标记为“蓝色”。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。正在对外提供服务的老系统是绿色系统,新部署的系统是蓝色系统。

17adcd76-124a-11ee-962d-dac502259ad0.png

蓝色系统不对外提供服务,用来做啥?

用来做发布前测试,测试过程中发现任何问题,可以直接在蓝色系统上修改,不干扰用户正在使用的系统。

蓝色系统经过反复的测试、修改、验证,确定达到上线标准之后,直接将用户切换到蓝色系统, 切换后的一段时间内,依旧是蓝绿两套系统并存,但是用户访问的已经是蓝色系统。这段时间内观察蓝色系统(新系统)工作状态,如果出现问题,直接切换回绿色系统。

当确信对外提供服务的蓝色系统工作正常,不对外提供服务的绿色系统已经不再需要的时候,蓝色系统正式成为对外提供服务系统,成为新的绿色系统。原先的绿色系统可以销毁,将资源释放出来,用于部署下一个蓝色系统。

蓝绿发布特点

蓝绿部署的目的是减少发布时的中断时间能够快速撤回发布

两套系统没有耦合的时候才能百分百保证不干扰

蓝绿发布注意事项

蓝绿部署只是上线策略中的一种,它不是可以应对所有情况的万能方案。蓝绿部署能够简单快捷实施的前提假设是目标系统是非常内聚的,如果目标系统相当复杂,那么如何切换、两套系统的数据是否需要以及如何同步等,都需要仔细考虑。

当你切换到蓝色环境时,需要妥当处理未完成的业务和新的业务。如果你的数据库后端无法处理,会是一个比较麻烦的问题;

可能会出现需要同时处理“微服务架构应用”和“传统架构应用”的情况,如果在蓝绿部署中协调不好这两者,还是有可能会导致服务停止。

需要提前考虑数据库与应用部署同步迁移 /回滚的问题。

蓝绿部署需要有基础设施支持。

在非隔离基础架构( VM 、 Docker 等)上执行蓝绿部署,蓝色环境和绿色环境有被摧毁的风险。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

项目地址:https://github.com/YunaiV/ruoyi-vue-pro

视频教程:https://doc.iocoder.cn/video/

滚动发布

一般是取出一个或者多个服务器停止服务,执行更新,并重新将其投入使用。周而复始,直到集群中所有的实例都更新成新版本。

17cba0c6-124a-11ee-962d-dac502259ad0.png

发布流程:

相对于蓝绿发布需要一套完备的机器不同, 滚动发布只需要一台机器(这儿这是为了理解, 实际可能是多台), 我们只需要将部分功能部署在这台机器上, 然后去替换正在运行的机器, 如上图, 将更新后的功能部署在Server1 上, 然后Server1去替换正在运行的Server, 替换下来的物理机又可以继续部署Server2的新版本, 然后去替换正在工作的Server2 , 以此类推, 直到替换完所有的服务器, 至此 ,服务更新完成。

滚动发布特点

这种部署方式相对于蓝绿部署,更加节约资源——它不需要运行两个集群、两倍的实例数。我们可以部分部署,例如每次只取出集群的20%进行升级。

回滚困难

滚定发布注意事项

滚动发布没有一个确定可行的环境。使用蓝绿部署,我们能够清晰地知道老版本是可行的,而使用滚动发布,我们无法确定。

修改了现有的环境。

回滚困难 。举个例子,在某一次发布中,我们需要更新100个实例,每次更新10个实例,每次部署需要5分钟。当滚动发布到第80个实例时,发现了问题,需要回滚,这个回滚却是一个痛苦,并且漫长的过程。

有的时候,我们还可能对系统进行动态伸缩,如果部署期间,系统自动扩容/缩容了,我们还需判断到底哪个节点使用的是哪个代码。尽管有一些自动化的运维工具,但是依然令人心惊胆战。

因为是逐步更新,那么我们在上线代码的时候,就会短暂出现新老版本不一致的情况,如果对上线要求较高的场景,那么就需要考虑如何做好兼容的问题。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

项目地址:https://github.com/YunaiV/yudao-cloud

视频教程:https://doc.iocoder.cn/video/

灰度发布

灰度发布, 也叫金丝雀发布。是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,而我们平常所说的金丝雀部署也就是灰度发布的一种方式。

具体到服务器上, 实际操作中还可以做更多控制,譬如说,给最初更新的10台服务器设置较低的权重、控制发送给这10台服务器的请求数,然后逐渐提高权重、增加请求数。一种平滑过渡的思路, 这个控制叫做“流量切分”。

17世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;而当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为“瓦斯检测指标”,以便在危险状况下紧急撤离。

17e469da-124a-11ee-962d-dac502259ad0.png

准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件。

将“金丝雀”服务器部署进服务器中, 测试。

从负载均衡列表中移除掉“金丝雀”服务器。

升级“金丝雀”应用(排掉原有流量并进行部署)。

对应用进行自动化测试。

将“金丝雀”服务器重新添加到负载均衡列表中(连通性和健康检查)。

如果“金丝雀”在线使用测试成功,升级剩余的其他服务器。(否则就回滚)

A/B测试

A/B测试和蓝绿发布、滚动发布以及金丝雀发布,完全是两回事。

蓝绿发布、滚动发布和金丝雀是发布策略,目标是确保新上线的系统稳定,关注的是新系统的BUG、隐患。

A/B测试是效果测试,同一时间有多个版本的服务对外服务,这些服务都是经过足够测试,达到了上线标准的服务,有差异但是没有新旧之分(它们上线时可能采用了蓝绿部署的方式)。

A/B测试关注的是不同版本的服务的实际效果,譬如说转化率、订单情况等。

A/B测试时,线上同时运行多个版本的服务,这些服务通常会有一些体验上的差异,譬如说页面样式、颜色、操作流程不同。相关人员通过分析各个版本服务的实际效果,选出效果最好的版本。18029374-124a-11ee-962d-dac502259ad0.png
责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3750

    浏览量

    64217
  • 机器
    +关注

    关注

    0

    文章

    774

    浏览量

    40667
  • 微服务
    +关注

    关注

    0

    文章

    131

    浏览量

    7322

原文标题:微服务下必须了解的4种部署策略!

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    微服务架构和CQRS架构基本概念介绍

    微服务架构现在很热,到处可以看到各大互联网公司的微服务实践的分享总结。但是,我今天的分享和微服务没有关系,希望可以带给大家一些新的东西。如果一定要说微服务和CQRS架构的关系,那我觉得
    发表于 05-22 09:03

    微服务完整的增删改查功能

    微服务 SpringBoot 20(七):使用JdbcTemplates访问Mysql
    发表于 08-20 14:28

    微服务网关gateway的相关资料推荐

    目录微服务网关 gateway 概述[路由器网关 Zuul 概述]嵌入式 Zuul 反向代理微服务网关 gateway 概述1、想象一下一个购物应用程序的产品详情页面展示了指定商品的信息:2、若是
    发表于 12-23 08:19

    soa和微服务的区别

    微服务究竟是压垮SOA的最后一根稻草,还是能够拯救整个软件工程行业的万能药?人们对于微服务的概念进行了大量的讨论,其中有许多讨论是关于微服务与SOA之间的关联。本文将对soa和微服务
    的头像 发表于 02-07 14:11 1.4w次阅读
    soa和<b class='flag-5'>微服务</b>的区别

    什么是微服务_微服务知识点全面总结

    微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以工作变得更为简便,它可扩展单个
    的头像 发表于 02-07 16:06 1.5w次阅读

    java微服务架构有哪些

    本文首先简单介绍了微服务的概念以及使用微服务所能带来的优势,然后结合实例介绍了几个常见的Java微服务框架。微服务在开发领域的应用越来越广泛,因为开发人员致力于创建更大、更复杂的应用程
    的头像 发表于 02-09 10:34 8606次阅读
    java<b class='flag-5'>微服务</b>架构有哪些

    什么是微服务和容器?微服务和容器的作用是什么

    微服务是将应用程序拆分为多个服务的一种架构类型,这些服务具备构成整个应用程序的细粒度功能。每个微服务将具备针对您的应用程序的不同逻辑功能。与应用程序的所有组件和功能都在单个实例中的单体
    的头像 发表于 01-13 10:54 3.2w次阅读
    什么是<b class='flag-5'>微服务</b>和容器?<b class='flag-5'>微服务</b>和容器的作用是什么

    谷歌提醒用户从Chromium Edge切换到Chrome浏览器

    Google会发出警告,提醒用户切换到Chrome浏览器安全使用扩展。现在看来,Chrome 网络商店并不是谷歌展示弹出窗口要求用户切换到 Chrome 的唯一地方。
    的头像 发表于 02-24 10:11 1874次阅读
    谷歌提醒<b class='flag-5'>用户</b>从Chromium Edge<b class='flag-5'>切换到</b>Chrome浏览器

    Vivox60如何切换系统,如何切换到经典桌面

    如果用户在传统桌面上,想要切换到vivox60的OS系统,具体操作就是打开手机,在手机桌面上找到变形金刚,点击打开,然后点击页面右下角的OS系统图标,切换进入。
    的头像 发表于 02-18 16:44 2.2w次阅读

    T-Mobile建议用户从5G切换到2G以节省电池

    的事情。但T-Mobile似乎并没有从这个例子中吸取教训,反而似乎束手无策。Verizon告诉用户切换到LTE,而T-Mobile的许多支持页面却告诉用户要一直切换到2G。
    发表于 03-05 11:49 1193次阅读

    微服务架构有哪些_微服务架构设计模式

    小伙伴们知道常用的微服务架构框架有哪些吗?上回我们介绍了一些常用的微服务架构设计模式,这次我们就来了解一下一些常用的微服务架构框架吧。
    的头像 发表于 05-17 17:06 2.9w次阅读
    <b class='flag-5'>微服务</b>架构有哪些_<b class='flag-5'>微服务</b>架构设计模式

    微服务架构简介和优势

    微服务是小型的独立服务,可以独立演进并单独部署,以支持持续集成和持续交付。微服务架构促进开发和部署由独立、自主、模块化、自包含单元组成的应用程序或一组功能。每个单位都被分配给拥有它的团队进行改进。采用
    的头像 发表于 11-30 15:41 1625次阅读
    <b class='flag-5'>微服务</b>架构简介和优势

    linux切换到命令行模式

    在Linux中,可以通过以下步骤切换到命令行模式: 打开终端。可以在应用菜单中找到终端或命令行终端。 在终端中输入命令“exit”或“logout”,然后按回车键。 系统会提示您输入管理员密码。输入
    的头像 发表于 11-13 16:47 1679次阅读

    设计微服务架构的原则

    微服务是一种软件架构策略,有利于改善整体性能和可扩展性。你可能会想,我的团队需不需要采用微服务,设计微服务架构有哪些原则?本文会给你一些灵感。文章速览:微服务设计的要素
    的头像 发表于 11-26 08:05 536次阅读
    设计<b class='flag-5'>微服务</b>架构的原则

    何时切换到集成负载开关

    电子发烧友网站提供《何时切换到集成负载开关.pdf》资料免费下载
    发表于 09-25 10:10 0次下载
    何时<b class='flag-5'>切换到</b>集成负载开关