使用Docker和Consul进行微服务发现

时间:2018-03-10 15:24:56

标签: docker microservices consul

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

假设我有一个" OCR"从图像中读取文本的应用程序。 然而,如果我想要50个这样的实例,那么将其部署为1个实例很容易?

我可以运行docker swarm来获取那50个实例,但是如何向任何一个 发送请求,即我不知道想要知道具体实例的确切容器名称,我不关心我得到哪一个,只要它健康,只需将我的请求发送给任何" OCR&# 34;容器

我如何实现这一目标?

我一直在调查领事,看起来很有希望。 我特别喜欢HTTP api,(虽然我不太清楚我将如何检索我感兴趣的服务的网址。我是否需要在每个请求之前执行此操作确保我指向一个健康的实例?)。

如果我想使用领事,与docker swarm相关的步骤是什么?我是否只需要在容器启动时在领事处注册该服务,如果它失败,它将自动取消注册?)。

在那之后,我的所有容器都需要知道领事的位置(而且我想我可以在其前面贴一个负载平衡器,因为我想要将consul本身扩展到一堆实例?)< / p>

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

如果有人也可以就此主题提出任何文章或书籍,我会很感激。

感谢。

1 个答案:

答案 0 :(得分:2)

当您使用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

在这种情况下,泊坞管理器将在您的群网络节点上部署OCR-app五次。作为同一泊坞网络dev的一部分的所有其他服务可以通过其名称请求OCR-app。例如。 GET http://OCR-app:4000/do/something
内部docker swarm使用循环法将请求自动转发给五个服务之一。