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

标签 docker microservices consul

我对构建微服务感兴趣,但是当我有一个微服务的多个实例时,我对服务发现的工作方式有些困惑。

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

我可以运行docker swarm来启动以获取这50个实例,但是如何将请求发送给其中的任何和一个,即我不想知道特定实例的确切容器名称,我不需要只要我健康,只要将我的请求发送到任何“OCR”容器中,就不必担心。

我该如何实现?

我一直在研究领事,这似乎很有希望。
我特别喜欢HTTP api,(尽管我不太确定如何检索感兴趣的服务的url。在每次请求之前都需要这样做以确保我指向的是健康的实例?)。

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

之后,我所有的容器只需要知道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使用循环机制将请求自动转发到五个服务之一。

关于docker - 使用Docker和Consul进行微服务发现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49210733/

相关文章:

node.js - “NestMicroservice”错误地实现了接口(interface) 'INestMicroservice'

kubernetes - 保管箱和Consul:保管箱存储未显示在Consul UI中

postgresql - Docker 和 Postgres - 服务器在使用 5432 以外的端口时意外关闭连接错误

docker - 无根 docker-compose 无法构建时间刻度图像

mysql - Docker-compose链接外部/本地mysql

java - 如何在 Spring Boot 中将多部分文件从一个服务传递到另一个服务?

c - 在 PCF-DEV 中将 native C/C++ 二进制文件部署为独立微服务

docker - 使用 postgresql 的 Rancher

python - 将 Django 应用程序映射到 Docker 容器,使用 URL 寻址

consul - 如何在领导人选举中使用 Consul?