未能看到大使模式如何增强Docker中容器体系结构的模块化/简单化

未能看到大使模式如何增强Docker中容器体系结构的模块化/简单化,docker,Docker,我看不出实现大使模式将如何帮助我们简化/模块化容器体系结构的设计 假设我在主机a上有一个数据库容器db,由位于主机B上的程序db客户机使用,该程序通过网络通过大使容器db-ambassador和db-foreign-ambassador连接: [host A (db) --> (db-ambassador)] <- ... -> [host B (db-forgn-ambsdr) --> (db-client)] [主机A(db)-->(db大使)][主机B(db放弃a

我看不出实现大使模式将如何帮助我们简化/模块化容器体系结构的设计

假设我在主机a上有一个数据库容器
db
,由位于主机B上的程序
db客户机
使用,该程序通过网络通过大使容器
db-ambassador
db-foreign-ambassador
连接:

[host A (db) --> (db-ambassador)] <- ... -> [host B (db-forgn-ambsdr) --> (db-client)]
[主机A(db)-->(db大使)][主机B(db放弃ambsdr)-->(db客户机)]
同一台机器中的容器之间的连接,例如
db
db-ambassador
,以及
db-foreign-ambassador
db-client
通过Docker的
--link
参数完成,而
db-ambassador
db-foreign-ambassador
通过网络进行对话

但是,
--link
只是一种将ip地址、端口和其他信息从一个容器插入到另一个容器的奇特方式。当一个容器发生故障时,链接到它的另一个容器不会得到通知,当它重新启动时,它也不会知道崩溃容器的新IP地址。简而言之,如果链接到另一个容器的容器失效,则链接也失效

考虑我的例子,假设<>代码> db/COD>崩溃并重新启动,从而分配给不同的IP。代码>数据库大使也必须重新启动,以便更新它们之间的链接。。。除非你不应该。如果重新启动

db-ambassador
,则IP也会发生更改,
foreign db-ambassador
将不知道在新IP地址的何处访问它

在Docker的文件中引用了大使模式

当您需要为消费者重新布线以与不同的Redis通话时 服务器,您只需重新启动 消费者已连接到

此模式还允许您透明地将Redis服务器移动到 与使用者不同的docker主机

看来这正是它试图解决的问题。据我所知,它完全没有。如果您考虑<代码> -Link ,只要链接容器不崩溃,就不太有用。在以前的IP上启动崩溃节点的选项是一个很好的解决方案,至少对于中小型体系结构来说是这样


我是否遗漏了一些明显的东西?

Jérôme在他的幻灯片中展示了大使如何比其他服务发现方式(即DNS、键值存储、绑定装载配置文件等)更好(11-33)。他还就如何解决我想你提到的问题提出了一些建议,特别是看起来很有希望。

这个公开问题看起来像你想要的:发现如此不准确和误导性的信息非常惊讶。我认为你完全正确。在我看来,大使模式现在完全一文不值。我对您需要通过另一个容器来推送数据这一事实并不感到兴奋,因为这会增加另一个可能的失败点。我希望docker's能解决这些问题。谢谢你分享这副牌。我想找一个录像带。我仍然不习惯在每个服务提供商和每个服务消费者上运行代理,因为“DNS很难”。如果您在AWS上,您可以使用其API操纵DNS。这就是我在这里做的警告,我昨晚刚刚创建了那个项目,还没有推出文档。当这种情况发生变化时,此注释将自毁。