基于 Docker 的微服务架构中的 Consul
Consul in a Docker-based Microservices architecture
我们正在努力从单体应用程序切换到微服务。
每个微服务都将通过 Amazon ECS 运行 在 Docker 上运行。
我们决定使用 Consul 进行服务发现。我们在 VPC 内的 EC2 实例上有 3 台服务器 运行ning。
我的问题如下:
How/Where是否为每个微服务启动Consul代理?我是否在每个实例上 运行 另一个容器(通过 Docker-Compose),里面有 Consul?或者我是否以某种方式 运行 在每个微服务的已经存在的 Docker 容器中有一个 Consul 代理?
附件是我的情况的粗略描述。
Consul Client(黄色)应该在它自己的 Docker 容器中还是在 Node.js 容器中?
Consul 是另一个服务,我不会将它部署在我的微服务容器中。在大规模场景中,我会部署几个 Consul 容器:一些 运行 Server 模式下的代理(认为它们是 Master),一些 运行 它在 Client 模式下(认为他们作为奴隶)。
我不会在客户端模式下部署代理 运行ning 作为我的应用程序容器的一部分,因为:
- 隔离它们意味着它们被单独停止。将它们放在一起意味着每当我由于版本升级或故障而停止我的应用程序的容器时,我将不必要地停止其中的 Consul 代理 运行ning。反过来也是一样:停止 Consul 代理会停止我的 运行ning 应用程序。这种不必要的耦合没有好处。
- 将它们隔离意味着它们可以单独缩放。我可能需要扩展我的微服务并部署它的更多实例。如果容器还包含 Consul 客户端代理,那么扩展我的微服务最终也会扩展 Consul。或者反过来:我可能需要在不扩展我的微服务的情况下扩展 Consul。
- 就 Docker 容器映像而言,隔离它们更容易。我可以继续使用官方 Consul 镜像并轻松升级。将Consul和我的微服务放在一起意味着升级Consul需要我自己修改容器镜像。
我们正在努力从单体应用程序切换到微服务。 每个微服务都将通过 Amazon ECS 运行 在 Docker 上运行。
我们决定使用 Consul 进行服务发现。我们在 VPC 内的 EC2 实例上有 3 台服务器 运行ning。
我的问题如下:
How/Where是否为每个微服务启动Consul代理?我是否在每个实例上 运行 另一个容器(通过 Docker-Compose),里面有 Consul?或者我是否以某种方式 运行 在每个微服务的已经存在的 Docker 容器中有一个 Consul 代理?
附件是我的情况的粗略描述。 Consul Client(黄色)应该在它自己的 Docker 容器中还是在 Node.js 容器中?
Consul 是另一个服务,我不会将它部署在我的微服务容器中。在大规模场景中,我会部署几个 Consul 容器:一些 运行 Server 模式下的代理(认为它们是 Master),一些 运行 它在 Client 模式下(认为他们作为奴隶)。
我不会在客户端模式下部署代理 运行ning 作为我的应用程序容器的一部分,因为:
- 隔离它们意味着它们被单独停止。将它们放在一起意味着每当我由于版本升级或故障而停止我的应用程序的容器时,我将不必要地停止其中的 Consul 代理 运行ning。反过来也是一样:停止 Consul 代理会停止我的 运行ning 应用程序。这种不必要的耦合没有好处。
- 将它们隔离意味着它们可以单独缩放。我可能需要扩展我的微服务并部署它的更多实例。如果容器还包含 Consul 客户端代理,那么扩展我的微服务最终也会扩展 Consul。或者反过来:我可能需要在不扩展我的微服务的情况下扩展 Consul。
- 就 Docker 容器映像而言,隔离它们更容易。我可以继续使用官方 Consul 镜像并轻松升级。将Consul和我的微服务放在一起意味着升级Consul需要我自己修改容器镜像。