Ok, this is a bit long, I apologize in advance

I’ve been researching and experimenting with various challenges around managing 
microservices at-scale. I’ve been working extensively with Docker, CoreOS and 
recently Mesos.

First, I think that we need to clearly distinguish that service discovery, and 
request routing / load balancing are related but separate concerns. In my mind, 
at least, discovery is about finding a way to communicate with a service (much 
like a DNS query), whereas routing and load balancing concerns effectively and 
efficiently directing (handling) network traffic.

There are multiple solutions and approaches out there, but I don’t know if any 
single technology could address all ‘microservices at-scale’ needs on its own 
effectively and efficiently. In other words - mixing multiple approaches, tools 
and technologies is probably the right way to go.
I’m saying this because many of the existing tools come with a single 
technology in mind. Tools that come form the Mesos camp obviously have Mesos in 
mind, tools that come from Kube have Kube in mind, tools coming from CoreOS 
have CoreOS in mind, etc.

I think It’s time to start mixing things together to really benefit from all 
the goodness in all the various camps.

I’ll give an example:
First, with respect to network traffic routing / balancing, I’ve created an 
HAProxy based microservice, which supports multiple data sources as inputs for 
auto-configuration. (BTW, I’m also experimenting with Velocity scripts for the 
configuration template, and i’m finding it’s a big improvement over Go 
scripting. Appreciate your feedback!) 
https://registry.hub.docker.com/u/yaronr/discovery
For now just etcd and Marathon data sources are implemented. Some services will 
rely of CoreOS/etcd for publishing their availability, and others on Marathon. 
In my case, I run my Kernel cluster - Mesos-master, Marathon and a  a clustered 
REST DHCP like service on CoreOS, and allow my customers to schedule their own 
microservices on Mesos/Marathon. All require discovery / routing / load 
balancing, the only difference is where the data comes from.

Regarding DNS: again I don’t think it makes sense to have a ‘mesos-dns’ and 
‘weave-dns’ and ‘kubernets-dns’ - it makes much more sense to have a single DNS 
that easily integrates with multiple data sources. Network is a common, low 
level resource, that’s used by the upper level abstractions / frameworks such 
as Kube, Mesos, and possibly Fleet. Therefore, if a single technology ’takes 
ownership’ of (parts of) this resource, that could create a technology lock 
down the line. 
I personally use Weave to abstract Netowrk altogether, and Weave DNS to provide 
service discovery (not network routing).

(Y)

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to