Docker 和 Consul 的微服务发现

Microservice Discovery With Docker And Consul

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

假设我有一个 "OCR" 应用程序可以从图像中读取文本。 将其部署为 1 个实例很容易,但是,如果我想要其中的 50 个实例怎么办?

我可以 运行 docker swarm 来启动这 50 个实例,但是我如何向 any one[=34= 发送请求] 个,即我不想知道特定实例的确切容器名称,我不在乎我得到哪个,只要它是健康的,只需将我的请求发送到任何"OCR" 个容器。

如何实现?

我一直在研究 Consul,它看起来很有前途。 我特别喜欢 HTTP api,(尽管我有点不确定如何为我感兴趣的服务检索 url。我需要在 每个请求确保我指向一个健康的实例?)。

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

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

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

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

谢谢。

当您使用 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 管理器将在您的群网络节点上部署 OCR-app 五次。属于同一 docker 网络 dev 的所有其他服务都可以通过其名称请求 OCR-app。例如。 GET http://OCR-app:4000/do/something.
在内部 docker swarm 使用循环法将请求自动转发到五个服务之一。