Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Distributed Systems NSQ topology pattern on Docker containers

Is it possible to replicate "NSQ realtime distributed messaging platform" described in the last example of "Topology Patterns" with Docker? Does anybody have a dockerfile or image example?

like image 942
Luca G. Soave Avatar asked Dec 02 '13 10:12

Luca G. Soave


1 Answers

I'll take a crack at this while I'm waiting for a few background tasks to finish.

The distributed messaging platform that @Luca G. Soave mentioned can be seen here: source: www.nsq.io/deployment/topology_patterns.html

I believe this question has a fatal issue at its root: a misunderstanding of what Docker containers are.

For the purposes of our discussion, let's pretend that a Docker container is just a different name for a virtual machine. The question of "Can a distributed system be built with virtual machines?" doesn't quite fit since it's really just a matter of configuration, abstraction, and coordination.

The diagram above can be recreated with each point of contact/responsibility (node) being self-contained within a Docker container or a virtual machine. i.e.:

  • Each API/nsqd node is in its own container
  • Each nsq_to_file node is in its own container
  • Each nsqlookupd node is in its own container

Depending on how you set-up your Docker images, you may implement a distributed (multi-host) version of this in a number of ways. Some ideas are:

  • Mapping container internal ports to the same host port, and configuring your nodes to broadcast themselves as the host ip, so that when other nodes go to connect to them, they're latching onto the host's external ip at the port mapped to the container; thus connecting directly to the container.

  • Using a service discovery package like consul to replace the nsqlookupd in order to add additional metadata. This would be useful if you're running many containers that each internally bind to the same port (e.g. port 9090), but allow the docker process on the host to manage the random external port mappings.

As this relates to Docker, there have been some recent developments in broadcasting information across hosts to related containers; which would be one way to seed your api/nsqd containers with information about the nsqlookupd containers.

I've had success using MaestroNG for small deployments, but it definitely is not a great solution for large-scale docker deployments.

like image 134
Momer Avatar answered Sep 21 '22 15:09

Momer