2017-08-28 78 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的升級需要我自己修改容器的圖片。