Let me start by first praising Netflix for the excellent job they did and continue doing in advancing so much in the tech industry – from pushing AWS (and indirectly other cloud providers) to keep improving, to helping making microservices almost a standard for best practices (even though not all teams can do it well) and by publishing their learnings and open sourcing a lot of their internal tools.
For teams that don’t have a lot of strong opinions buying into the whole Netflix stack is an excellent starter choice that works (for the most part) out of the box and helps deliver features fairly quickly as well as helping teams understand good cloud principles.
However, there are some things that bother me (I used the stack for over 1 year and then I moved on):
- Everything is too tightly coupled: hystrix depends on rxjava, ribbon depends on hystrix, jersey-client and eureka-client, eureka-client depends on archaius, hystrix and jersey-client, zuul depends on eureka and ribbon and so on. The point is that is you want to use just one or two libraries that would benefit your app it is almost impossible without bringing almost everything in. The only exceptions are archaius and rxjava.
- Overly complex design: while I understand some of the problems with ELBs (like problems supporting burst traffic or only recently having the option of private/internal ELBs) and the benefits of a service registry, but bypassing DNS and ELBs (or other simple load balancers) and replacing that with Zuul (sometimes 2 layers, one as a general inbound gateway and the other as a domain router), Eureka, Ribbon and Hystrix seems overly complex to setup and maintain for most companies and restful APIs.
- Using ribbon can break blue/green or canary releases setup: using ribbon to call directly other services in the same AWS region (rather than going through a Zuul layer) will break blue/green or canary releases setup as it won’t be aware of the routing rules between the blue/green clusters or canary release (or A/B testing) clusters.
I will write soon a post about what I think it’s a simpler alternative.