Docker 容器上的分布式系统 NSQ 拓扑模式

Posted

技术标签:

【中文标题】Docker 容器上的分布式系统 NSQ 拓扑模式【英文标题】:Distributed Systems NSQ topology pattern on Docker containers 【发布时间】:2013-12-18 01:12:09 【问题描述】:

是否可以用Docker 复制“Topology Patterns”的最后一个示例中描述的“NSQ 实时分布式消息传递平台”?有人有 dockerfile 或图像示例吗?

【问题讨论】:

好问题,我想这将利用容器链接,我还没有深入研究。 关于 GitHub 上的相关主题有一个有趣的后续:github.com/bitly/nsq/issues/283#issuecomment-30048495 拓扑问题仍在进行中,但由于 Matt Reiferson 的工作已经注入了良好的基础(mreiferson:index.docker.io/u/mreiferson) @LucaG.Soave 我认为给自己添加一个答案会很好。包括对 NSQ 官方 Go 包的引用:github.com/bitly/go-nsq @eAbi github.com/bitly/go-nsq 很棒,但仍然不能回答我的问题。此外,据我了解,与 Docker 或该拓扑的容器化无关。如果我错了,请多多包涵,更多解释/示例可能会有所帮助。 【参考方案1】:

我会在等待一些后台任务完成的时候尝试一下。

@Luca G. Soave 提到的分布式消息传递平台可以在这里看到:

我认为这个问题的根源有一个致命的问题:对 Docker 容器是什么的误解。

出于讨论的目的,让我们假设 Docker 容器只是虚拟机的不同名称。 “可以用虚拟机构建分布式系统吗?”的问题。不太合适,因为它实际上只是配置、抽象和协调的问题。

上图可以重新创建,每个接触点/责任点(节点)都独立于 Docker 容器或虚拟机中。即:

每个 API/nsqd 节点都在自己的容器中 每个 nsq_to_file 节点都在自己的容器中 每个 nsqlookupd 节点都在自己的容器中

根据您设置 Docker 映像的方式,您可以通过多种方式实现它的分布式(多主机)版本。一些想法是:

将容器内部端口映射到同一个主机端口,并将您的节点配置为将自己广播为主机 ip,这样当其他节点连接到它们时,它们会在映射到容器的端口;从而直接连接到容器。

使用consul 之类的服务发现包替换 nsqlookupd 以添加其他元数据。如果您正在运行许多容器,每个容器都在内部绑定到同一端口(例如端口 9090),但允许主机上的 docker 进程管理随机外部端口映射,这将非常有用。

由于这与 Docker 有关,最近在跨主机向相关容器广播信息方面取得了一些进展;这是使用有关 nsqlookupd 容器的信息为您的 api/nsqd 容器播种的一种方法。

我已经成功地将 MaestroNG 用于小型部署,但它绝对不是大型 docker 部署的好解决方案。

【讨论】:

以上是关于Docker 容器上的分布式系统 NSQ 拓扑模式的主要内容,如果未能解决你的问题,请参考以下文章

docker nsq

NSQ Docker 群

docker,容器,编排,和基于容器的系统设计模式

Linux安装和配置nsq

高性能消息队列之nsq

带你入门Go语言的消息队列NSQ