适用于 Amazon ECS 蓝绿部署的 Service Connect 资源
使用 Service Connect 进行蓝绿部署时,需要配置特定组件,以便在蓝色服务修订和绿色服务修订之间启用正确的流量路由。本节将介绍所需组件及其配置。
架构概述
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 记录、重新配置负载均衡器或单独部署服务发现更改,因为服务网格可以处理这一切任务。
流量路由和测试
Service Connect 可为蓝绿部署提供高级流量路由功能,包括基于标头的路由和用于测试场景的客户端别名配置。
测试流量标头规则
在蓝绿部署期间,可以配置测试流量标头规则,将特定请求路由到绿色(新)服务修订以进行测试。如此一来,便可在完成部署之前使用受控流量验证新版本。
Service Connect 使用基于标头的路由来识别测试流量。默认情况下,如果未指定自定义规则,Service Connect 会为基于 HTTP 的协议识别 x-amzn-ecs-blue-green-test
标头。当请求中存在此标头时,Service Connect 代理会自动将请求路由到绿色部署进行测试。
测试流量标头规则可用于:
-
将带有特定标头的请求路由到绿色服务修订
-
使用一部分流量测试新功能
-
在完全割接流量之前验证服务行为
-
实施金丝雀测试策略
-
在类似生产的环境中执行集成测试
基于标头的路由机制可与现有的应用程序架构无缝配合。客户端服务无需了解蓝绿部署过程,只需在发送测试请求时包含相应的标头,Service Connect 代理会自动处理路由逻辑。
有关如何配置测试流量标头规则的信息,请参阅《Amazon Elastic Container Service API Reference》中的 ServiceConnectTestTrafficHeaderRules。
标头匹配规则
标头匹配规则定义了蓝绿部署期间路由测试流量的标准。可以配置多个匹配条件来精确控制将哪些请求路由到绿色服务修订。
标头匹配支持:
-
标头值精确匹配
-
标头存在性检查
-
基于模式的匹配
-
多个标头组合
使用案例示例包括将带有特定用户代理字符串、API 版本或功能标志的请求路由到绿色服务进行测试。
有关标头匹配配置的更多信息,请参阅《Amazon Elastic Container Service API Reference》中的 ServiceConnectTestTrafficHeaderMatchRules。
蓝绿部署的客户端别名
客户端别名为蓝绿部署期间的服务提供了稳定的 DNS 端点。它们可在蓝色服务修订于绿色服务修订之间实现无缝的流量路由,而无需客户端应用程序更改其连接端点。
蓝绿部署期间,客户端别名需满足以下条件:
-
为客户端连接保持一致的 DNS 名称
-
支持服务修订之间的自动流量切换
-
支持渐进式流量迁移策略
-
通过将流量重定向到蓝色修订来提供回滚功能
可以为不同的端口或协议配置多个客户端别名,允许复杂的服务架构在部署期间保持连接。
有关客户端别名配置的更多信息,请参阅《Amazon Elastic Container Service API Reference》中的 ServiceConnectClientAlias。
流量路由的最佳实践
使用 Service Connect 实施蓝绿部署的流量路由时,请考虑以下最佳实践:
-
从基于标头的测试开始:在切换所有流量之前,使用测试流量标头规则通过受控流量验证绿色服务。
-
配置运行状况检查:确保蓝色服务和绿色服务都配置了适当的运行状况检查,防止将流量路由到运行状况不佳的实例。
-
监控服务指标:在部署期间跟踪两个服务修订的关键性能指标,以便尽早发现问题。
-
规划回滚策略:配置客户端别名和路由规则,以便在检测到问题时能够快速回滚到蓝色服务。
-
测试标头匹配逻辑:在将标头匹配规则应用于生产部署之前,先在非生产环境中对其进行验证。
Service Connect 蓝绿部署工作流
了解 Service Connect 如何管理蓝绿部署过程有助于有效实施部署并进行问题排查。以下工作流展示了不同组件在部署的每个阶段的交互方式。
部署阶段
Service Connect 蓝绿部署会经历几个不同的阶段:
-
初始状态:蓝色服务处理 100% 的生产流量。命名空间中的所有客户端服务都通过 Service Connect 中配置的逻辑服务名称连接到蓝色服务。
-
绿色服务注册:绿色部署启动后,将在 AWS Cloud Map 中注册为“测试”端点。客户端服务中的 Service Connect 代理会自动接收生产和测试路由配置。
-
测试流量路由:包含测试流量标头(例如
x-amzn-ecs-blue-green-test
)的请求由 Service Connect 代理自动路由到绿色服务。生产流量继续流向蓝色服务。 -
流量转移准备:成功测试后,部署过程准备进行生产流量转移。蓝色服务和绿色服务均保持注册状态且运行正常。
-
生产流量转移:Service Connect 配置更新为将生产流量路由到绿色服务。无需更新客户端服务或更改 DNS 即可自动执行此操作。
-
烘焙时间段:生产流量转移后,蓝色服务修订和绿色服务修订同时运行的持续时间。
-
蓝色服务注销:成功进行流量转移并验证后,蓝色服务从 AWS Cloud Map 中注销并终止,从而完成部署。
Service Connect 代理行为
Service Connect 代理在管理蓝绿部署期间的流量方面起着至关重要的作用。了解其行为有助于设计有效的测试和部署策略。
蓝绿部署期间的关键代理行为:
-
自动路由发现:代理自动从 AWS Cloud Map 发现生产和测试路由,无需重新启动应用程序或更改配置。
-
基于标头的路由:代理检查传入的请求标头,并根据配置的测试流量规则将流量路由到相应的服务修订。
-
运行状况检查集成:代理仅将流量路由到运行正常的服务实例,自动将运行状况不佳的任务从路由池中排除。
-
重试和断路:代理提供内置的重试逻辑和断路功能,可提高部署期间的恢复能力。
-
指标收集:代理收集蓝色服务和绿色服务的详细指标,以便在部署期间进行全面监控。
服务发现更新
使用 Service Connect 进行蓝绿部署的关键优势之一是自动处理服务发现更新。传统的蓝绿部署通常需要复杂的 DNS 更新或负载均衡器重新配置,但 Service Connect 可以透明地管理这些更改。
部署期间,Service Connect 会处理:
-
命名空间更新:Service Connect 命名空间自动包含蓝色服务端点和绿色服务端点,并带有相应的路由规则。
-
客户端配置:命名空间中的所有客户端服务均自动接收更新的路由信息,无需重新启动或重新部署。
-
逐步过渡:服务发现更新会逐渐安全地进行,确保不会中断正在进行的请求。
-
回滚支持:如果需要回滚,Service Connect 可以快速恢复服务发现配置,将流量路由回蓝色服务。