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

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

3天内不再提示

微服务架构下的3种部署策略

jf_78858299 来源:JAVA旭阳 作者:JAVA旭阳 2023-04-07 15:26 次阅读

前言

不知道大家有了解过你们公司的软件产品是如何部署的么?采用的什么部署策略?其实在软件开发生命周期中,部署是非常关键的一环,你需要考虑多方面的因素,如何保证你部署对用户无感知?如何把影响范围控制到最小?如何出现问题快速的实现回滚?

现在的大多数应用程序都是云原生、微服务的方式。例如,淘宝,它就是由许许多多的子服务组成的。服务数量越多,意味着出现问题的可能性更大。那么部署的策略极为关键,高效部署的期望达成的目标有如下几点:

  1. 零停机
  2. 快速部署
  3. 客户对新版本的快速反馈
  4. 出现问题容易回滚

那么本文和大家分享3种微服务部署比较常见的3种部署策略,滚动部署、蓝绿部署和金丝雀部署。

滚动部署

上图显示了部署模式: 旧版本以蓝色显示 ,新版本在集群中的每个服务器上 以绿色显示

在滚动部署中,应用程序的新版本逐渐替换旧版本。实际部署发生在一段时间内。在此期间,新旧版本将共存,不会影响功能使用和用户体验。此过程可以更轻松地回滚与旧组件不兼容的任何新组件。

优点:

  1. 减少停机时间 :滚动部署允许以增量方式部署更新,从而减少应用程序的整体停机时间。这是因为应用程序在部署过程中对用户仍然可用。
  2. 更好的风险管理 :通过逐步更新一部分服务器,滚动部署可以实现更好的风险管理。如果在更新期间出现任何问题,可以及早检测到并在将更新推广到所有服务器之前缓解这些问题。
  3. 提高可靠性 :滚动部署可以通过降低广泛故障的风险来帮助提高应用程序的可靠性。由于更新是针对一部分服务器推出的,因此可以在问题影响整个系统之前检测并解决问题。
  4. 简化回滚 :如果在部署过程中出现问题,滚动部署可以更轻松地回滚更新。由于更新是增量部署的,回滚到以前的版本只需要回滚已更新的服务器子集。

缺点:

  1. 复杂性: 滚动部署的设置和管理可能很复杂,尤其是对于具有许多服务器的大型应用程序。它需要仔细规划和协调,以确保以正确的顺序推出更新,并及时更新所有服务器。
  2. 更长的部署时间 :滚动部署可能需要比其他部署策略更长的时间才能完成,因为更新是逐步推出的。这可能会导致更长的部署时间,这可能不适合对正常运行时间有严格要求的应用程序。
  3. 增加资源使用 :滚动部署可能需要更多资源,因为更新会在部署到所有服务器之前先部署到一部分服务器。这可能会导致资源使用量增加和成本增加。
  4. 兼容性问题的风险 :滚动部署会增加在不同服务器上运行的不同版本的应用程序之间出现兼容性问题的风险。这可以通过在推出更新之前彻底测试应用程序情况的兼容性来缓解。

蓝绿部署

在蓝绿部署中,有两个相同的环境(或资源集)用于部署和测试新版本的软件。一个环境被认为是“蓝色”环境,而另一个被认为是“绿色”环境。

当前版本的软件在蓝色环境中运行,新版本在 绿色环境中进行部署和测试 。一旦新版本在绿色环境中被认为稳定且功能齐全,流量可以从蓝色环境切换到绿色环境,使新版本成为当前版本。

这种方法的优点是它最大限度地降低了部署新版本软件可能导致的停机或错误的风险。如果在部署或测试过程中出现问题,可以快速切换回蓝色环境,而不会对用户造成任何干扰。这使得蓝绿部署成为需要高可用性和正常运行时间的公司的热门选择。

优点:

  1. 停机时间最短 :蓝绿部署允许零停机更新,因为新版本的应用程序在切换到蓝色环境之前部署到绿色环境,这可以导致停机时间最少。
  2. 降低风险 :由于新版本的应用部署到绿色环境,部署过程中出现的任何问题都与绿色环境隔离,降低了大范围故障的风险。
  3. 简化回滚 :如果部署过程中出现问题,很容易回滚到以前的版本,因为蓝色环境仍然运行以前的版本。
  4. 提高可靠性 :由于蓝色和绿色环境相同,蓝绿部署可以帮助确保应用程序可靠和稳定。

缺点:

  1. 复杂性增加 : 蓝绿部署的设置和管理可能很复杂,尤其是对于具有许多组件的大型应用程序。它需要仔细规划和协调,以确保正确设置绿色环境,并确保从蓝色环境到绿色环境的无缝切换。
  2. 增加资源使用 :运行两个相同的环境可能需要更多资源,这会导致成本增加。
  3. 更长的部署时间 : 蓝绿可能需要更长的部署时间,因为新版本的应用程序需要先部署到绿色环境,然后才能切换到蓝色环境。
  4. 配置漂移的风险 :由于两个相同的环境同时运行,如果更改一个环境而不更改另一个环境,则存在配置漂移的风险。通过使用自动化和配置管理工具来确保环境保持相同,可以减轻这种风险。

金丝雀部署

金丝雀部署就像蓝绿部署,只是它风险更小。你无需一步从蓝色切换到绿色,而是使用一种 分阶段的方法

通过金丝雀部署,您可以在生产基础设施的一小部分中部署新的应用程序代码。一旦应用程序被签署发布,只有少数用户被路由到新版本上,这样可以最大限度地减少任何影响。

在没有错误报告的情况下,新版本可以逐步推广到基础架构的其余部分。

