Download - Netflix oss
About.me
Desenvolvedor de software 10 anos
Java (JavaEE e Spring), Magic, JS, C, Delphi… (sim, Delphi…)
Diferentes tipos de projetos e empresas
Sites
B2C
B2B
Atualmente arquiteto de software na Ilegra
https://www.linkedin.com/in/crisaltmann/
this.presentation
RuntimeServices open netflix
Discovery: Eureka
Gateway: Zuul
Service communication: Ribbon
Service client: Feign
Service reliability: Hystrix
98,7 milhões assinantes
(02/17)
1T2017: +5 M
42,5 bilhões horas em
streaming (2016)
Percentual de market share
nos EUA: 75%
Netflix
Valor estimado empresa: $ 60 bi
Receita 1T2017 $ 2.5 B
Incluindo DVD: $ 2.63 B
Netflix
Uso internet EUA:
Netflix: 37.5%
Youtube: 17%
Média de 45 Gb / mês por usuário
Subiram 329.400.000.000 Gb (2015)
Netflix
Referência em cloud, microserviços
Contribuição importante comunidade open source.
Referência em serviços resilientes
Em 02/2017, um datacenter da amazon caiu: ~150 k sites afetados
Site da amazon - OFF
Netflix - ON
https://netflix.github.io/
Netflix
Archaius
Atlas (Billion metrics per minute)
Governator
Prana
Spinnaker
etc.
Netflix open source stack
Spring Cloud Netflix (https://cloud.spring.io/spring-cloud-netflix/)
Totalmente integrado com a plataforma spring
Maioria do código envolve algumas poucas anotações.
Você ganha:
Spring (boot ou não)
Componentes que rodam e suportam todos aqueles números citados
A tua demanda supera isso?
Netflix open source stack
Netflix open source stack
Eureka
APP-2
APP-1
APP-2
zuulribbon
feign
hystrix
Netflix open source stack
Eureka
APP-2
APP-1
APP-2
zuulribbon
feign
hystrix
Interjeição atribuída a Arquimedes: Encontrei, Descobri.
Serviço de discoverability
Componente central da plataforma
Baseado em REST
Eureka
Tradicionalmente
Weblogic10.1.12.254:4566
DNSmeusservico.com.be/service
Microserviços + cloud native
Serviço10.1.12.254:4566
Serviço10.1.12.1:1000
Serviço OUT10.1.12.254:4566
client
E agora?
Microserviços + cloud native
Serviço10.1.12.254:4566
client EurekaSolicita endpoint
Netflix - EurekaE
Eureka lifecycle - register
client Eureka
Register
Application nameHostPortDS-Zone
Dados serviços registrados
Eureka lifecycle - heartbeating
client Eureka
Ping
Application nameHostPortDS-Zone
Dados
Eureka lifecycle - heartbeating fail
client Eureka
Eureka lifecycle - rises heartbeating
client Eureka
Ping
Dados
Eureka lifecycle - shutdown gracefully
client EurekaCancel
Netflix - Eureka Server
Netflix - Eureka Server
Netflix - Eureka Client
Netflix - Eureka Client
Netflix - Eureka Client
Netflix - Eureka Server
Configuração server peer exige o conhecimento dos outros servers.
Tempo default de heartbeating elevado para dev.
Pooling
Fetch todos serviços
Server peers replicam todo os dados para TODOS os peers.
Netflix - Eureka limitações v1
Client se registra informando quais atualizações ele deseja receber
Server enviam atualizações para os clients quando ocorrerem
Separação entre leitura / escrita.
Melhorias no algoritmo replicação
Rich dashboard
Netflix - Eureka v2
Netflix - Eureka v2
Executar chamadas
Feign + Ribbon
Eureka
APP-2
APP-1
APP-2
zuulribbon
feign
hystrix
Lib para comunicação entre processos.
Client Load Balancer.
Tolerância a falhas
Múltiplos protocolos (HTTP, TCP, UDP)
Netflix - Ribbon
Netflix - Ribbon
APP-1
APP-2
APP-2
Eureka
Netflix - Ribbon
APP-1
APP-2
APP-2
Eureka
Netflix - Ribbon
APP-1
APP-2
APP-2
Eureka
RoundRobinRule
AvailabilityFilteringRule
WeightedResponseTimeRule
ZoneAvoidanceRule
Netflix - Ribbon
Netflix - App-2 exemplo
Netflix - Eureka Client Load Balancer
application-name
Netflix - Ribbon round robin
Netflix - Ribbon round robin
Netflix - Ribbon Rule
REST Client
Integrate via REST Contract
Utiliza ribbon
@EnableFeignClients
Netflix - Feign
Netflix - Feign
Netflix - Feign call
POR MELHOR QUE SEJA A EQUIPE
sh** happens
Hystrix
Eureka
APP-2
APP-1
APP-2
zuulribbon
feign
hystrix
Circuit break pattern
Timeout
Fallback
Metrics
Netflix - Hystrix
circuitBreaker.requestVolumeThreshold
Qtde para abrir o circuito na janela tempo
circuitBreaker.sleepWindowInMilliseconds
Tempo para começar a passar algum request novamente
Netflix - Hystrix Command
Turbine stream
Dashboard com metricas
Diversos indicadores:
Status circuito
Latência
Request rate
Percentual erro últimos 10 requests
Netflix - Hystrix stream
Netflix - Hystrix
Netflix - @EnableHystrixDashboard
Time amadurecendo o uso
Dificuldade negócio entender o "fallback"
Problemas com erros 4xx
Dashboard pouco usual
Netflix - Hystrix stream
MÉTRICAS…. MUITAS MÉTRICAS
Netflix -
Zuul
Eureka
APP-2
APP-1
APP-2
zuulribbon
feign
hystrix
Netflix - Zuul
Gateway
Dynamic routing
Integração eureka
Filters
Canary
AB
Netflix - Zuul
Netflix - Zuul
ZuulEureka
Client
Serviço A Serviço B
@EnableZuulProxy
Config 1:
zuul.routes.pessoa.path=/pessoa/**
zuul.routes.pessoa.serviceId: pessoa-service
Config 2:
zuul.routes.pessoa.path=/pessoa/**
zuul.routes.pessoa.url: https://servico-pessoa.com.br
Netflix - Zuul
Netflix - Zuul
ZuulEureka
Client
Serviço A Serviço BServiço A'
AB FILTER
Netflix - Rx