微服务是一种软件开发的组织和架构方法,它可以加快软件交付周期、增强创新和自主性,提高软件的可维护性和可伸缩、可扩展性,同时也提高了企业开发和发布软件服务的能力。使用微服务架构,软件产品将由多个独立的、可通过 API 进行 交互的服务组成。这些服务将由各个小团队独自负责。 同时微服务之间的调用组成了一个复杂依赖关系图表。现代架构的一个最佳实践是允许服务制定自己的依赖关系来松耦合的组合这些服务,但是这在动态变化的容器环境里会变得复杂起来,因为你需要找到目标服务的连接地址。
如何让服务发现彼此并进行交互,这是微服务架构必须解决的问题。服务发现包括 检查服务的健康状态以及自动发现新服务上线。传统的服务发现方法,如 consul, etcd 或 zoo keeper,都很好地解决了这个问题,但它们需要预配置和维护额外的基础设施或在您的容器或您的实例上安装代理。 之前,为确保服务能够发现并相互连接,您必须配置和运行自己的服务发现系统或将每个服务连接到负载均衡器。 现在,您可以在 ECS 控制台、AWS CLI 或使用 ECS API 中为您的容器化服务启用服务发现。
## Amazon Route 53 服务注册和自动命名 API
Amazon ECS 使用 Route 53 自动命名 API 来创建和管理服务名称注册表。名称会自动映射到一组 DNS 记录,这样您可以使用别名来引用服务,并将此别名自动解析到服务在运行时的终端节点。您可以在服务的任务定义中指定运行状况检查条件,Amazon ECS 将确保仅通过服务查找返回运行正常的服务终端节点。
使用 Amazon ECS 的服务发现功能时,您将按照所使用的 Route 53 资源量以及您的服务所执行的查找查询量付费,包括您创建的每个命名空间。服务运行状况检查不发生额外的费用。有关定价的更多信息,请参阅[](http://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html#service-discovery-pricing)。 现在,使用 AWS Fargate 或 EC2 启动类型及 awsvpc 联网模式的 Amazon ECS 任务均可使用服务发现功能。
_您可以在所有提供 Amazon ECS 和 Amazon Route 53 自动命名服务的 AWS 区域使用 Amazon ECS 服务发现功能,包括美国东部 (弗吉尼亚北部)、美国东部 (俄亥俄)、美国西部 (俄勒冈) 和欧洲 (爱尔兰) 区域。有关 AWS 区域和服务的更多信息,请查看 [](https://amazonaws-china.com/cn/about-aws/global-infrastructure/regional-product-services/)。_
## Amazon ECS服务发现创建和使用
### 服务发现组件
**服务发现命名空间:**共享相同域名的服务的逻辑组,例如 example.com。每个 Route 53 托管区域和每个 VPC 需要一个命名空间。如果您从 Amazon ECS 控制台使用服务发现,则工作流为每个 ECS 集群创建一个私有命名空间。
**服务发现服务**:存在于服务发现命名空间中,由命名空间的服务名称和 DNS 配置组成。它提供了以下核心组件:
* **服务目录**:让您可通过 DNS 或 Route 53 自动命名 API 查找服务,并获取一个或多个可用于连接到该服务的可用终端节点。
**运行状况检查**:执行定期容器级别的运行状况检查。如果终端节点不传递运行状况检查,则会将其从 DNS 路由中删除并标记为不正常。
### 具体操作DEMO演示
_流程是这样的:在ECS创建任务定义模版,使用模版来创建服务,创建服务的过程中会进行服务发现的配置,会调用Route53的API来创建一个命名空间,和对应服务的Endpoint,以及将运行的任务对应的内部IP注册,最后可以在ECS的服务详细信息界面和Route53的Record Sets中查看到结果,消费者调用时直接对Endpoint请求,会到任务的内部IP。_
_这个DEMO是在美东1区来操作的。_
#### 1.在ECS界面创建任务定义模版
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/1-1024x505.jpg)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/1.jpg)
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/2-1024x478.jpg)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/2.jpg)
_\* 注意目前服务发现只支持 awsvpc 模式,连接什么是 awsvpc 请查看这个[](https://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/task-networking.html)。_
#### 2. 创建服务
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/3-1024x579.jpg)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/3.jpg)
#### 3. 下一步,填写网络,安全相关设置后,在服务发现部分如下。选择创建新的私有命名空间,填写服务发现名称以便消费端使用
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/4-1024x728.jpg)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/4.jpg)
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/5-1024x644.jpg)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/5.jpg)
#### 4. 下一步后创建服务
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/6-1024x545.jpg)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/6.jpg)
#### 5. 点击查看服务,可以看到 ECS 这里显示服务在运行,在 ECS 的服务详细信息里,可以看到服务发现的配置信息。
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/7-1024x382.jpg)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/7.jpg)
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/8-1024x363.jpg)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/8.jpg)
* Service discovery endpoint ECS-Service-Discovery.local-1
* Service discovery name ECS-Service-Discovery
* Namespace local-1 (PRIVATE)
#### 6. 找到 Route53 服务,Hosted Zone 的 Record Sets,可以看到服务 endpoint 和对应的两个 Task 的内网 IP 地址。
[](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/9-1024x481.jpg)](https://d2908q01vomqb2.awsstatic-china.com/472b07b9fcf2c2451e8781e944bf5f77cd8457c8/2018/05/02/9.jpg)
_参考文档链接:_
* [](https://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/Welcome.html)
* [](https://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/service-discovery.html):包括服务发现介绍,服务发现注意事项,定价等信息。
_涉及服务背景介绍:_
Amazon Elastic Container Service (Amazon ECS) 是一种高度可扩展的高性能[](https://amazonaws-china.com/cn/containers/)编排服务,支持 [](https://amazonaws-china.com/cn/docker/) 容器,让您可以在 AWS 上轻松运行和扩展容器化应用程序。使用 Amazon ECS,您不需要安装和操作自己的容器编排软件,不需要管理和扩展虚拟机集群,也不需要在这些虚拟机上调度容器。
通过各种简单的 API 调用,您可以启动和停止支持 Docker 的应用程序、查询应用程序的完整状态,并使用 IAM 角色、安全组、负载均衡器、Amazon CloudWatch Events、AWS CloudFormation 模板和 AWS CloudTrail 日志等多种常用功能。
Amazon Route 53 是一种可用性高、可扩展性强的[](https://amazonaws-china.com/cn/route53/what-is-dns/)Web 服务。其旨在为开发人员和企业提供一种非常可靠且经济高效的方式,可以把名称 (例如 www.example.com) 转换为计算机用于互相连接的数字 IP 地址 (例如 192.0.2.1),从而将最终用户路由到 Internet 应用程序。Amazon Route 53 也与 IPv6 完全兼容。
Amazon Route 53 高效地将用户请求连接到 AWS 中运行的基础设施,例如 Amazon EC2 实例、Elastic Load Balancing 负载均衡器或 Amazon S3 存储桶,还可以将用户路由到 AWS 外部的基础设施。您可以使用 Amazon Route 53 配置 DNS 运行状况检查以将流量路由到正常的终端节点,或者独立监控应用程序及其终端节点的运行状况。Amazon Route 53 Traffic Flow 让您可以通过多种路由类型 (包括基于延迟的路由、Geo DNS、临近地理位置路由和加权轮询) 轻松管理全球流量,所有的路由类型都可与 DNS 故障转移进行组合,以实现各种低延迟容错架构。利用 Amazon Route 53 Traffic Flow 简单的可视化编辑器,您可以轻松管理如何将终端用户路由到应用程序的终端节点,无论是在单个 AWS 区域还是在分布于全球的区域都可实现。Amazon Route 53 还提供域名注册功能 – 您可以购买和管理域名(例如 example.com),Amazon Route 53 将自动为您的域配置 DNS 设置。
作者介绍:
郭威
目前在 AWS 负责推广针对初创企业的最佳云计算架构实践。具有近 10 年软件设计研发,存储,容器与云计算方案经验。曾任某跨国外企高级研发经理与售前经理,在广电视频行业,金融行业等方面有丰富的云计算经验。后加入某容器创业公司任产品研发与容器云方案工作。现致力于容器服务与 Devops 等方向的学习与研究。
本文转载自 AWS 技术博客。
原文链接:
https://amazonaws-china.com/cn/blogs/china/amazon-ecs-service-discovery-new-start-method/
更多内容推荐
01|拨云见日——云上架构一点儿也不神秘
2022-09-21
四、容器安全风险分析
2022-05-17
Spring Boot 如何使用 Undertow 容器?超级详细,建议收藏
一文教你学会Spring Boot使用Undertow容器?超级详细,建议收藏
2023-04-21
亚马逊云科技向 Well-Architected Framework 添加容器透镜
AWS在其Well-Architected框架添加了一个新的容器透镜。
37|我该从哪些方向了解云原生领域?
这节课,我会结合自己对云原生产品的实践和总结,带你全面了解云原生,让你未来能够更好地进行技术选型。
2023-03-03
方向:技术演进,到底该怎么思考未来?
从Hadoop,到Spark,到Flink,为什么大数据会有这三代的演进?是因为它们都解决了用户对这玩意儿的核心诉求,那用户对这几个大数据软件的核心诉求是什么?
2022-09-28
36|作为开发者,如何更好地了解 CNCF?
这节课,我将会带你从零开始认识 CNCF,包括它的历史、社区组织形式、项目托管以及职业认证等,让你了解 CNCF 的运作机制,更好地从 CNCF 获取信息。
2023-03-01
容器安全的三大挑战
与任何软件一样,容器化应用程序也可能受到安全漏洞影响,包括错误、身份验证和授权不充分以及配置错误,因此容器安全问题不容忽视。
2022-12-29
阿里云云边一体容器架构创新论文被云计算顶会 ACM SoCC 录用
此次论文入选 ACM SoCC,是阿里云在云原生容器技术领域,拓展服务边界,实现云边协同的又一次创新。
2023-01-17
阿里云云边一体容器架构创新论文被云计算顶会 ACM SoCC 录用
此次论文入选 ACM SoCC,是阿里云在云原生容器技术领域,拓展服务边界,实现云边协同的又一次创新。
2022-10-28
从 0 到 1 上手阿里云服务器 ECS(四)
小白新手,也能轻松上手 容器技术
2022-10-13
谈谈文字两端对齐的 css 问题
文字两端对齐问题还挺常见的,比如说容器内有一段文字,如果不是两端对齐的话,看起来就不是很整齐。还有在一些提交表单界面,表单的标题一般也是两端展示的,比如在做表单的时候,我们一般会设置为文字两端对齐的样式,两个字,三个字,四个字都有可能,比如
2022-07-22
阿里云易立:以增效促降本,容器服务全面进入智能化时代
11月5日,2022杭州 · 云栖大会上,阿里巴巴研究员、阿里云智能云原生应用平台容器技术负责人易立在云原生峰会上发表主题演讲,发布阿里云容器服务全面智能化升级,帮助企业精益用云,以增效促降本,实现IT架构在云上的高质量发展。
2022-11-23
Java—并发容器
Java 提供的基础容器都是线程不安全的,如果并发条件下多个线程同时对一个容器中的数据进行操作,可能会导致各种意想不到的错误。
2022-06-11
小程序视图容器
常用的视图容器类组件:
2022-07-10
加餐 04|谈谈容器云与和 CaaS 平台
在当今容器化呼声越来越高的场景下,容器云平台呼声也是越来越高,这节课我们就简单了解一下CaaS。
2023-01-09
开篇词|30-60K,转型云原生架构师和 SRE 需要哪些能力?
让我们开始从零上手 GitOps,感受云原生工程实践之美吧!
2022-12-12
SAP ABAP Netweaver 容器化的一些前沿性研究工作分享
笔者之前的文章一个15年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害, 回顾了ABAP Netweaver服务器主要的组件。本文咱们就来聊聊ABAP Netweaver容器化这个话题。
2022-07-26
阿里资深架构师熬夜纯手写的 238 页微服务容器化开发实战笔记
在计算机技术日新月异的今天,层出不穷的新技术推动了生产力的发展,也推动了整个社会的进步。软件架构从单体架构到分布式架构,从SOA架构到微服务架构,再到服务网格。数据库从 Oracle包打天下到 MySQL大行其道,再到内存数据库、NoSQL数据库遍地开花。容器编
2022-08-22
推荐阅读
3. Docker 的核心技术(一)
2023-09-26
35|实现:基于 JDK 17、Spring Boot 3、Spring 6 打造云原生 Java 应用
2023-11-17
2. 容器 Serverless
2023-09-27
针对容器层的五种攻击手段
2023-05-03
k8s 中 PV 和 PVC 的生命周期
2023-06-19
Docker 容器安装 Nginx 教程。
2023-08-14
5 人 5 月用容器技术保卫蓝天
2023-05-25
电子书
大厂实战PPT下载
换一换 赵兵 | 知乎 大数据基础架构开发工程师
王国梁 | 腾讯 专家工程师
张颖峰 | 矩阵起源 创始人兼研发负责人
评论