【问题标题】:Microservices on docker - architecturedocker 上的微服务——架构
【发布时间】:2017-10-11 02:47:02
【问题描述】:

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

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

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

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: node.js docker architecture openshift microservices


    【解决方案1】:

    您的问题有点不清楚,但如果您只是想横向扩展服务,您应该研究一种容器编排技术,它可以让您做到这一点 - 例如Kubernetes。我推荐阅读introduction。

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

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

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

    让我知道这是否能解决您的问题,或者您是否有原始问题中未明确说明的其他要求。

    后续问题的链接:

    1 - Run kubectl commands inside container

    2 - Kubernetes autoscaling based on custom metrics

    3 - Env variables in Pods

    【讨论】:

    • 感谢您的回答,我会尽量让我的问题更清楚。我的来源正在动态更新(添加和删除),所以我需要我的听众动态扩展,是否可以使用Kubernetes?如果是这样,我将不胜感激(我的服务器上有一个 openshift 环境)
    • 嗨,是的,如果您在答案中点击我的第二​​个链接,您将看到这样的缩放命令:kubectl scale deployment nginx-deployment --replicas 10
    • 谢谢!我刚刚检查了一下,这看起来是个好主意。关于它的一些问题,我可以从不同的 Docker 运行这个命令吗?假设我将有一个 dockerManager 来监听 RabbitMQ,当有新的源可用时,dockerManager 将使用这个命令来扩展 pod。还有一个问题,我可以在创建 pod 时使用环境变量吗? (顺便说一下,我用的是nodejs)
    • 我在我的答案中添加了一些链接。是的,您可以从 Pod 内部连接到 API 服务器(第一个链接)。不过,我不确定这将是一个很棒的设计。您还应该研究基于自定义指标的 kubernetes 自动缩放(它允许系统进行休息调用以确定它是否需要缩放) - 请参阅第二个链接。是的,您可以在创建 POD 时使用环境变量。请参阅第三个链接。
    • 好吧,您必须提供更多关于您的用例的详细信息,以便我了解您的要求。一般来说,假设每个添加的 pod 将为您的新源提供额外的处理能力,并且您通过单个 kubernetes 服务处理部署中的所有 pod。因此,您所要做的就是询问 kubectl 当前的副本数是多少,然后告诉 kubectl 将该数量增加 1。作为 kubectl 的替代方案,您还可以使用 kubernetes 的其余 API。
    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 2015-09-17
    • 2018-07-17
    • 2016-11-23
    • 2018-03-29
    • 2019-03-23
    • 2016-11-22
    相关资源
    最近更新 更多