关于Blue-Green部署和Drupal需要了解的一切

有很多人对“DevOps”概念非常感兴趣,当我与其中一些人坐下来讨论时,谈话的方向就转向了许多有趣的方面。

他们开始讨论部署最佳实践,回滚,热部署等。

但是,当有人提到“Blue-Green 部署”时 - 完全沉默。

因此,这给了我一个想法,告诉世界其他地方,对于所有的微服务,原云计算不是什么技术,blue-green部署不是一个银弹,但它是有用的元素。


怎么用?

好问题,你必须提前阅读。


我们对blue-green部署的理解是什么? 

blue-green部署是用于发布软件代码的管理方法。

在blue-green部署中以完全相同的方式配置两个相同的硬件环境,这也称为A / B部署

其中只有一个环境是实时的,其中实时环境为所有生产流量提供服务。例如,如果蓝色当前处于活动状态,则绿色将处于空闲状态,反之亦然。

Blue-green部署通常用于面向消费者的应用程序和具有关键正常运行时间需求的应用程序。新代码将被传递到非活动环境,并在其中进行全面测试。


如何降低风险?

在任何生产层面实现自动化和持续交付都是一个圣杯,避免停机和风险在优先级列表中占据重要位置。蓝绿部署通过消除部署中见证的风险,为您提供实现这些目标的简单方法。

  • 您将永远不会遇到意外错误。

当您在线填写特定的表格时,您填写的所有凭据是什么?您的姓名,电话号码,地址,街道以及可能是您在线购买的银行详细信息。对吗?

您按下“立即付款”按钮并检查“接收垃圾邮件”,但遗憾的是,您的订单无法按照您的要求进行处理。如果您幸运的话,您会收到相当于“应用程序离线以进行维护”的错误消息,您所有的努力和时间都是徒劳的。但是通过blue-green部署,您永远不必担心此维护屏幕。

一次点击就有一个项目列表,一旦点击,您就可以看到您添加的新菜单。这会阻止有关错误屏幕的愤怒电子邮件充斥你的收件箱。

  • 测试生产环境

确保您的预生产环境尽可能接近您的生产环境,这不仅重要,而且必不可少。在blue-green部署的帮助下,这项任务很容易实现。 用户可以在与主流量断开连接时测试任何应用程序。如果他们也愿意,团队也有资格加载测试。

  • 确保流量无缝

客户需求和愿望比以往任何时候都更加全球化,并且不再需要进行部署,尤其是您工作的企业需要全天24小时地运行业务。若是您有面向客户的应用程序,如果他们找不到他们想要的东西,他们可能会将他们的平台切换到其他网站。这意味着销售量和业务量的下降。

Blue-green 部署确保您的流量永不停止。客户可以在不中断的情况下妥善处理订单。这意味着海外员工继续不间断地工作,为公司节省资金。

  • 易于恢复

您可能有时会看到bug和病毒被引入。我们要么花很多钱来修复它,要么不可避免地找到它们并恢复它们。在blue-green部署的帮助下,我们的应用程序的旧版本和更稳定的版本可以立即恢复到联机状态,从而避免了回滚部署的痛苦。

images-deployments.png

资料来源:Martin Fowler

这个过程如何运作?

正如我们所知道的,blue-green部署技术涉及运行两个相同的生产环境,它们以相同的方式配置,因此,让我们假设当前部署处于2.3版本的绿色环境中。将要进行的下一次部署将处于2.4版本的蓝色环境中。

然后对环境进行测试和评估,直到确认其稳定并作出响应。一旦它投入生产,服务器将被重定向,从而成为用户被路由到的新生产环境。

整个设计用于在部署失败或未通过QA的情况下提供快速回滚。当部署失败或发现严重错误时,将启动回滚到绿色环境。修复错误后,将版本重新部署到蓝色环境中,并且流量在稳定的时候被重新路由。

在部署前一版本(即版本2.5)时,部署将切换到绿色环境,并将进行广泛的测试和评估。一旦通过质量评估,交通将改道到绿色区域。

通过这种方式,绿色和蓝色环境定期在活动版本和过渡到下一个版本之间循环。

images-Source-Medium.png

资料来源:Medium 



Blue-Green部署帮助您的Drupal网站

让我们假设您在Drupal的帮助下构建了一个网站,现在您的流量很高。通常用于开发,更新和测试网站(不危及网站的完整性),您可以按照以下步骤操作:

开发:开发过程从开发人员在本地环境中处理新功能,错误修复,主题和配置开始。它可以轻松回滚到上一个开发阶段。

