我想问你是否有一个涉及Amazon Elastic Container Service(ECS)和应用程序负载均衡器(ALB)的微服务架构(基于Spring Boot),服务发现是由平台自动执行的,还是你需要的?特殊机制(如尤里卡或领事)?
从文档(ECS和ALB)中不清楚您是否提供了此功能。
答案 0 :(得分:5)
我已经与亚马逊支持团队讨论了这个问题,他们回复了以下内容: “......仅在ALB上使用AWS ECS上的服务发现[..]。
所以,这里可以有三个选项: 1)使用ALB / ELB作为服务端点(ALB的目标组,使用ELB时单独的ELB)
2)使用Route53和DNS进行服务发现
3)将Consul.io等第三方产品与Nginx结合使用。
让我谈谈这些选择中的每一个。
对于此选项,我们的想法是在每个服务前面使用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并在ECS容器实例上运行简单代理[2]。 当您的容器停止/启动时,代理将更新Route53 DNS记录。它创建了一个SRV记录。同样,一旦容器停止,它将删除所述记录。
此方法的另一部分是Lambda函数,该函数对ECS容器实例执行运行状况检查 - 并在发生故障时将其从R53中删除。
您可以在我们的博客文章[3]上阅读有关此方法的更多信息。
因此,总而言之 - 在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之间分配流量