NetflixOSS the DevOps Stack for Microservices
Netflix get it. All the components are build guided by core architecture principles and anti-fragility is on the heart of this components.
There are other stacks that are very promising like Akka and Twitter Stack(Finagle) but the main problem with AKKA is that the Operation part is payed and is not really close to what Netflix has to offer. Besides that akka has another problem - The Programming model is Actors, dont get me wrong actors are great by is not a generic model for everything and does not work well with the service idea.
NetflixOSS gets operation right, is all designed to be Observable i mean in sense of Observability - like you can go there and see whats happening. There are logging, dynamic configuration, monitoring, drivers, load balancers and all sorts of mechanism your stack need it. There are so much emphases on operation not only on building thats why NetflixOSS is ready for the devops ERA because it acknowledge ops and take it into account and thats is something very different that you dont see in standard- pre 2010 solutions for services.
The Architecture Principles
* Separation of Concerns
* Cloud Native
* Microservices
* Everything is broken and fails constantly
* De Normalized Data
* Chaos Engines
* DevOps: Run what you wrote, Anti-Fragility, Immutable Infrastructure, Failures are Opportunities to Learn, Blameless Incident Reviews
* Commitment to Continnous Improvement
The Main Architecture
This is the NetflixOSS Service architecture. You have your devices or service consumers that are connected to the internet and they talk with AWS Elastic Load Balancer and this is call the Zuul witch is just a poxy like HAproxy them will talk to services. Netflix makes difference from internal services and external services - external once they call edge services. All services are isolated and have they own databse and they dont access a central shared database.
The Core Middleware
Netflix has a stack for microservices and operations around it. The Key components are:
* Karyon -> The Nucleus of the microservices - It uses RxNetty as server
* Ribbon -> Java IPC driver to call other services - you can do rest calls with it and uses RxJava
* Eureka -> Discoverability solution Netflix built.
* Hystrix -> Resiliency, Circuit Baker, Timeouts solution -> Wrap app code that is danger with Commands.
* Turbine -> Visual Stream Aggregator for Hystrix - you can see failure and timeouts and circuit breakers at runtime
* Archaius -> Dynamic Configuration Manager for the JVM
* Governator -> Netflix uses Guice and here are the abstractions and wiring utilities.
* Zuul -> Proxy Server that does simple routing and security
For the Operations
* Asgard -> Kinda of Jenkins for the Cloud - Can create clusters, ASGs, ELBs
* Aminator -> Python solution to bake amazon AMI images
* Servo -> Monitoring solutions
* Ice -> AWS Cost Visualization and Monitoring
* SimianArmy -> Chaos Testing - Tear down data centers, instances, burn CPU
* Vector -> Monitoring JVM and servers at runtime
Next posts i will cover some of this solutions with code and examples - also will provide github code working :-) NetflixOSS is great but the documentation is not 100% and sometimes you really need debug and hack the code to understand whats going on. SpringCloud is the Netflix Stack(some very small part of it) with Spring not Guice and has some documentation.
Tech Posts with Code
* Microservices with NetflixOSS: Karyon, Ribbon and Eureka part 1
* Microservices with NetflixOSS: Building and Running Eureka part 2
* Microservices with NetflixOSS: Karyon and Services part 3
* Microservices with NetflixOSS: Ribbon part 4
Cheers,
Diego Pacheco