测试:通常,此环境不可用于客户端查看,而是用于测试针对横向主机的开发工作。

暂存:此阶段用于向客户端提交更改以供批准。QA(质量保证)和UAT(用户验收测试)通常在分期阶段进行。

制作:这是网站上可用访问者的实时网站。它包含已被证明可以安全上线的新功能。

正如您所看到的,这个过程可能很长且耗时,维护和构建站点可能会很麻烦,因此blue-green部署会在这些时候拯救您。

它可以提供接近零的停机时间,并提供简单的回滚功能。蓝/绿部署背后的基本思想是在两个相同的环境之间转移流量,这些环境在不同的应用程序中运行不同。

images-Source-NewGenapps.png

资料来源:NewGenapps



您的Drupal网站的一些实现

使用Docker为Drupal网站进行Blue-Green部署

Drupal部署很难。用户必须确保部署代码,提取编译器依赖关系,拉取模式更新,执行方案更新并清除所有缓存。

所有这些都可以保持网站的正常运行并响应用户。但是,如果出现任何问题并且您希望回滚? 是否停止部署? 嗯,没有blue-green部署是它的答案。

Docker可以轻松构建,转移和运行应用程序。在EC2实例上,总是有两个凸起的docker容器“blue”和“green”,而ngnix在同一个实例上作为反向代理。用户可以构建一个在“蓝色”和“绿色”环境中并行运行的Drupal站点,并从MySQL数据库中提供服务。我们在baseimage-docker中安装Apache,PHP和Drupal。


images-Source-Nulab.png

资料来源:Nulab



在AWS Beanstalk中使用Blue-Green部署的Drupal

在ECS的帮助下,用户可以创建任务定义,这与docker-compose.yml文件非常相似。

任务定义是容器的集合,每个容器都有一个名称,Docker映像运行,并且可以选择覆盖图像的入口点和命令。容器定义也是用户可以定义环境变量,端口映射,要安装的卷,内存和CPU分配,以及是否应将特定容器视为必要容器,这是ECS如何知道任务是正常的还是需要重新启动的。

Amazon Web服务解决方案允许用户快速、轻松地管理Web平台的部署和可扩展性。该部署有助于配置无缝运行Drupal网站的高可用性环境。运行Elastic beanstalk外部的DB数据库实例将数据库与环境的生命周期分离,并允许用户从多个环境连接到同一个数据库,从另一个数据库交换一个数据库并执行blue-green部署而不影响数据库。

下图显示了如何在AWS环境中进行green-blue部署。

images-Source-CloudNative.png

资料来源:CloudNative



一些顺利发布的最佳实践

现在我们了解了blue-green部署的工作原理,让我们介绍一些与之相关的最佳实践:

负载平衡

负载平衡可帮助您自动设置新服务器,而不依赖于任何其他机制,而不依赖于DNS机制。DNS记录将始终指向Load Balancer,用户只会修改其后面的服务器。通过这种方式,他们可以绝对确保所有流量都来到新的生产环境,而不是旧的生产环境。

滚动更新

为了避免停机,用户可以执行滚动更新,这意味着您不必在一个截止时间内从所有蓝色服务器切换到所有绿色服务器,而是有资格使用集成环境。这表明,用户可以通过集成环境进行控制,而不是在一次切断中从所有蓝色服务器切换到所有绿色服务器。

监测环境

监测生产环境和非生产环境非常重要。由于相同的环境既可以作为生产环境也可以作为非生产环境,所有您需要的是切换两个状态之间的警报。

自动化

用户可以在切换过程中尽可能多的编写操作脚本,而不是执行一组手动操作。这带来了巨大的好处。该过程变得更快,更容易,更安全并且能够实现自助服务。

云部署

如果您的服务器在云中运行,那么Blue-Green方法有一个有趣的变体,在这种方法中,您可以从零开始创建下一个环境,而不是在两个静态环境之间来回切换。

此过程对于避免服务器变为雪花的危险也很有价值,这些服务器具有唯一的配置集,无需在任何地方记录。一旦这些雪花因某种原因被擦除,你就没有简单的方法来正确地重现它。无论选择什么,保持最新的测试和发布技术,以确保发布顺利是顺利的。


结论

部署是软件开发生命周期中最重要的部分之一,因此所有涉及的活动都应进行彻底的研究和测试,以确保它们完全适合您的系统架构和业务。

在OpenSense实验室,我们有一群Drupal开发人员和专家,他们致力于使用这些工具和服务的技术。现在通过
hello@opensenselabs.com 与我们联系,我们的专家将指导您解决与此主题相关的疑问和问题。