Microservices reativos usando a stack do Netflix na AWS · 2016-08-26 · Microservices reativos...
Transcript of Microservices reativos usando a stack do Netflix na AWS · 2016-08-26 · Microservices reativos...
Microservices reativos usando a stack do Netflix na AWS
Diego PachecoPrincipal Software Architect at ilegra.com@diego_pacheco
Why Netflix?
Billions Requests Per Day 1/3 US internet
bandwidth ~10k EC2 Instances Multi-Region 100s Microservices Innovation + Solid
Service SOA, Microservices and
DevOps Benchmark
Social Product Social Network Video Docs Apps Chat
ScalabilityDistributed Teams Could reach some
Web Scale
Netflix My Problem
Principles
Stateless Services Ephemeral Instances Everything fails all the
time Auto Scaling / Down
Scaling Multi AZ and multi
Region No SPOF Design for Failure
(expected)
SOA Microservices No Central Database NoSQL Lightweight Serializable
Objects Latency tolerant
protocols DevOps Enabler
Immutable Infrastructure Anti-Fragility
Reactive Extensions + Netty Server Lower Latency under Heavy Load Fewer Locks, Fewer Thread Migrations Consumes Less CPU Lower Object Allocation Rate
RxNetty
Eureka and Service Discovery
http://microservices.io/patterns/server-side-discovery.html
Eureka
AWS Service Registry for Mid-tier Load balancing and Failover REST based Karyon and Ribbon Integration
IPC Library Client Side Load Balancing Multi-Protocol (HTTP, TCP, UDP) Caching* Batching Reactive
Ribbon
Reactive Extension of the JVM Async/Event based programming Observer Pattern Less 1mb Heavy usage by Netflix OSS Stack
RX-Java
Archaius
Configuration Management Solution Dynamic and Typed Properties High Throughtput and Thread Safety Callbacks: Notifications of config changes JMX Beans Dynamic Config Sources: File, Db, DynamoDB, Zookeper Based on Apache Commons Configuration
Archaius + Git
MicroserviceMicroservice Slave Side Car
CentralInternal GIT Property
Files
File System
MicroserviceMicroservice Slave Side Car
File System
MicroserviceMicroservice Slave Side Car
File System
Dynomite
Implements the Amazon DynamoSimilar to Cassandra, Riak and DynamoDB
Strong Consistency – Quorum-like – No Data LossPluggable ScalableRedis / MemcachedMulti-Clients with DynoCan use most of redis commandsIntegrated with Eureka via Prana
Isolate Failure – Avoid cascading Redundancy – NO SPOF Auto-Scaling Fault Tolerance and Isolation Recovery Fallbacks and Degraded Experience Protect Customer from failures – Don’t throw Failures ->
Failures VS Errors
Dynomite: Distributed Cache
Oregon D1
Oregon D2
N California D3
Eureka Server
Eureka Server
Prana
Prana
Prana
Multi-Region Cluster
Dynomite Contributions
https://github.com/Netflix/dynomite
https://github.com/Netflix/dynomite/pull/207
https://github.com/Netflix/dynomite/pull/200
Chaos Results and Learnings
Retry configuration and Timeouts in Ribbon Right Class in Zuul 1.x (default retry only SocketException)
RequestSpecificRetryHandler (Httpclient Exceptions) zuul.client.ribbon.MaxAutoRetries=1 zuul.client.ribbon.MaxAutoRetriesNextServer=1 zuul.client.ribbon.OkToRetryOnAllOperations=true
Eureka Timeouts It Works Everything needs to have redudancy ASG is your friend :-) Stateless Service FTW
Chaos Results and Learnings
Before: Data was not in Elastic Search Producers was loosing data
After: No Data Loss It Works
Changes: No logging on Microservice :( (Log was added) Code that publish events on a try-catch Retry config in kafka producer from 0 to 5
Pocs
https://github.com/diegopacheco/netflixoss-pocs
http://diego-pacheco.blogspot.com.br/search/label/netflix?max-results=30