【问题标题】:Microservice Discovery With Docker And Consul使用 Docker 和 Consul 进行微服务发现
【发布时间】:2018-03-11 00:02:45
【问题描述】:

我对构建微服务很感兴趣,但是当我拥有单个微服务的多个实例时,我对服务发现应该如何工作感到有些困惑。

假设我有一个从图像中读取文本的“OCR”应用。 将其部署为 1 个实例很容易,但是,如果我想要 50 个实例呢?

我可以运行 docker swarm 来启动这 50 个实例,但是我如何向其中的任何一个发送请求,即我不想必须知道特定实例的确切容器名称,我不在乎我得到哪个,只要它是健康的,只需将我的请求发送到任何“OCR”容器即可。

我如何做到这一点?

我一直在研究 Consul,它看起来很有希望。 我特别喜欢 HTTP api,(虽然我有点不确定如何检索我感兴趣的服务的 url。我需要在 每个 请求之前执行它以确保我指的是一个健康的实例?)。

如果我想使用 consul,与 docker swarm 相关的步骤是什么?是不是只需要在容器启动的时候在consul中注册服务,如果失败会自动注销对吧?)。

在那之后,我所有的容器只需要知道 consul 在哪里(而且我想我可以在它前面放置一个负载均衡器,以防我想将 consul 本身扩展到一堆实例?)

如果我完全走错了方向,请告诉我。

如果有人也能推荐任何关于这个主题的文章或书籍,我将不胜感激。

谢谢。

【问题讨论】:

    标签: docker microservices consul


    【解决方案1】:

    当您使用 Docker Swarm 模式时,您可以免费获得带有负载平衡的服务发现。
    DNSRR 在关键概念中:https://docs.docker.com/engine/swarm/key-concepts/#load-balancing

    假设您部署OCR-app

    docker service create --network dev --name ORC-app --replicas 5 OCR-app:latest

    在这种情况下,docker manager 将在您的 swarm 网络的节点上部署 OCR-app 五次。属于同一 docker 网络 dev 的所有其他服务都可以通过其名称请求 OCR-app。例如。 GET http://OCR-app:4000/do/something.
    在内部,docker swarm 使用循环法将请求自动转发到五个服务之一。

    【讨论】:

      猜你喜欢
      • 2017-12-10
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 2022-01-02
      相关资源
      最近更新 更多