关于部署:应用部署初探3个主要阶段4种常见模式

42次阅读

共计 3181 个字符,预计需要花费 8 分钟才能阅读完成。

利用部署是一个将软件提供给用户的过程,通常蕴含配置环境、装置及测试等步骤。现如今,大部分企业在部署新的应用程序时,会至多自动化其中一些步骤。应用程序部署的策略会影响该利用的性能、稳定性以及运行速度,因而有时会在向所有人提供更新之前,先对一小部分用户进行测试。
 

软件开发和用户体验的古代规范要求开发人员继续地更新他们的我的项目。部署和集成曾经成为日常操作——一个古代的应用程序每天都须要部署。这就是为什么当初领有一个无效的部署技术比以往任何时候都更重要。
 

当下,企业谋求更为灵便和可扩大的零碎,因而微服务架构、云基础设施变得随处可见。灵便的架构意味着诸多开发团队会关涉其中,这会给部署带来挑战。
 

本文将介绍利用部署过程的几个次要阶段以及不同的利用部署模式。
 

利用部署的次要阶段

后期筹备 / 打算阶段

在打算筹备阶段,以下步骤非常重要:

  • 确认合作方: 软件开发的过程中会波及到不同的团队。部署前应该告知所有合作方,以尽量减少开发、运维和平安团队之间的摩擦。
  • 列出第三方工具: 确定部署流程中所须要的所有工具以及要求,这能够帮忙你确保所有合作方都晓得如何无效地应用它们并且最大限度地缩小问题的产生。
  • 设置测试环境: 在正式公布新产品前,肯定要测试软件
  • 设计清晰的部署步骤: 与团队亲密沟通以确保部署流程清晰明了
  • 创立回滚打算: 如果新版本呈现重大的问题能够启用这一打算。渐进式交付策略让无缝主动回滚部署成为可能。
  • 设置性能监控指标: 罕用的指标有内存、CPU 使用率以及查问响应工夫。你能够应用这些根本指标和自定义 KPI 来掂量部署的有效性。在渐进式交付中,你甚至能够应用这些指标来主动确定部署是否胜利。
     

测试阶段

测试阶段能够在部署之前验证软件是否牢靠。在这一阶段中,须要思考以下方面:

  • 编写单元测试: 其目标是测试软件的其中某个局部,以验证其独立于其余局部的行为是否能够失常运行。当后果与需要统一时,单元测试通过,否则失败。
  • 在 CI 流程中集成测试: 将单元测试集成到共享代码仓库中以自动化构建和验证每个局部。在部署之前实现这个步骤能够更轻松地修复和移除 bug。
  • 在 staging 环境中部署测试: 模仿生产环境,并应用它来测试更新、代码及其他方面,以确保软件按预期运行。
  • 运行端到端的测试: 从头到尾测试应用程序的工作流程,过一遍它能够执行的操作,查看它是否能够与其余组件(如网络连接、硬件等)一起失常运行。
  • 验收测试: 这是测试流程的最初一步,须要与相干方或实在用户一起验证软件。他们的反馈能够帮忙决定软件是否生产就绪。
  • 冒烟测试: 创立一个专门的测试套件,在部署之后在生产中运行,以验证刚刚公布的软件没有缺点。
     

部署及公布阶段

利用部署的最终阶段,包含以下方面:

  • 部署到生产环境: 将更新推送到生产环境中,用户能够应用它们。
  • 监控产品性能: 依据 KPI 来监测产品的性能,查看 HTTP errors 和数据库性能等。
  • 监控环境衰弱: 借助监控工具来辨认软件环境相干的潜在问题,比方操作系统、数据库系统以及编译器等。
  • 执行自动化回滚: 借助冒烟测试和指标来掂量公布是否胜利并且当存在问题时主动回滚到上一个版本。
  • 跟踪日志: 借助日志取得软件运行的可见性,比方理解软件如何运行在基础设施上,如何考察谬误并辨认潜在的平安危险。
  • 记录公布的版本和正文: 保留对产品进行批改时创立的新版本的正本,这有助于放弃一致性。
     

利用部署模式

金丝雀公布

金丝雀公布能够逐个公布新个性,而非残缺的更新版本。开发人员让旧版本处于沉闷状态,并比拟更新前后的实例性能。此外,金丝雀发布会先将新性能提供给一小部分用户应用,依据小范畴的用户反馈对产品进行必要的调整。
 

