ECS Fargate跨微服务通信选项



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

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

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

    我的问题是:

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

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

  2. 使用AWS服务发现,这意味着我们可以用一个简单的建立标识符查询服务到服务。

    我的问题是:

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

提前感谢您的帮助!

1。a同一VPC中的所有业务及其安全组

我假设你说的是每个服务都有自己的负载平衡器(LB)的情况。由于lb是公共的,它们可以在任何VPC中。

通常设置SGs,使服务的传入规则只允许来自LB的SG的连接。

1。b DNS

每个任务都可以有环境变量。这是传递DNS值的好方法。如果您正在讨论地形(TF),那么TF将提供lb,然后创建任务并使用lb的DNS值设置环境变量。因此,您将知道LBs的DNS,因为它们将在您的服务之前创建。

2。a服务发现(SD)

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

我认为你也应该能够使用公共LB和SD。

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

最新更新