guday netflix oss
Post on 22-Jan-2018
91 Views
Preview:
TRANSCRIPT
About.me
● Desenvolvedor de software 10 anos
● 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)
● 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, micro serviç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
● Spring Cloud Netflix (https://cloud.spring.io/spring-cloud-netflix/)
● Totalmente integrado com a plataforma spring
● Simplicidade código
● Você ganha:
○ Spring
○ Componentes que rodam e suportam a demanda da netflix
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
VM10.1.12.254:4566
DNSmeusservico.com.br/service
Microserviços + cloud native
Serviço10.1.12.254:4566
Serviço NEW10.1.12.1:1000 (mudou)
Serviço OUT10.1.12.254:4566
Client
X
Microserviços + cloud native
Serviço10.1.12.254:4566
Client Eureka1 - Solicita serviços endpoint
Eureka lifecycle - register
Client Eureka
Register
Application nameHostPortDS-Zone
Dados serviços registrados
Eureka lifecycle - heartbeating
Client EurekaPing (heartbeating)
App1: 12.5.2.10:9008
App2: [12.5.2.10:9078, 12.5.2.10:9068]
DadosPong(heartbeating)
Eureka lifecycle - heartbeating fail
Client Eureka
Eureka lifecycle - rises heartbeating
Client EurekaPing
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
● Não há protocolo join cluster.
● 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
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
● Uma interface com as configurações do contrato do serviço REST
Netflix - Feign
Netflix - Feign
● Injeta no código a interface
● Runtime existirá um @Bean para este RestClient (@EnableFeignClients)
● Chamada java simples
Netflix - Feign
Netflix - Feign call
Hystrix
Eureka
APP-2
APP-1
APP-2
zuulribbon
feign
hystrix
● Circuit break pattern
● Timeout
● Fallback
● Metrics
Netflix - Hystrix
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
Zuul
Eureka
APP-2
APP-1
APP-2
zuulribbon
feign
hystrix
● 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.catalogo.path=/catalogo/**
zuul.routes.catalogo.serviceId: catalogo-service
● Config 2:
zuul.routes.catalogo.path=/catalogo-custom/**zuul.routes.catalogo.url: https://dns-do-catalogo.com.br
Netflix - Zuul
Netflix - Zuul
ZuulEureka
Client
Serviço A Serviço BServiço A'
AB FILTER
Obrigado.Dúvidas?
top related