2017-08-28 49 views
2

我们正在从单片应用程序切换到微服务。 每个微服务将通过Amazon ECS在Docker上运行。基于Docker的微服务架构中的领事

我们决定使用Consul进行服务发现。我们有3台服务器在VPC内的EC2实例上运行。

我的问题如下:

如何/从哪里开始的每个微服务领事代理?是否在每个实例上(通过Docker-Compose)在Consul里面运行另一个容器?或者我以某种方式在每个微服务的现有Docker容器中运行一个Consul代理?

enter image description here

附件中是我的情况粗略表示。 Consul客户端(黄色)应该在自己的Docker容器还是在Node.js容器内?

回答

1

Consul是另一项服务,我不会在我的微服务的容器内部署它。在一个大规模的场景中,我会部署几个Consul容器:一些会在服务器模式下运行代理(将它们视为主服务器),另一些会在客户端模式下运行它(将它们视为从服务器)。

我不会部署的代理下,客户端模式下运行我的应用程序的容器的一部分,这是因为:

  1. 隔离它们意味着它们单独停止。把它们放在一起意味着当我因为版本升级或失败而停止我的应用程序的容器时,我会不必要地停止在其中运行的Consul代理。反过来也是如此:停止Consul代理将停止正在运行的应用程序。这种不需要的耦合是不利的。
  2. 分离它们意味着它们可以分别缩放。我可能需要扩展我的微服务并部署更多的实例。如果容器还包含Consul客户端代理,那么扩展我的微服务最终也将扩展Consul。或者相反:我可能需要扩展Consul而不缩放我的微服务。
  3. 根据Docker容器图像进行隔离更容易。我可以继续使用官方的领事形象,并且没有太多麻烦升级。把Consul和我的微服务放在一起意味着Consul的升级需要我自己修改容器的图片。