如何使用AWS部署工具处理数据库迁移

时间:2015-02-15 09:17:38

标签: amazon-web-services elastic-beanstalk amazon-cloudformation aws-opsworks aws-code-deploy

Amazon Web Services根据您的需求提供许多持续部署和管理工具,例如Elastic Beanstalk,OpsWorks,Cloud Formation和Code Deploy。基本思想是在零停机时间内促进代码部署和升级。它们还有助于使用AWS资源管理最佳架构实践。

为简单起见,我们假设一个基本架构,你有一个2撕裂结构;负载均衡器后面的应用程序服务器集合,然后是使用多区域RDS DB的持久层。

一组实例(app服务器)的实际代码升级很容易理解。对于非常简单的概述,AWS服务会依次关闭每个节点,从而关闭连接,以便不使用相关实例。

但是,我无法理解如何管理数据库升级。假设我们从应用程序的版本1.0.0到2.0.0,并且需要更改数据库结构。通常,您将使用像Flyway这样的脚本或库来执行升级。但是,如果有一组服务器需要升级,则需要不同数据库结构的机群中存在1.0.0和2.0.0应用程序。

我需要了解这是如何实现(高级别)才能知道执行数据库迁移的最佳方式/时间。我猜他们可以通过两种方式实现这一目标,但我很难看到他们如何做到这一点并允许1.0.0和2.0.0保持数据而不会丢失。

如果他们使用第一个应用程序节点升级迁移数据库结构,同时创建1.0.0的缓存版本。连接到1.0.0应用程序的用户使用缓存版本的数据库保持不变,连接到2.0.0应用程序的用户将持久保存到新迁移的数据库。迁移所有应用程序节点后,缓存的数据将合并到数据库中。

他们似乎不太可能这样做,因为合并会非常复杂,但我看不到另一种方式。任何指针/帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

一旦您的应用程序基础架构进入多个应用程序节点,这是一个常见问题。在过去,你可以让你的应用程序离线“维护窗口”,在此期间你可以:

  • 使用“系统维护,即将推出”页面替换应用程序。
  • 执行数据库迁移(架构和/或数据)
  • 部署新的应用程序代码
  • 将申请重新上线

2015年,真的好几年来这种做法是不可接受的。您的用户希望全天候运营,因此必须有更好的方法。当然,答案是Database Refactorings的一系列模式。

始终牢记的基本概念是假设您必须维护应用程序的两个并发版本,并且这两个版本之间可能存在无重大更改 。这意味着您有一个当前正在生产的当前应用程序(v1.0.0)和计划部署的(v2.0.0)。这两个版本必须在同一模式上工作。在所有应用程序服务器上完全部署v2.0.0之后,您就可以开发v3.0.0,它允许您完成任何最终的数据库更改。