码头工程的微服务 - 建筑学

时间:2017-05-11 22:30:02

标签: node.js docker architecture openshift microservices

我正在使用docker构建一个微服务项目。

我的一个微服务是一个应该从不同来源获取数据的监听器。

我想要实现的是能够动态地开始和停止从源获取数据。

architecture

例如,在此图中,我有3个源连接到3个泊坞窗。

我的问题开始是因为我需要在新的源可用时创建另一个docker实例。在这个例子中,让我们说源#4现在可用,我需要获取他的数据(我知道新的源何时可用)但我希望它能自动缩放(使用源#4信息进行收听)

我想出了两个解决方案,每个解决方案都有优点和缺点:

1)创建一个运行侦听器服务的大量docker的docker池,每次有新的源可用时,向可用的docker发送一条消息(使用rabbitmq但我认为不太相关)以开始获取数据。

在这个解决方案中,我有点害怕Docker镜像无故耗尽的内存消耗 - 但这不是一个非常复杂的解决方案。

2)每当新的源变得可用时,创建一个新的docker(具有不同的环境变量)

使用此解决方案,我在创建docker时遇到问题。 此时我已经实现了这个,但启动dockers的服务(让我们称之为管理器)只是在同一服务器上执行命令的常规nodejs应用程序 - 我还需要它在docker容器内。

所以这里的问题是我无法管理从主docker创建一个ssh连接来创建我的新Docker。

我不太确定我的两个解决方案都在按计划进行,并且非常感谢您对我的问题提出任何建议。

1 个答案:

答案 0 :(得分:1)

您的问题有点不清楚,但是如果您只是想横向扩展服务,那么您应该研究一种容器编排技术,它将允许您 - 例如Kubernetes。我建议您阅读introduction

添加其他服务容器所需要做的就是更新replicas配置中所需的Deployment的数量。有关更多信息,请阅读this

使用kubernetes(或短k8s)除了水平可伸缩性之外,您还将受益于部署自动化,自我修复和服务发现以及负载平衡功能。

还有其他编排选择(例如Docker Swarm),但我建议先考虑kubernetes。

如果这样可以解决您的问题,或者您的原始问题中没有其他要求,请告诉我。

后续问题的链接:

1 - Run kubectl commands inside container

2 - Kubernetes autoscaling based on custom metrics

3 - Env variables in Pods