

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 割接阶段
<a name="cutover-stage"></a>

迁移存储数据的组件时，您需要考虑数据一致性是否是关键要求。如果是，则可能需要在开始割接过程之前锁定源环境（如数据库锁）。锁定数据库可确保源环境中没有新事务。但是，锁定可能需要更长的停机时间。

割接通常包括以下几个阶段：
+ **摄取冻结** - 将本地应用程序和数据摄取冻结到数据库。这样可以确保应用程序的本地版本在割接期间不会收到任何新的事务或数据。
+ **备份** - 对本地系统进行最终备份。如有必要，您可以在紧急情况下使用该备份进行回滚。
+ **数据同步** - 完成本地和目标（云）环境之间的最终数据同步。
+ **路由更改** - 将用户路由到云环境（例如，更新 DNS 记录或更改负载均衡器目标）。
+ **测试** - 在将迁移标记为完成之前，测试并验证一切是否正常。

## 割接方法
<a name="cutover-approach"></a>

有两种切换方法需要考虑： all-at-once一种方法或一种分阶段的方法。选择最佳割接方法的关键是了解您的业务需求和技术限制。本部分概述了两种方法。

### All-at-once 方法
<a name="all"></a>

如果你采用 all-at-once这种方法，那么你只需轻按一下开关即可切断整个解决方案。例如，可以通过更新 DNS 或更换负载均衡器来实现这一点。然后，所有用户和实时流量将立即使用新系统。如果由于潜在的主机名冲突、许可证问题或域身份验证限制而无法让新系统上线，这种方法就非常有用。因为时间至关重要，所以重点在于何时或由谁来请求故障恢复。我们建议您的 all-at-once方法计划包括广泛的性能测试，并在适用的情况下包括回归测试，以便您可以验证应用程序的功能和非功能特性。

### 分阶段割接（金丝雀部署）
<a name="phased"></a>

分阶段割接涉及在规定的时间段内逐步割接。这种方法包括持续监控和检查，以验证当前系统能否承受负载，以及每个系统组件是否按预期运行。分阶段割接有助于降低潜在割接问题的风险，因为您可以根据反馈调整系统性能。如果发现关键问题，还可以轻松回滚任何更改。

### 选择正确的方法
<a name="right"></a>

要选择正确的方法，请确定以下几点：
+ 属于同一移动组的相关应用程序和服务
+ 可在本地和迁移应用程序之间使用的通用数据来源
+ 可将部分负载重定向到不同端点的应用程序和基础设施

如果您的应用程序无法容忍数据源和应用程序服务器之间延迟的增加，则这清楚地表明需要 all-at-once采取某种方法。在这种情况下，您可以将所有应用程序资源（服务器和数据库）割接在一起，以免影响性能。

在分阶段转换中，您可以将构成应用程序的服务器和服务的一定比例从整体上拆分出来，然后切换到其 AWS 余的服务器和服务保留在本地。然后，根据负载均衡或 DNS 策略将客户端流量路由到这两个环境。分阶段割接可帮助您最大限度地减少对用户的影响，使受割接影响的用户数量最少。如果能确定影响，就可以相应地调整服务器和服务的百分比。但是，分阶段割接方法依赖于底层应用程序支持该方法的能力。我们建议您问自己以下问题：
+ 应用程序是否有多个层（前端、后端、数据库），由可拆分的弹性服务器对或服务器组组成？
+ 应用程序是否通过负载均衡器进行访问？负载均衡器是否支持将流量路由到 AWS 网络和本地网络？
+ 应用程序服务器能否迁移以 AWS 容忍数据库或其他后端依赖项的延迟。如果将数据库切换到 AWS，则留在本地的服务器或服务能否继续按要求运行和执行？

与回滚功能相比，能够将一定比例的用户发送到新迁移的服务器， AWS 同时保持现有的本地容量，这具有关键优势。 all-at-once由于迁移服务器和现有服务器相混合，服务于应用程序，且负载分散在不同服务器之间，因此一旦出现问题，恢复起来既快又简单。在大多数情况下，只需要更改负载均衡器、DNS 规则或策略即可。分阶段转换方法还允许您逐步增加负载 AWS，这使应用程序团队能够评估应用程序的性能，并在转移满负荷之前进行所需的更新或更改。