优点:

  1. 降低风险 : 金丝雀部署可以降低风险,因为新版本的应用程序被推出到一小部分用户或服务器,允许在问题影响更广泛的受众之前检测和缓解任何问题。
  2. 早期反馈 : 金丝雀部署提供一小部分用户对新版本应用程序的早期反馈,这有助于在向更广泛的受众推出之前识别问题并改进应用程序。
  3. 提高可靠性 :金丝雀部署有助于提高应用程序的可靠性,确保在问题影响更广泛的受众之前及早发现并解决任何问题。
  4. 受控推出 :金丝雀部署允许受控推出新版本的应用程序,这有助于确保推出顺利并且不会导致任何意外问题。

缺点:

  1. 复杂性增加 :金丝雀部署的设置和管理可能很复杂,尤其是对于具有许多组件的大型应用程序。它需要仔细规划和协调,以确保正确设置金丝雀版本并且无缝推出。
  2. 增加资源使用 :运行两个版本的应用程序可能需要更多资源,这会导致成本增加。
  3. 更长的部署时间 : 金丝雀部署可能需要更长的时间才能部署,因为新版本的应用程序需要在向更广泛的受众推出之前进行测试和监控。
  4. 金丝雀超载的风险 :如果金丝雀子集太小或不能代表更广泛的受众,它可能会因流量或使用而超载,这可能会扭曲结果并影响应用程序的整体性能。

总结

总而言之,没有适用于所有情况的单一“最佳”部署策略,因为不同的方法可能更适合不同的场景、团队和应用程序。比如我们公司就是采用的停机部署,虽然提起来有点low,但是我们是TO B业务,这种方式成本最低,怎么简单怎么来。

总的来说,最佳部署策略将取决于多种因素,包括应用程序的规模和复杂性、团队的规模和专业知识、所需的风险和停机时间级别、资源和基础设施的可用性以及其他特定考虑因素给相关组织和应用程序。

重要的是要不断评估和试验不同的部署策略,以找到最适合你的团队和你的应用程序的策略,并且需要随着需求的变化,去不不断调整迭代你的部署策略,这才是正道。

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

    关注

    0

    文章

    596

    浏览量

    27314
  • 架构
    +关注

    关注

    1

    文章

    506

    浏览量

    25429
  • 微服务器
    +关注

    关注

    0

    文章

    11

    浏览量

    8091
收藏 人收藏

    评论

    相关推荐

    微服务架构分布式事务解决方案 —— 阿里GTS

    摘要: 本文将深入和大家探讨微服务架构,分布式事务的各种解决方案,并重点为大家解读阿里巴巴提出的分布式事务解决方案----GTS。该方案中提到的GTS是全新一代解决微服务问题的分布式
    发表于 03-16 11:14

    一行代码,保障分布式事务一致性—GTS:微服务架构分布式事务解决方案

    可用集群,可以弹性扩张,可以接收高并发的客户端请求。可以支持跨机房部署,支持同城容灾和两地三中心容灾。任何异常情况的保证高可用。自动回滚策略 当有微服务调用失败时,GTS
    发表于 06-05 19:14

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

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

    微服务优势_微服务架构的好处与不足

    微服务是用一组小服务的方式来构建一个应用,服务独立运行在不同的进程中,服务之间通过轻量的通讯机制(如RESTful接口)来交互,并且服务可以
    发表于 02-23 11:24 4381次阅读

    微服务架构与实践基础篇

    微服务架构中,应用程序由多个服务组成,每个服务都是高度自治的独立业务实体,可以运行在独立的进程中,不同的服务能非常容易地
    的头像 发表于 04-10 14:23 4202次阅读
    <b class='flag-5'>微服务</b><b class='flag-5'>架构</b>与实践基础篇

    什么是微服务架构_微服务架构的优缺点及应用

    什么是微服务架构 简单地说,微服务是系统架构上的一设计风格, 它的主旨是将一个原本独立的系统拆分成多个小型
    的头像 发表于 06-02 10:03 1.7w次阅读
    什么是<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>_<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>的优缺点及应用

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

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

    微服务架构的特点_微服务架构适用场景

     微服务架构是一项在云中部署应用和服务的新技术。
    的头像 发表于 05-17 17:28 5030次阅读

    微服务软件架构应用研究综述

    自2014年,微服务架构概念经Martin Flower提出以来,受到广泛关注,为更好了解微服务架构风格,本文首先分析、梳理了软件架构的发展
    发表于 05-26 09:26 2次下载

    微服务架构简介和优势

    微服务是小型的独立服务,可以独立演进并单独部署,以支持持续集成和持续交付。微服务架构促进开发和部署
    的头像 发表于 11-30 15:41 1625次阅读
    <b class='flag-5'>微服务</b><b class='flag-5'>架构</b>简介和优势

    什么是微服务架构

    在Medium,我们的技术堆栈始于2012年的单片Node.js应用程序。我们已经构建了几个卫星服务,但我们还没有制定一个系统地采用微服务架构策略。随着系统变得越来越复杂并且团队不断
    的头像 发表于 02-24 11:15 1308次阅读
    什么是<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>?

    springcloud微服务架构

    和可扩展的微服务应用。 微服务架构通过将一个大型应用拆分成一系列小型的、独立可部署服务来提供解决方案。每个
    的头像 发表于 11-23 09:24 1135次阅读

    docker微服务架构实战

    随着云计算和容器化技术的快速发展,微服务架构在软件开发领域中变得越来越流行。微服务架构将一个大型的软件应用拆分成多个小型的、独立部署
    的头像 发表于 11-23 09:26 607次阅读

    设计微服务架构的原则

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

    微服务架构与容器云的关系与区别

    微服务架构与容器云密切相关又有所区别。微服务将大型应用拆分为小型、独立的服务,而容器云基于容器技术,为微服务提供构建、发布和运行的平台。区别
    的头像 发表于 10-21 17:28 134次阅读