On Thu, Nov 5, 2015 at 5:38 PM, C. Scott Ananian cananian@wikimedia.org wrote:
I view it as partly an effort to counteract the perceived complexity of running a forest full of separate services. It's fine to say they're all preinstalled in this VM image, but that's still a lot of complexity to dig through: where are the all the servers? What ports are they listening all? Did one of them crash? How do I restart it?
When you run docker-compose, your containers are linked together. If you have the following containers:
parsoid mathoid mediawiki mysql (hopefully not) cassandra redis
You'd talk to redis from mediawiki via: redis://redis:6379 and you'd talk to parsoid via: http://parsoid and to mathoid via http://mathoid, etc etc. It handles the networking for you.
If one of them crash then docker compose will tell you. If any of them fail to start it will also tell you.
I'm not even a huge proponent of docker, but the docker-compose solution for this is way more simple and way more standard than what you're proposing and it doesn't investing a ton of effort into something that no one other project will ever consider using.
Ride the ocean on the big boat, not the life raft.
For some users, the VM (or an actual server farm) is indeed the right solution. But this was an attempt to see if I could recapture the "everything's here in this one process (and one code tree)" simplicity for those for whom that's good enough.
There's no server farm here. If you're running linux it's just a set of processes running in containers on a single node (which could be your laptop). If you're on OSX or Windows it's a VM, but that can be totally abstracted away using Vagrant.
If you're launching in the cloud, you could launch directly to joyent or AWS ECS or very easily stand something up on digital ocean. If you're really feeling like making things easier for end-users, provide orchestration code that will automatically provision MW and its depedencies via docker-compose in a VM in one of these services.
Orchestration + containers is what most people are doing for microservices. Don't make something complex to maintain that's completely out of the ordinary out of fears of complexity. Go with the solutions everyone else is using and wrap tooling around it to make it easier for people.
- Ryan