亚马逊网络服务(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中。
似乎不太可能他们可以这样做,因为合并将是相当复杂的,但我看不到其他方法。任何指针/帮助将不胜感激。
为了简单起见,假设您拥有一个二层结构的基本架构,在负载均衡器后面有一组应用程序服务器,然后使用多区域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中。
似乎不太可能他们可以这样做,因为合并将是相当复杂的,但我看不到其他方法。任何指针/帮助将不胜感激。