以下是金丝雀公布的根本步骤:

  • 开发人员上传新版本(假如其为 Version B)到服务器。
  • 次要用户群体仍旧定向到 Version A,与此同时,小局部用户开始应用 Version B,进而开发人员能够监控新版本的性能并进行改良。
  • 对 Version B 进行必要的调整之后,开发人员就会将大部分流量定向到更新结束的实例中。此时团队开始测量性能并将其与旧版本进行比照。
  • 当 Version B 曾经足够稳固,开发人员就会切断 Version A 并将流量齐全重定向到更新后的代码库中。
     

要保障金丝雀公布的胜利,开发人员必须设置清晰的性能指标,原始版本和金丝雀版本(更新版本)应该同时在雷同的条件下部署,以更主观地进行剖析。
 

金丝雀公布的劣势之一是能够最大限度地缩小宕机工夫并且防止新版本中存在潜在的问题。 此外,通过在小局部用户中测试个性,开发人员能够在对更多用户产生影响之前发现并修复问题,这有助于确保新性能或更新不会对用户体验产生负面影响。
 

这种部署模式也存在缺点——非常耗时。金丝雀的测试和部署是分几个阶段进行的,须要工夫进行彻底的监控和评估。正因为如此,不是所有用户都能马上从新的性能和降级中受害。
 

正如许多同时运行两个版本的部署策略一样,开发人员须要牢记并确保技术栈和数据库的兼容性。
 

蓝 / 绿部署

蓝 / 绿部署是指同时部署两个利用版本, 以后版本(蓝)和新版本(绿)在不同的环境中运行 ,并且只有一个版本是实时运行的。当绿版本进行测试时,蓝版本持续运行,反之亦然。两个版本都能够处于沉闷状态,但只有一个是公开的(通常是蓝版本)。
 

当测试实现、新部署就绪,就能够平安地切换流量到绿版本。尔后,蓝环境能够保留下来以执行回滚操作或在将来的更新中应用此前的性能。
 

蓝 / 绿部署简直打消了宕机工夫并容许即时回滚。 蓝 / 绿环境的隔离能够爱护实时部署在测试阶段免受 bug 的影响。尽管这种部署策略的危险较低,但施行老本较高,因为必须笼罩两个环境进行操作,会减少存储空间、计算能力及硬件等老本。为了在蓝绿环境之间无缝切换,开发团队还须要保障数据格式和存储的兼容性。
 

滚动部署

应用滚动部署,开发人员能够同时上传几个版本——沉闷的版本数量被称为窗口大小(window size)。开发者能够 1 次只上传 1 个实例(即窗口大小设置为 1)或在集群中同步更新部署应用程序。为了更快且更平安地部署,开发人员经常应用容器技术。容器利用部署包含 Docker 和 Kubernetes,它们是隔离更新版本、启用和禁用服务以及跟踪变动的常用工具。
 

滚动部署提供了灵活性,并缩小了停机工夫, 因为它只在新版本筹备好之后再将流量重定向到新版本。 同时,它也升高了部署危险,因为更新存在的缺点只影响到无限的用户。然而这一部署办法回滚速度较慢,因为它须要一个渐进的办法。
 

另外,新的部署必须向下兼容,因为它们须要与旧版本共存。如果应用程序须要会话继续存在,那么确保负载平衡反对粘性会话也非常重要。
 

影子(Shadow)部署

影子部署蕴含两个沉闷的平行版本,将传入申请 fork 到以后版本,而后将它们发送到新版本。这种办法有助于测试新性能如何在不影响流量的状况下解决生产负载。当新版本满足性能和稳定性要求后,即可平安上线利用。
 

尽管这种模式非常业余,设置起来也简单,但它打消了对生产的影响,利用流量复制来测试应用影子数据的 bug。测试后果是高度精确的,因为它们应用生产负载来创立模仿事实条件。影子部署被认为是一种低危险的办法,并常常与其余办法相结合,比方金丝雀部署。
 

执行影子部署的步骤:

  • 利用层级的实现: 开发人员编写的函数既能够向应用程序的以后版本也能够向新版本发送输出。输出和输入能够同时解决,也能够在一个队列中异步解决,以取得更高的精度。团队能够抉择在客户端划分输出,在浏览器或挪动设施中设置不同的 API 指标。
  • 基础设施层级的实现: 开发人员配置负载平衡以 fork 格局以及反对两个版本的端点。开发人员须要确保没有反复,应用程序绝不能两次申请雷同的数据。新版本应该从第一版本中接管用户的信息,否则,用户将不得不反复输出领取或注册数据。
  • 影子模式后果评估: 团队须要留神数据的谬误,比拟两个版本的性能,查看新版本是否正确接管旧版本的输出。
正文完
 0