选择是最好一次切换一个应用程序或一堆依赖的应用程序，还是使用分阶段切换服务器和服务的增量方法，都不太可能成为一个 one-size-fits-all决定。我们通常看到客户采用以下方法：
+ 能够容忍一段停机的开发和测试环境将受益于该 all-at-once方法的简单性和较低的工作量。
+ 相比之下，分阶段方法更复杂、更耗时，但通常对停机时间的要求更低，回滚选项也更快。因此，分阶段方法最常用于业务关键型生产工作负载。

我们建议您在割接更改窗口前花点时间了解您的源系统。通过在早期规划阶段投入更多时间，您可以支持各种流程，如割接准备和迁移后验证。迁移到服务器时，客户可以更改其服务器的 IP 地址 AWS。在这种情况下，要避免的关键因素是在应用程序中使用硬编码的 IP 地址。我们建议您全面审视您的源环境，因为它可能同时具有上游或下游依赖项。例如，您有可能对连接到您迁移的服务的其他系统造成问题。值得考虑的是，在开始割接之前，将所有连接转为使用完全限定域名（FQDN）或 DNS 记录是否有价值。

### 何时执行割接
<a name="outside"></a>

一般来说，用户最少的时候是进行割接的最佳时机，因为对业务的影响最小。但是，这需要与割接窗口期间支持团队的可用性保持均衡。您需要支持团队，帮助其排查和解决潜在问题。同样重要的是，要考虑割接的日期和时间以及利益相关者的准备情况。如果您的任何利益相关者没有做好准备，没有在预定日期和时间在场，那么割接就可能会面临延误的风险。

### 割接前可以测试的内容
<a name="outside"></a>

如果迁移方法允许，最佳做法是在割接窗口之前执行功能和非功能测试。例如，您可以利用负载测试工具来验证新环境是否在割接窗口前进行了适当配置。通常，此阶段的测试不会造成中断，因为 AWS 环境不提供实时流量。

### 割接前无法测试的内容
<a name="outside"></a>

由于与其他应用程序的依赖关系，可能无法测试生产中发生的所有情况。在这种情况下，应记录潜在风险、计划如何识别风险以及测试失败时团队将采取的相应缓解措施。

### 运营准备情况审查
<a name="outside"></a>

在将应用程序移交给之前 AWS，我们建议您进行操作准备情况审查。在此阶段，您需要评估测试的完整性，验证团队监控和获取警报的能力，并确认利益相关者了解如何支持和维护工作负载。这可能需要与业务和技术团队合作。有关运营准备情况的更多信息，请参阅文档中Well-Architect [AWS ed的 AWS Well-Architected Tool 框架](https://aws.amazon.com//architecture/well-architected/)*卓越运营支柱*。 AWS 

## 回滚
<a name="rollback"></a>

在某些条件下，可能需要进行迁移回滚。为了应对可能出现的回滚，我们建议您制定一个包括以下内容的回滚计划：
+ 定义的检查点，如果满足某些预定义的标准，则在割接期间启动回滚
+ 管理回滚和处理数据的回滚策略
+ 一个联络点，由其决定是向前修正还是向后回滚迁移

## 在割接过程中或没有新数据的情况下回滚
<a name="during"></a>

如果您和您的利益相关者决定在不更改任何数据的情况下执行回滚，则回滚方法会很简单，例如，恢复本地实例，然后通过修改负载均衡器或 DNS 配置来重定向流量。

## 使用更改后的数据回滚
<a name="changed"></a>

如果在成功割接后启动了回滚，并且您的应用程序已收到新的事务和数据，则您可能需要将数据从云环境恢复到本地环境。在这种情况下，我们建议您考虑以下方法：
+ **故障转发方法-** 由于迁移后的数据库成为主数据库，因此您的本地数据库在切换后可能会过时。 AWS 您可以使用 [AWS Database Migration Service (AWS DMS)](https://aws.amazon.com//dms/) 来设置故障转发数据库，该数据库会将数据复制到新的本地数据库。如果出现任何问题， AWS DMS 会将您的应用程序回滚到指定的故障转发数据库，而不是陈旧的本地数据库。
+ **双写策略** - 在这种情况下，您的应用程序逻辑必须同时允许写入新旧数据库。
+ **本机备份和还原** - 要评估还原所需的时间，可在割接前阶段使用下层环境（即非生产环境）执行备份和还原测试。