微服务架构是一种众所周知的软件开发方法,它使应用程序由小型独立服务组成,这些服务通过定义明确的应用程序编程接口 (API) 进行通信。当客户开始将其单体应用程序分解为微服务时,他们面临着挑战,因为这需要专门的网络知识才能在内部与其他微服务进行通信。
Amazon Elastic Container Services (Amazon ECS) 客户有多种服务到服务解决方案,但每种解决方案都有一些挑战和复杂性:1) Elastic Load Balancing (ELB) 需要仔细规划基础设施配置以实现高可用性,并产生额外费用基础设施成本。2) 使用Amazon ECS Service Discovery通常需要开发人员编写自定义应用程序代码来收集流量指标并使网络调用具有弹性。3) AWS App Mesh等服务网格解决方案在 Amazon ECS 之外运行,尽管服务之间具有高级流量监控和路由功能。
今天,我们宣布全面推出Amazon ECS Service Connect,这是一种新功能,可简化弹性分布式应用程序的构建和操作。ECS Service Connect 提供跨多个 ECS 集群和虚拟私有云 (VPC) 部署的简单网络设置和无缝服务通信。您可以为 ECS 服务通信添加一层弹性,并在不更改应用程序代码的情况下获得流量洞察。
借助 ECS Service Connect,您可以使用AWS Cloud Map提供的命名空间按逻辑名称引用和连接您的服务,并自动在 ECS 任务之间分配流量,而无需部署和配置负载均衡器。503您可以为每个 ECS 服务设置一些安全的流量恢复默认值,例如运行状况检查、错误自动重试和连接耗尽。此外,Amazon ECS 控制台提供易于使用的控制面板和实时网络流量指标,以方便操作和简化调试。
开始使用 Amazon ECS Service Connect
要开始使用 ECS Service Connect,您可以在创建 ECS 集群或在 Cloud Map 中创建一个命名空间时指定一个命名空间。命名空间代表一种构建服务的方式,可以跨越驻留在不同 VPC 中的多个 ECS 集群。属于特定命名空间的所有 ECS 服务都可以与命名空间中的现有服务进行通信,前提是现有的网络级连接。
您还可以在 Amazon ECS 控制台左侧导航窗格中的命名空间中查看 Cloud Map 命名空间列表。当您选择一个命名空间时,它会显示来自两个不同 ECS 集群的具有相同命名空间的服务列表,其中包含数据库服务 ( db-mysql, db-redis) 和后端服务 ( webui, appserver)。
创建 ECS 集群时,您可以在Networking设置的Default namespaces中选择其中一个命名空间。为在AWS Fargate和Amazon EC2实例中运行的所有新 ECS 服务启用 ECS Service Connect 。要启用所有现有服务,您需要使用新版本的 ECS 优化的 Amazon 系统映像 (AMI) 或支持 ECS Service Connect 的新 Fargate 代理重新部署。
或者,您可以通过 AWS 命令??行界面 (AWS CLI) 使用service-connect-default参数和用于服务发现的默认 Cloud Map 命名空间名称简单地创建一个集群。
此命令将代表 AWS 使用命名空间创建 ECS 集群。如果您想使用现有的 Cloud Map 命名空间,只需在此处传递现有命名空间的名称即可。
接下来,让我们使用调用的现有任务定义创建一个服务, webui-svc-cluster 并使用 ECS Service Connect 公开您的 Web 用户界面服务器。要使用 Service Connect,您需要在任务定义中添加端口名称。对于以下命令,端口名称 webui-port 在任务定义中。
在此命令中,portName表示对容器端口的引用,并clientAliases分配端口号和 DNS 名称,覆盖端点中使用的发现名称。每个服务都有一个端点 URL,其中包含协议、DNS 名称和端口。您可以在任务定义或 ECS 服务配置中选择协议和端口名称。例如,端点可以是http://webui:80、grpc://appserver:8080或http://db-redis:8888。
在ECS控制台中,可以看到ECS Service Connect的这个webui配置svc-cluster-2 cluster。
如您所见,您可以跨具有相同clientAlias命名空间名称的不同集群运行相同的工作负载以实现高可用性。ECS Service Connect 将智能地将流量负载均衡到 ECS 任务。要连接到在不同 ECS 集群中运行的服务,您需要为需要相互通信的所有 ECS 服务指定相同的命名空间名称。ECS Service Connect 将使您的服务可被同一命名空间中的所有其他服务发现。
使用可观察性数据提高服务弹性
您可以使用 ECS Service Connect 可观察性功能收集流量指标。默认情况下,对于每个 ECS 服务,您可以看到健康和不健康端点的数量,以及入站和出站流量。
ECS 服务连接支持 HTTP/1、HTTP/2、gRPC 和 TCP 协议。因此,您可以收集请求数、HTTP 错误数和平均调用延迟。对于 gRPC 和 TCP,您可以看到活动连接总数。所有这些指标都通过自定义日志路由推送到Amazon CloudWatch或其他 AWS 分析服务
在Advanced菜单中,您可以发布 ECS Service Connect Agent 日志,以便在出现问题时帮助调试。
这些指标仅在 CloudWatch 控制台的原始界面中可见。使用CloudWatch控制台时,切换到原来的界面,可以看到ECS分组下的“discovery name”和“target discovery name”的额外指标维度。
默认设置为您提供了构建弹性应用程序的起点,您可以使用 AWS 管理控制台或专用 ECS API 微调参数以限制故障、延迟峰值和网络波动对您的应用程序行为的影响。
现已推出 Amazon ECS Service Connect 已在所有商业区域推出,但中国除外,该地区提供 Amazon ECS。ECS Service Connect 在AWS CloudFormation、 AWS CDK、 AWS Copilot和AWS Proton中得到完全支持,用于基础设施预置、代码部署和服务监控。要了解更多信息,请参阅Amazon ECS Service Connect 开发人员指南。我的同事 Hemanth AVS(高级容器专家 SA)和 Satya Vajrapu(高级 DevOps 顾问)准备了一个实践研讨会来演示 ECS Service Connect 的示例。参加 AWS re:Invent 2022 时,加入Amazon ECS 的 CON303 网络、服务网格和服务发现。试一试,请将反馈发送到AWS re:Post for Amazon ECS或通过您常用的 AWS 支持联系人。撰写,云灿妮,Channy Yun 是 AWS 的首席开发倡导者,热衷于帮助开发人员在最新的 AWS 服务上构建现代应用程序。他本质上是一个务实的开发人员和博主,喜欢社区驱动的学习和技术共享,这将开发人员汇集到全球 AWS 用户组。他的主要主题是开源、容器、存储、网络和安全以及物联网。在 Twitter 上关注他@channyun。