蓝绿部署和 Drupal - 您真正了解多少?
已发表: 2019-07-23Blue Green Deployment 是部署策略的支柱之一,它克服了传统应用程序部署方法的局限性。 你对蓝绿部署了解多少? Drupal 中的蓝绿部署是如何实现的?
是的,你没有看错。 必须让您的应用程序脱机进行更新或在启动新版本时是一项艰巨的任务,也是一项真正的痛苦。 确实,您可以通过预定的停机时间来缓解这种情况,但这不会让客户满意。 有些网站实际上每停机一分钟就会损失数千美元! 部署或升级您的应用程序是否应该是您损失的真正原因?
了解为什么蓝绿部署是减少停机时间和降低应用程序部署中涉及的其他风险的最佳策略。 了解有关蓝绿部署和 Drupal 的更多信息。
什么是蓝绿部署?
蓝绿部署是一种通过在运行两个不同应用程序版本的两个相同环境之间转移或移动流量来发布应用程序的技术。
简而言之,有一个应用程序版本,在生产中我们称之为“蓝色版本”。 然后,有一个路由器用于将流量路由到应用程序。 现在你需要另一个版本。 添加了更多好东西的“绿色版本”,待部署。 但是,您还希望确保在进行此部署时,用户仍然可以查看您的应用程序、按下按钮或做任何他想做的事情,而您的应用程序不会停机! 更像是秘密部署“绿色版本”,而“蓝色版本”同时处理所有流量,然后最终交换连接。

凭借近乎零停机时间的发布和回滚功能,蓝绿部署的基本思想是在运行两个不同应用程序版本的两个相同环境之间转移流量。 虽然应用程序的当前版本由蓝色环境表示,但绿色环境正在运行不同的版本。
为什么是蓝绿部署?
部署过程自动化的主要挑战之一是切换本身,即将应用程序从测试的最后阶段转移到实时阶段。 并且必须迅速解决这个问题,以尽量减少任何类型的停机时间。 这正是蓝绿部署所做的。 有两个生产环境(本质上尽可能相同),在任何给定的时间点,其中之一是实时的。 当您准备发布新版本时,您会在其他非实时环境中进行所有测试。 一旦您准备好开始,您所要做的就是切换路由器,以便您的所有流量都指向您的最新版本,而其他环境就会闲置。
此外,蓝绿部署提供了最重要的功能之一,即快速回滚。 假设如果您的最新版本出现任何问题,您只需切换回路由器即可。 虽然当故障环境存在时丢失的事务可能仍然存在问题,但您也可以将其设计为这样一种方式,即您的两个环境都接收事务,一个作为另一个的备份。
如何蓝绿部署?
现在我们了解了蓝绿部署的两种环境,让我们看看实现相同的一些最佳实践。
基于 DNS 交换的负载平衡
请记住,在切换环境时,让您的域最终指向不同的服务器。 使用负载平衡,而不是转到 DNS 记录并在 DNS 管理界面中进行更改。
更改 DNS 记录的问题只会导致较长的流量跟踪。 这意味着虽然您的一些用户仍将使用旧环境,但您甚至无法完全控制您的流量路由到哪里。
但是,负载平衡器将允许您立即设置新服务器,而不必依赖 DNS 机制。 这样,您就可以完全控制流量,并且可以绝对确保所有流量都路由到新环境。
滚动更新
不要一次切换所有服务器。 改为执行滚动更新。 也就是说,不要一次从蓝色服务器切换到绿色服务器,而是在集成环境中工作。 添加一台新服务器,淘汰一台旧服务器。 重复直到每台新服务器就位。 这将大大减少您的停机时间!
环境监测
虽然监控实时环境很明显,但您不希望因不监控其他环境而措手不及。 是的,对其他环境的监控不太重要。 但是,由于相同的环境可以充当两种状态,因此您将需要一种更简单的方法来在这两种状态之间切换警报。 为两个环境报告设置不同的 API 令牌,或在环境角色更改/切换时以编程方式更改环境的警报策略。
自动化
手动操作集只会增加您的工作量。 相反,为切换过程中的每个操作编写脚本。 自动化切换过程将更快、更轻松、更安全地实施蓝绿部署。
Drupal 网站的蓝绿部署
问题
- 在代码部署期间,Drupal 需要运行数据库更新才能运行,这是一个主要问题,因为 Drupal 更新将网站设置为维护模式,并且您的用户会看到这个漂亮的白屏。

如果部署失败,考虑到数据库架构可能已被修改,则只能通过从转储中恢复数据库来进行回滚。 这意味着停机!

解决方案:蓝绿部署!
让我们看一下使用 Drupal 实施蓝绿部署的一些基础设施概述。 Drupal 中的任何类型的 ops 都需要 Nginx 和一个 php 服务器(主要运行 Drupal),我们需要一个数据库、一个文件存储、一些缓存,并且堆栈的设计方式是高度可用的。
使用 Blue Green Deployment,您需要使用新代码库部署新堆栈,并复制所有数据库和之前代码库中的不同状态,最好使用 Drush。

一旦设置了两个不同的堆栈,就必须独立于生产堆栈对临时堆栈进行测试。 基本上,您需要您的用户访问堆栈(生产堆栈)并测试部署的网站版本。 当另一个版本(暂存堆栈)准备就绪时,您只需要翻转版本。 现在用户被定向到新堆栈,旧版本可供测试。
使用 Docker 进行蓝绿部署
在 Drupal 中部署并不容易。 虽然您必须确保已部署代码、处理 Composer 依赖项、最新架构更新以及清除所有缓存,但您还需要确保“响应式网站”已启动并运行。 如果出现问题并且部署失败会发生什么? 你回滚吗? 还是停止部署?
您正在寻找的短语是 Blue Green Deployment
在 Drupal 部署期间,Docker 确保了应用程序之间的轻松转换,并使构建和运行相同版本的不同版本变得容易。 在EC2实例上,总会有一组凸起的蓝色和绿色的docker容器,nginx充当反向代理服务器。 使用 Docker 的蓝绿色部署允许用户构建一个在两个不同环境中并行运行的 Drupal 网站。
使用 AWS 进行蓝绿部署
虽然从历史上看,蓝绿部署并不是在本地部署软件的首选,因为它涉及高成本和复杂性,但容器已经彻底改变了这种看法。
容器简化了蓝绿部署的采用,因为它们在环境之间切换时具有简单的封装和一致的行为。 要更改容器的配置,您只需更新其 dockerfile 并重建和重新部署容器,而不是更新软件。
当您更新现有 Amazon ECS 服务时,Amazon ECS 会执行这些滚动更新。 ecs blue green 部署的滚动更新涉及将容器的现有版本替换为最新版本。 Amazon ECS 在更新期间添加或删除的容器数量是通过调整服务部署期间允许的最大和最小健康任务数量来控制的。更新后,服务的任务定义将使用最新版本的容器映像进行更新, Amazon ECS 会自动开始用最新版本的容器替换旧版本的容器。

使用 AWS ECS 进行蓝绿部署还将提供优化优势,因为您不会绑定到同一组资源。 也就是说,当应用程序的性能范围从一个版本更改为另一个版本时,您只需启动具有优化资源(数量可以更少或完全不同的资源集)的新环境。
AWS 中的蓝绿色部署也非常适合持续集成和部署工作流,通过允许部署自动化考虑对现有环境的更少依赖来检查其复杂性。
该解决方案允许用户轻松管理 Web 平台的部署和可扩展性,而不会浪费任何时间。 此部署有助于配置高可用性环境,该环境将毫无问题地运行 Drupal 网站。
