amazon-web-services - Aws Ecs 中微服务之间的通信

标签 amazon-web-services docker amazon-ecs netflix-eureka

我在微服务之间的通信方面遇到了麻烦。我有许多 Spring Boot 应用程序,它们之间有许多请求 HTTP 和 AMQP (RabbitMQ)。在本地(在开发中)我使用没有 Docker 图像的 Eureka(Netflix Oss)。

问题是:在 Amazon ECS 基础架构中,我如何使用相同的行为?使用 Docker 进行微服务之间通信的常见做法是什么?我仍然可以使用 Eureka 进行服务发现吗?除此之外,这种通信将如何在容器实例之间进行?

最佳答案

我建议阅读 ECS Service Load Balancing ,特别是两点:

  • 您的 ECS 服务配置可能会说您让 ECS 或 EC2 实例本质上选择服务在外部运行的端口号。 (即对于 Docker 容器内的 Spring Boot 应用程序,您的应用程序认为它在端口 8080 上运行,但实际上对于 Docker 容器外的任何东西,它可能在端口 1234 上运行
    2 个 ECS 集群将检查您在负载均衡器中定义的健康端点,并杀死/重生您的服务已死亡的实例
  • 负载均衡器为您提供了不同的方法来指定您正在与之交谈的集群中的哪个应用程序。这可以基于路由或基于 DNS 名称(可能还有其他一些)。因此http://myservice.example.com/api可能指向与 http://myservice.exaple.com/app 不同的 ECS 服务... 或 http://app.myservice.example.com对比 http://api.myservice.example.com .

  • 您可以在没有负载均衡器的情况下配置 ECS,我不确定在这种情况下它的效果如何。

    现在,您正在谈论服务发现。你仍然可以使用 Eureka 进行服务发现,让 Spring Boot 来处理。你可能需要聪明地告诉 Eureka 你的服务在哪里(因为 Docker 容器内的主机名可能没用,容器内的端口号也完全没用。)你可能需要在这里做一些聪明的事情才能正确导出该数字,例如使用 AWS API 进行内省(introspection)。我认为 this SO answer正确地描述它,或者至少足够接近开始。

    另外显然 ECS has service discovery built in现在。这是自从我上次使用 ECS 以来的新功能,或者我们没有使用它,因为我们有其他解决方案。如果你因为其他原因没有完全依赖 Eureka。

    关于amazon-web-services - Aws Ecs 中微服务之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51408800/

    相关文章:

    amazon-web-services - 从 Visual Studio Toolkit 2012 重新部署时,aws cloudformation 堆栈没有响应

    docker - 如何启用Docker守护程序的 “debug”日志记录? (Ubuntu 16.04)

    amazon-web-services - 如何设置 ECS 服务最小和最大任务

    amazon-web-services - AWS ECS Xray边车 “write: connection refused”

    python - “gcc”在 AWS Elastic Beanstalk 上构建 pandas 时失败

    amazon-web-services - 使用 cli 将 ami 复制到不同的区域

    amazon-web-services - Terraform、 "ignore_changes"和子 block

    docker - 从Docker重新进入Cloud Datalab?

    java - java.library.path 中没有 fontmanager

    docker - 容器中的CRON工作