Envoy: 7 months later
eng.lyft.com
eng.lyft.com
https://www.youtube.com/watch?v=3quCoi5YHz4#t=27m59s
Also, there is https://istio.io/ but it's a placeholder site at the moment.
They use jinja2 templated json... and there are hundreds of lines for their "simple" examples.
Even the "hello world" type example of proxying to google is a mess https://github.com/lyft/envoy/blob/master/configs/google_com...
Human editable json, with comments, and doesn't kill you for a lack of trailing comma.
Available libraries in tons of languages.
I have not used it in anger - just played around with it.
You get big files filled with variables, loaded from other big files also full of variables. It's hard to know what you are setting after a while or where it comes from.
After a while playing with configuration systems, I'm starting to think that configuration should just be hardcoded once and for all.
I would like to introduce you to HiveMind described here: http://blog.crudzilla.com/2016/10/managing-configurations-wi...
It addresses the issues that JSSONET does without inventing a new templating language.
I am happy to give a skype demo, email me if interested.
I remember everyone complaining about Spring and similar having these massive XML configuration files, and then people said "never again!", and moved to very simple JSON formats for their frameworks. And then everyone adds a little bit to the best practices, and over time we get this, again.
It's the same opinionated positions of puppet vs chef/ansible. Building the tooling in the form of an embedded programming language (lua for nginx, python for ansible) is so much better.
But that is a much more polarising position to take. It's politically untenable. Ruby engineers will say no to python and vice versa... So you start arriving at Json or XML based configurations which are a programmatic neutral ground.
IMHO lua-jit occupies the same political neutrality as XML.
1. quite hard to "give it a spin" without using docker (vomit). I eventually found some random github repo that had centos7 compatible build scripts, and it took quite a while to compile it on a test vm since it had to build gcc and a ton of other stuff. Not sure why they can't just supply a static binary "release".
2. The config really is a mess. I managed to get something almost working (only / requests went through the proxy, but nothing else for some reason, even though I was using a prefix config). There aren't really any good example configs I could find either. There is a weird config builder script with json templates in the configs dir, but it just seemed to spew out some preconfigured madness.
I am sure it works great and has more tunables than you can shake a stick at, but for now it seems to be only usable by people who have lots of time to invest in trying it out.
With flexibility as both a side car and host proxy network call fabric for polyglot distributed services, I see Envoy as a kind of modern ESB for the reincarnation of SOA we are seeing in the microservices movement. Congrats to the awesome contributors from Lyft/IBM/Google and others!
The sidecar pattern (used by Envoy and by Google's new project, istio) is desirable in that it compartmentalizes the rules and logic in the pod that uses them, as opposed to sharing all settings across all apps. Zero dependencies (between pods) is a great way to manage complexity. I haven't thought much about it, but there might be latency benefits, too.
1. https://lyft.github.io/envoy/docs/intro/comparison.html#id7
Linkerd guys have been focusing on building deep integration with k8s (as an ingress or sidecar), but this announcement of Envoy trumps it all.
>"We are excited to announce that we are working in partnership with both Google and IBM to bring Envoy to Kubernetes. Fun fact: there are now more people working on Envoy at Google than there are at Lyft! We have a lot of other things planned with Google that we will be able to share more about in the coming months."
That's a bummer for the amazing guys at Buoyant. I had hoped for linkerd to be the next generation of ingress in k8s.
Envoy is in C++, while linkerd-tcp is in Rust. I wonder how much role did the choice of tooling play in Google's decision to adopt.
Envoy bills itself primarily as a service mesh (seeming closest to GSLB / Global Software Load Balancer), but also as an edge proxy (seeming closest to GFE / Google Front End).
Is there any reason to think that it's more like GFE than it is like GSLB?