使用应用程序负载均衡器在aws ECS上进行服务发现

时间:2017-10-18 10:11:46

标签: amazon-web-services microservices

我想问你是否有一个涉及Amazon Elastic Container Service(ECS)和应用程序负载均衡器(ALB)的微服务架构(基于Spring Boot),服务发现是由平台自动执行的,还是你需要的?特殊机制(如尤里卡或领事)?

从文档(ECS和ALB)中不清楚您是否提供了此功能。

2 个答案:

答案 0 :(得分:5)

我已经与亚马逊支持团队讨论了这个问题,他们回复了以下内容: “......仅在ALB上使用AWS ECS上的服务发现[..]。

所以,这里可以有三个选项: 1)使用ALB / ELB作为服务端点(ALB的目标组,使用ELB时单独的ELB)

2)使用Route53和DNS进行服务发现

3)将Consul.io等第三方产品与Nginx结合使用。

让我谈谈这些选择中的每一个。

使用ALB / ELB

对于此选项,我们的想法是在每个服务前面使用ELB或ALB目标组。 我们定义了一个Amazon CloudWatch Events过滤器,该过滤器侦听来自AWS CloudTrail的所有ECS服务创建消息并触发Amazon Lambda函数。 此功能标识新服务使用的Elastic Load Balancing负载均衡器(或ALB目标组),并使用Amazon Route 53插入指向它的DNS资源记录(CNAME)。 Lambda函数还处理服务删除,以确保DNS记录反映群集中运行的应用程序的当前状态。

这里的缺点是,如果您使用ELB,它可能会产生更高的成本 - 因为您需要为每项服务使用ELB。它可能不是最简单的解决方案。 如果您想了解更多信息,请点击此处[1]

使用Route53

此方法涉及使用Route53并在ECS容器实例上运行简单代理[2]。 当您的容器停止/启动时,代理将更新Route53 DNS记录。它创建了一个SRV记录。同样,一旦容器停止,它将删除所述记录。

此方法的另一部分是Lambda函数,该函数对ECS容器实例执行运行状况检查 - 并在发生故障时将其从R53中删除。

您可以在我们的博客文章[3]上阅读有关此方法的更多信息。

使用像Consul.io这样的第三方工具在ECS上使用Consul.io这样的工具会起作用 - 但AWS不支持。所以你可以自由使用它,但我们 - 不幸的是 - 不提供支持。

因此,总而言之 - 在AWS ECS上实现服务发现有几种方法 - 我在这里展示的两种使用AWS资源的方式,当然还有使用第三方应用程序的方式。 “

答案 1 :(得分:1)

您在AWS中没有开箱即用的解决方案,尽管可以按照https://aws.amazon.com/es/blogs/compute/service-discovery-an-amazon-ecs-reference-architecture/

中的描述进行一些努力

您也可以安装Zuul + Ribbon + Eureka或Nginx + Consul并使用ALB在Zuul或Nginx之间分配流量