

# 适用于 Amazon ECS 蓝绿部署、线性部署和金丝雀部署的 Service Connect 资源
<a name="service-connect-blue-green"></a>

使用 Service Connect 进行蓝绿部署时，需要配置特定组件，以便在蓝色服务修订版和绿色服务修订版之间启用正确的流量路由。本节将介绍所需组件及其配置。

## 架构概述
<a name="service-connect-blue-green-architecture"></a>

Service Connect 通过自动注入到 Amazon ECS 任务中的托管附加代理，构建了服务发现和服务网格功能。这些代理会处理路由决策、重试和指标收集，而 AWS Cloud Map 则负责提供服务注册表后端。部署已启用 Service Connect 的服务时，该服务会在 AWS Cloud Map 中自行进行注册，客户端服务会通过命名空间发现它。

在标准的 Service Connect 实现中，客户端服务会连接到逻辑服务名称，附加代理则负责处理流向实际服务实例的路由。在蓝绿部署中，此模型会扩展为包含通过 `testTrafficRules` 配置实现的测试流量路由。

在蓝绿部署期间，以下关键组件协同工作：
+ **Service Connect 代理**：服务之间的所有流量均通过 Service Connect 代理传递，该代理会根据配置做出路由决策。
+ **AWS Cloud Map 注册**：蓝色部署和绿色部署都注册到 AWS Cloud Map，但绿色部署最初注册为“测试”端点。
+ **测试流量路由**：Service Connect 配置中的 `testTrafficRules` 决定了如何识别测试流量并将其路由到绿色部署。这是通过**基于标头的路由**实现的，其中请求中的特定 HTTP 标头会将流量定向到测试修订。默认情况下，如果未指定自定义规则，Service Connect 会为基于 HTTP 的协议识别 `x-amzn-ecs-blue-green-test` 标头。
+ **客户端配置**：命名空间中的所有客户端都会自动接收生产和测试路由，但只有与测试规则相匹配的请求才会发送到绿色部署。

这种方法的强大之处在于它处理了迁移期间服务发现的复杂性。随着流量从蓝色部署转移到绿色部署，所有连接和发现机制都会自动更新。无需更新 DNS 记录、重新配置负载均衡器或单独部署服务发现更改，因为服务网格可以处理这一切任务。

## 流量路由和测试
<a name="service-connect-blue-green-traffic-routing"></a>

Service Connect 可为蓝绿部署提供高级流量路由功能，包括基于标头的路由和用于测试场景的客户端别名配置。

### 测试流量标头规则
<a name="service-connect-test-traffic-header-rules"></a>

在蓝绿部署期间，可以配置测试流量标头规则，将特定请求路由到绿色（新）服务修订版以进行测试。如此一来，便可在完成部署之前使用受控流量验证新版本。

Service Connect 使用**基于标头的路由**来识别测试流量。默认情况下，如果未指定自定义规则，Service Connect 会为基于 HTTP 的协议识别 `x-amzn-ecs-blue-green-test` 标头。当请求中存在此标头时，Service Connect 代理会自动将请求路由到绿色部署进行测试。

测试流量标头规则可用于：
+ 将带有特定标头的请求路由到绿色服务修订版
+ 使用一部分流量测试新功能
+ 在完全割接流量之前验证服务行为
+ 实施金丝雀测试策略
+ 在类似生产的环境中执行集成测试

基于标头的路由机制可与现有的应用程序架构无缝配合。客户端服务无需了解蓝绿部署过程，只需在发送测试请求时包含相应的标头，Service Connect 代理会自动处理路由逻辑。

有关如何配置测试流量标头规则的信息，请参阅《Amazon Elastic Container Service API 参考》**中的 [ServiceConnectTestTrafficHeaderRules](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ServiceConnectTestTrafficHeaderRules.html)。

### 标头匹配规则
<a name="service-connect-header-match-rules"></a>

标头匹配规则定义了蓝绿部署期间路由测试流量的标准。可以配置多个匹配条件来精确控制将哪些请求路由到绿色服务修订版。

标头匹配支持：
+ 标头值精确匹配
+ 标头存在性检查
+ 基于模式的匹配
+ 多个标头组合

使用案例示例包括将带有特定用户代理字符串、API 版本或功能标志的请求路由到绿色服务进行测试。

有关标头匹配配置的更多信息，请参阅《Amazon Elastic Container Service API 参考》**中的 [ServiceConnectTestTrafficHeaderMatchRules](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ServiceConnectTestTrafficHeaderMatchRules.html)。

### 蓝绿部署的客户端别名
<a name="service-connect-client-alias-blue-green"></a>

客户端别名为蓝绿部署期间的服务提供了稳定的 DNS 端点。它们可在蓝色服务修订版与绿色服务修订版之间实现无缝的流量路由，而无需客户端应用程序更改其连接端点。

