docker 上的微服务 - 架构

Microservices on docker - architecture

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

我的一个微服务是一个监听器,它应该从各种来源获取数据。

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

例如在这张图中,我有 3 个源连接到 3 个 dockers。

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

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

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

在这个解决方案中,我有点担心 docker 图像 运行 无缘无故的内存消耗 - 但它不是一个非常复杂的解决方案。

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

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

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

我不太确定我的两个解决方案是否都在轨道上,非常感谢对我的问题提出的任何建议。

你的问题有点不清楚,但如果你只想水平扩展服务,你应该研究一种容器编排技术,它可以让你做到这一点 - 例如 Kubernetes。我建议阅读 introduction.

要添加额外的服务容器,您需要做的就是在 Deployment 配置中更新所需 replicas 的数量。有关详细信息,请阅读 this

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

还有其他编排方案(例如 Docker Swarm),但我建议先研究一下 kubernetes。

让我知道这是否解决了您的问题,或者您是否有其他要求在您的原始问题中不是很清楚。

您后续问题的链接:

2 - Kubernetes autoscaling based on custom metrics

3 - Env variables in Pods