【问题标题】:ECS Fargate cross microservice communication optionsECS Fargate 跨微服务通信选项
【发布时间】:2021-05-21 06:10:13
【问题描述】:

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

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

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

    我对此的疑问是:

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

    b.假设我们现在已经配置了整个设置,并且需要在一个微服务代码库中设置负载均衡器公共 DNS 之一,实现这一点的最佳方法是什么,我猜测某种“假设”公共 DNS 的 terraform 脚本将是加进去了吗?

  2. 利用 AWS Service Discovery,这意味着我们可以使用简单的构建标识符查询服务到服务。

    我的问题是:

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

非常感谢您的帮助!

【问题讨论】:

    标签: amazon-web-services networking amazon-ecs aws-fargate


    【解决方案1】:

    1.a 同一 VPC 中的所有服务及其安全组 (SG)

    我假设您说的是每个服务都有自己的负载平衡器 (LB) 的情况。由于 LB 是公开的,因此它们可以位于任何 VPC、区域或帐户中。

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

    1.b DNS

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

    2.a 服务发现 (SD)

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

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

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

    【讨论】:

    • @CacheMoneyPlaya 没问题。很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2020-06-16
    • 2019-12-03
    • 2020-08-14
    • 1970-01-01
    • 2023-02-03
    相关资源
    最近更新 更多