蓝绿部署期间，客户端别名需满足以下条件：
+ 为客户端连接保持一致的 DNS 名称
+ 支持服务修订版之间的自动流量切换
+ 支持渐进式流量迁移策略
+ 通过将流量重定向到蓝色修订来提供回滚功能

可以为不同的端口或协议配置多个客户端别名，允许复杂的服务架构在部署期间保持连接。

有关客户端别名配置的更多信息，请参阅《Amazon Elastic Container Service API 参考》**中的 [ServiceConnectClientAlias](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ServiceConnectClientAlias.html)。

### 流量路由的最佳实践
<a name="service-connect-blue-green-best-practices"></a>

使用 Service Connect 实施蓝绿部署的流量路由时，请考虑以下最佳实践：
+ **从基于标头的测试开始**：在切换所有流量之前，使用测试流量标头规则通过受控流量验证绿色服务。
+ **配置运行状况检查**：确保蓝色服务和绿色服务都配置了适当的运行状况检查，防止将流量路由到运行状况不佳的实例。
+ **监控服务指标**：在部署期间跟踪两个服务修订版的关键性能指标，以便尽早发现问题。
+ **规划回滚策略**：配置客户端别名和路由规则，以便在检测到问题时能够快速回滚到蓝色服务。
+ **测试标头匹配逻辑**：在将标头匹配规则应用于生产部署之前，先在非生产环境中对其进行验证。

## Service Connect 蓝绿部署工作流
<a name="service-connect-blue-green-workflow"></a>

了解 Service Connect 如何管理蓝绿部署过程有助于有效实施部署并进行问题排查。以下工作流展示了不同组件在部署的每个阶段的交互方式。

### 部署阶段
<a name="service-connect-deployment-phases"></a>

Service Connect 蓝绿部署会经历几个不同的阶段：

1. **初始状态**：蓝色服务处理 100% 的生产流量。命名空间中的所有客户端服务都通过 Service Connect 中配置的逻辑服务名称连接到蓝色服务。

1. **绿色服务注册**：绿色部署启动后，将在 AWS Cloud Map 中注册为“测试”端点。客户端服务中的 Service Connect 代理会自动接收生产和测试路由配置。

1. **测试流量路由**：包含测试流量标头（例如 `x-amzn-ecs-blue-green-test`）的请求由 Service Connect 代理自动路由到绿色服务。生产流量继续流向蓝色服务。

1. **流量转移准备**：成功测试后，部署过程准备进行生产流量转移。蓝色服务和绿色服务均保持注册状态且运行正常。

1. **生产流量转移**：Service Connect 配置更新为将生产流量路由到绿色服务。无需更新客户端服务或更改 DNS 即可自动执行此操作。

1. **烘焙时间段**：生产流量转移后，蓝色服务修订版和绿色服务修订版同时运行的持续时间。

1. **蓝色服务注销**：成功进行流量转移并验证后，蓝色服务从 AWS Cloud Map 中注销并终止，从而完成部署。

### Service Connect 代理行为
<a name="service-connect-proxy-behavior"></a>

Service Connect 代理在管理蓝绿部署期间的流量方面起着至关重要的作用。了解其行为有助于设计有效的测试和部署策略。

蓝绿部署期间的关键代理行为：
+ **自动路由发现**：代理自动从 AWS Cloud Map 发现生产和测试路由，无需重新启动应用程序或更改配置。
+ **基于标头的路由**：代理检查传入的请求标头，并根据配置的测试流量规则将流量路由到相应的服务修订版。
+ **运行状况检查集成**：代理仅将流量路由到运行正常的服务实例，自动将运行状况不佳的任务从路由池中排除。
+ **重试和断路**：代理提供内置的重试逻辑和断路功能，可提高部署期间的恢复能力。
+ **指标收集**：代理收集蓝色服务和绿色服务的详细指标，以便在部署期间进行全面监控。

### 服务发现更新
<a name="service-connect-service-discovery-updates"></a>

使用 Service Connect 进行蓝绿部署的关键优势之一是自动处理服务发现更新。传统的蓝绿部署通常需要复杂的 DNS 更新或负载均衡器重新配置，但 Service Connect 可以透明地管理这些更改。

部署期间，Service Connect 会处理：
+ **命名空间更新**：Service Connect 命名空间自动包含蓝色服务端点和绿色服务端点，并带有相应的路由规则。
+ **客户端配置**：命名空间中的所有客户端服务均自动接收更新的路由信息，无需重新启动或重新部署。
+ **逐步过渡**：服务发现更新会逐渐安全地进行，确保不会中断正在进行的请求。
+ **回滚支持**：如果需要回滚，Service Connect 可以快速恢复服务发现配置，将流量路由回蓝色服务。