分布式系统Docker容器上的NSQ拓扑模式
是否可以使用Docker复制“ Topology Patterns ”最后一个示例中描述的“NSQ实时分布式消息传递平台”? 有人有docker文件或图像的例子吗?
当我等待几个后台任务完成时,我会采取一些措施。
@Luca G. Soave提到的分布式消息平台可以在这里看到:
我认为这个问题的根源是一个致命的问题:对Docker容器的误解。
为了便于我们讨论,假设一个Docker容器只是虚拟机的一个不同的名字。 “分布式系统可以用虚拟机build立吗?”的问题 不太适合,因为它只是一个configuration,抽象和协调的问题。
上面的图可以通过在Docker容器或虚拟机中自包含的每个联系点/责任(节点)来重新创build。 即:
- 每个API / nsqd节点都在它自己的容器中
- 每个nsq_to_file节点都位于其自己的容器中
- 每个nsqlookupd节点都位于其自己的容器中
根据您如何设置Docker镜像,您可以通过多种方式实现分布式(多主机)版本。 一些想法是:
-
将容器内部端口映射到同一个主机端口,并将您的节点configuration为主机IP,以便当其他节点连接到它们时,它们在映射到容器的端口上locking到主机的外部IP上; 从而直接连接到容器。
-
使用像consul这样的服务发现包来replacensqlookupd以添加额外的元数据。 如果您运行的许多容器都内部绑定到相同的端口(例如端口9090),但是允许主机上的
docker
进程pipe理随机的外部端口映射,这将非常有用。
由于这涉及到Docker,所以在主机间广播信息到相关容器方面有了一些新进展。 这将是一个种子你的api / nsqd容器的信息关于nsqlookupd容器的一种方法。
我已经成功使用MaestroNG进行小型部署,但对于大型Docker部署来说,这绝对不是一个好的解决scheme。