【问题标题】:Scaling microservices using Docker使用 Docker 扩展微服务
【发布时间】:2016-07-08 17:54:51
【问题描述】:

我已经创建了一个 Node.js (Meteor) 应用程序,并且正在研究未来处理扩展的策略。我已经将我的应用程序设计为一组微服务,我现在正在考虑在生产中实现它。

然而,我想做的是在一个服务器实例上运行许多微服务,以在它们使用少量资源的同时最大限度地利用资源。我知道容器对此很有用,但我很好奇是否有一种方法可以创建动态缩放的容器集:

  • 编写命令,例如“如果运行此应用的容器达到 > 80% CPU/其他限制指标,则在此服务器上提供另一个应用容器”,
  • 如果需要为额外的容器提供和准备其他服务器,
  • 负载平衡这些容器之间的连接(这是否会影响服务器负载平衡,例如,向容器较少的服务器发送较少的连接?)

我研究过 AWS EC2、Docker Compose 和 nginx,但我不确定我是否朝着正确的方向前进。

【问题讨论】:

  • Meteor 1.3+中的代码结构有利于在Meteor中编写微服务。要管理服务之间的相互依赖关系,请使用 anotherMeteor = DDP.connect(anotherMeteorServer)。我的2c。我还没试过。
  • @Vijay 有时间我可能会自己回来回答这个问题。我想我知道如何做到这一点,虽然还没有时间尝试,所以如果你需要它,请关注这个空间以获得答案/如果我忘记回答并且你仍在搜索,请打扰我。
  • 我们使用 AWS 来托管我们的 miroservices 应用程序,并使用 ECS(AWS docker 服务)来容器化不同的 API。在这种情况下,我们使用 AWS 自动扩展功能来管理扩展和扩展。检查这个。希望能帮助到你。 aws.amazon.com/blogs/compute/automatic-scaling-with-amazon-ecs

标签: node.js meteor amazon-ec2 docker microservices


【解决方案1】:

调查 Kubernetes 和/或 Mesos,您将永远不会回头。它们是为您想要做的事情量身定制的。您应该关注的两个组件是:

  1. 服务发现:这允许相互依赖的服务(微服务“A”调用“B”)相互“发现”。它通常使用 DNS 完成,但在它之上具有注册功能,可以处理实例扩展时发生的情况。

  2. 调度:在 Docker 领域,调度与 CRON 作业无关,它意味着容器如何以各种方式扩展和“打包”到服务器中,以最大限度地有效利用可用资源.

这里实际上有几十种选择:Docker Swarm、Rancher 等也是相互竞争的选择。许多像亚马逊这样的云供应商也提供具有这些功能的专用服务(如 ECS)。但是 Kubernetes 和 Mesos 正在成为标准选择,所以如果你至少从那里开始,你就会成为一个很好的公司。

【讨论】:

    【解决方案2】:

    可以通过Docker API(和cool blog post)收集指标,它经常用于此目的。 修补 DAPI 和 docker stack 工具(compose/swarm/machine)可以提供很多工具来有效地扩展微服务架构。

    我可以建议支持 Consul 在这种资源感知系统中管理发现。

    【讨论】:

      【解决方案3】:

      我们使用 AWS 来托管我们的 miroservices 应用程序,并使用 ECS(AWS docker 服务)来容器化不同的 API。

      在这种情况下,我们使用 AWS 自动扩展功能来管理扩展和扩展。 Check this

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-23
        • 1970-01-01
        • 2020-11-07
        • 2018-10-22
        • 2020-02-22
        • 1970-01-01
        • 2017-12-29
        • 1970-01-01
        相关资源
        最近更新 更多