使用 Docker 扩展微服务

Posted

技术标签:

【中文标题】使用 Docker 扩展微服务【英文标题】:Scaling microservices using 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 【参考方案1】:

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

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

    调度:在 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。

希望对你有帮助。

【讨论】:

以上是关于使用 Docker 扩展微服务的主要内容,如果未能解决你的问题,请参考以下文章

docker入门

什么是Docker

微服务+Docker完美教程,全部展现到这2份文档里面了!

学习笔记 | 微服务与 Docker 是什么关系?

Docker:Docker入门教程

Docker:Docker入门教程