5 ms·
I managed to achieve load balancing for a fleet of microservices using vulcand [0] and marathon callbacks [1]. It listens for marathon callbacks (for app creat
by ersoft 11y ago
I managed to achieve load balancing for a fleet of microservices using vulcand [0] and marathon callbacks [1].
It listens for marathon callbacks (for app create/update/scale), or when a task is killed/lost and updates the backends in etcd, propagating to all vulcand load balancers.
The tool is available on github [2]
[0] https://vulcand.io/proxy.html#backends-and-servers https://vulcand.io/proxy.html#backends-and-servers
[1] https://mesosphere.github.io/marathon/docs/event-bus.html https://mesosphere.github.io/marathon/docs/event-bus.html
[2] https://github.com/kuende/kameni https://github.com/kuende/kameni
- KirinDave 11y agoThis is a good thing. Perhaps you could get the Maraton folks to stop recommending such an awkward solution in preference to your work?
- ersoft 11y agoWell, it depends. My solution is opinionated, using only one vulcand cluster for load balancing, multiple vulcand servers listening on one etcd namespace. For a small number of nodes (< 100) and requests (< 8000 req/s on each vulcand server) this vulcand approach is ok. For large scale, HAProxy/Nginx supports a lot more req/s than vulcand, and I think it can also be configured using confd [0] using a similar aproach: listen for marathon events, update etcd keys, then confd will listen for changes and reload HAProxy/Nginx [0] http://ox86.tumblr.com/post/90554410668/easy-scaling-with-docker-haproxy-and-confd http://ox86.tumblr.com/post/90554410668/easy-scaling-with-do...