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

12
亚马逊网络服务(Amazon Web Services)提供了多种持续部署和管理工具,如Elastic Beanstalk、OpsWorks、Cloud Formation和Code Deploy,具体取决于您的需求。基本思想是在零停机时间情况下促进代码部署和升级。它们还有助于使用AWS资源管理最佳架构实践。
为了简单起见,假设您拥有一个二层结构的基本架构,在负载均衡器后面有一组应用程序服务器,然后使用多区域RDS DB进行持久性存储。
实际上,在一组实例(应用程序服务器)中进行代码升级很容易理解。对于非常简单的概述,AWS服务依次升级每个节点,将连接传递,以便不使用有问题的实例。
但是,我不明白如何管理DB升级。假设我们正在从应用程序的1.0.0版本升级到2.0.0版本,并且需要更改DB结构。通常,您会使用脚本或类似Flyway的库执行升级。但是,如果有一组要升级的服务器,则存在这样一个点:整个组都存在1.0.0和2.0.0应用程序,每个应用程序都需要不同的DB结构。
我需要了解如何实现此操作(高级别),以知道执行DB迁移的最佳方式/时间。我猜他们可以通过几种方式来实现这一点,但我无法看到他们如何在不丢失数据的情况下同时让1.0.0和2.0.0持续存在。
如果他们使用第一个应用程序节点升级迁移DB结构,并同时创建1.0.0的缓存版本,则连接到1.0.0应用程序的用户将使用DB的缓存版本,连接到2.0.0应用程序的用户将使用新迁移的DB。一旦所有应用程序节点都被迁移,缓存数据将合并到DB中。
似乎不太可能他们可以这样做,因为合并将是相当复杂的,但我看不到其他方法。任何指针/帮助将不胜感激。

1
你找到了一个好的答案吗? - jkerak
1个回答

3
这是在应用基础设施进入多个应用节点后遇到的常见问题。在旧时代,您可以将应用离线进行“维护窗口”,在此期间您可以:
  • 使用“系统维护,马上回来”页面替换应用程序。
  • 执行数据库迁移(模式和/或数据)
  • 部署新的应用程序代码
  • 将应用程序重新上线
在2015年,实际上已经有好几年了,这种方法是不可接受的。您的用户希望24/7操作,因此必须有更好的方法。当然,答案是一系列数据库重构模式。
始终要记住的基本概念是假设您必须同时维护两个并发版本的应用程序,并且这两个版本之间不能有任何破坏性变化。这意味着您有一个当前应用程序(v1.0.0)目前正在生产中,还有一个(v2.0.0)即将部署。这两个版本必须在同一架构上工作。一旦v2.0.0在所有应用程序服务器上完全部署,您就可以开发v3.0.0,以允许您完成任何最终的数据库更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接