ECS Fargate 跨微服务通信选项

ECS Fargate cross microservice communication options

我一直在研究使用 ECS Fargate 在它们自己的 services/tasks 中连接多个错误服务的不同方法。

通常情况下,如果所有微服务都定义在同一个任务定义中,我们可以只使用具有相应端口的本地 ip,但这意味着我们无法扩展单个微服务。据我所知,当我们将它们分解为多个服务时,有两种 'main' 方式可以启用此通信:

  1. 为每个服务添加一个负载均衡器,并使用负载均衡器public ip 作为从一个服务到另一个服务的单一访问点。

    我对此的问题是:

    一个。所有需要通信的服务是否都需要位于同一个 VPC 中并具有 服务的传入规则设置为负载均衡器的安全组?

    b。假设我们现在已经配置了整个设置,需要在一个微服务代码库中设置一个负载均衡器 public DNS,实现这一点的最佳方法是什么,我猜是某种 terraform 脚本 'assumes' public 将添加到其中的 DNS?

  2. 利用 AWS 服务发现,这意味着我们可以使用简单的内置标识符查询服务。

    我的问题是:

    一个。我们仍然可以将负载均衡器附加到服务并仍然使用服务发现吗?要么 服务发现是否已经配置了底层负载均衡器?

非常感谢您的帮助!

1.a All services in the same VPC and their security groups (SGs)

我假设您正在谈论每个服务都有自己的负载平衡器 (LB) 的情况。由于 LB 是 public,它们可以在 任何 VPC、区域或账户中。

通常会设置 SG,以便服务的传入规则仅允许来自 LB 的 SG 的连接。

1.b DNS

每个任务可以有environmental variables。这是传递 DNS 值的好方法。如果您使用的是 terraform (TF),那么 TF 将配置 LB,然后创建任务并使用 LB 的 DNS 值设置环境变量。因此,您会知道 LB 的 DNS,因为它们会在您的服务之前创建。

2.a Service discovery (SD)

SD 仅用于服务之间的私人通信。不涉及互联网,所以一切都必须在同一个 VPC 或对等 VPC 中。所以它基本上与 LB 的第一个解决方案相反。

我认为您应该也可以将 public LB 与 SD 一起使用。

SD 不使用 LB。相反,当您通过 SD 查询服务的 DNS 时,您将获得随机顺序的任务的私有 IP 地址。因此,随机顺序近似于服务中任务之间连接的负载平衡。