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 拓扑模式的主要内容,如果未能解决你的问题,请参考以下文章