Netflix oss

69

Transcript of Netflix oss

Page 1: Netflix oss
Page 2: 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/

Page 3: Netflix oss

this.presentation

RuntimeServices open netflix

Discovery: Eureka

Gateway: Zuul

Service communication: Ribbon

Service client: Feign

Service reliability: Hystrix

Page 4: Netflix oss

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

Page 5: Netflix oss

Valor estimado empresa: $ 60 bi

Receita 1T2017 $ 2.5 B

Incluindo DVD: $ 2.63 B

Netflix

Page 6: Netflix oss

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

Page 7: Netflix oss

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

Page 8: Netflix oss

Archaius

Atlas (Billion metrics per minute)

Governator

Prana

Spinnaker

etc.

Netflix open source stack

Page 9: Netflix oss

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

Page 10: Netflix oss

Netflix open source stack

Eureka

APP-2

APP-1

APP-2

zuulribbon

feign

hystrix

Page 11: Netflix oss

Netflix open source stack

Eureka

APP-2

APP-1

APP-2

zuulribbon

feign

hystrix

Page 12: Netflix oss

Interjeição atribuída a Arquimedes: Encontrei, Descobri.

Serviço de discoverability

Componente central da plataforma

Baseado em REST

Eureka

Page 13: Netflix oss

Tradicionalmente

Weblogic10.1.12.254:4566

DNSmeusservico.com.be/service

Page 14: Netflix oss

Microserviços + cloud native

Serviço10.1.12.254:4566

Serviço10.1.12.1:1000

Serviço OUT10.1.12.254:4566

client

Page 15: Netflix oss

E agora?

Page 16: Netflix oss

Microserviços + cloud native

Serviço10.1.12.254:4566

client EurekaSolicita endpoint

Page 17: Netflix oss

Netflix - EurekaE

Page 18: Netflix oss

Eureka lifecycle - register

client Eureka

Register

Application nameHostPortDS-Zone

Dados serviços registrados

Page 19: Netflix oss

Eureka lifecycle - heartbeating

client Eureka

Ping

Application nameHostPortDS-Zone

Dados

Page 20: Netflix oss

Eureka lifecycle - heartbeating fail

client Eureka

Page 21: Netflix oss

Eureka lifecycle - rises heartbeating

client Eureka

Ping

Dados

Page 22: Netflix oss

Eureka lifecycle - shutdown gracefully

client EurekaCancel

Page 23: Netflix oss

Netflix - Eureka Server

Page 24: Netflix oss

Netflix - Eureka Server

Page 25: Netflix oss

Netflix - Eureka Client

Page 26: Netflix oss

Netflix - Eureka Client

Page 27: Netflix oss

Netflix - Eureka Client

Page 28: Netflix oss

Netflix - Eureka Server

Page 29: Netflix oss

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

Page 30: Netflix oss

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

Page 31: Netflix oss

Netflix - Eureka v2

Page 32: Netflix oss

Executar chamadas

Page 33: Netflix oss

Feign + Ribbon

Eureka

APP-2

APP-1

APP-2

zuulribbon

feign

hystrix

Page 34: Netflix oss

Lib para comunicação entre processos.

Client Load Balancer.

Tolerância a falhas

Múltiplos protocolos (HTTP, TCP, UDP)

Netflix - Ribbon

Page 35: Netflix oss

Netflix - Ribbon

APP-1

APP-2

APP-2

Eureka

Page 36: Netflix oss

Netflix - Ribbon

APP-1

APP-2

APP-2

Eureka

Page 37: Netflix oss

Netflix - Ribbon

APP-1

APP-2

APP-2

Eureka

Page 38: Netflix oss

RoundRobinRule

AvailabilityFilteringRule

WeightedResponseTimeRule

ZoneAvoidanceRule

Netflix - Ribbon

Page 39: Netflix oss

Netflix - App-2 exemplo

Page 40: Netflix oss

Netflix - Eureka Client Load Balancer

application-name

Page 41: Netflix oss

Netflix - Ribbon round robin

Page 42: Netflix oss

Netflix - Ribbon round robin

Page 43: Netflix oss

Netflix - Ribbon Rule

Page 44: Netflix oss

REST Client

Integrate via REST Contract

Utiliza ribbon

@EnableFeignClients

Netflix - Feign

Page 45: Netflix oss

Netflix - Feign

Page 46: Netflix oss

Netflix - Feign call

Page 47: Netflix oss

POR MELHOR QUE SEJA A EQUIPE

Page 48: Netflix oss

sh** happens

Page 49: Netflix oss

Hystrix

Eureka

APP-2

APP-1

APP-2

zuulribbon

feign

hystrix

Page 50: Netflix oss

Circuit break pattern

Timeout

Fallback

Metrics

Page 51: Netflix oss

Netflix - Hystrix

Page 52: Netflix oss

circuitBreaker.requestVolumeThreshold

Qtde para abrir o circuito na janela tempo

circuitBreaker.sleepWindowInMilliseconds

Tempo para começar a passar algum request novamente

Page 53: Netflix oss
Page 54: Netflix oss
Page 55: Netflix oss

Netflix - Hystrix Command

Page 56: Netflix oss

Turbine stream

Dashboard com metricas

Diversos indicadores:

Status circuito

Latência

Request rate

Percentual erro últimos 10 requests

Netflix - Hystrix stream

Page 57: Netflix oss

Netflix - Hystrix

Page 58: Netflix oss

Netflix - @EnableHystrixDashboard

Page 59: Netflix oss

Time amadurecendo o uso

Dificuldade negócio entender o "fallback"

Problemas com erros 4xx

Dashboard pouco usual

Netflix - Hystrix stream

Page 60: Netflix oss

MÉTRICAS…. MUITAS MÉTRICAS

Page 61: Netflix oss

Netflix -

Page 62: Netflix oss

Zuul

Eureka

APP-2

APP-1

APP-2

zuulribbon

feign

hystrix

Page 63: Netflix oss

Netflix - Zuul

Page 64: Netflix oss

Gateway

Dynamic routing

Integração eureka

Filters

Canary

AB

Netflix - Zuul

Page 65: Netflix oss

Netflix - Zuul

ZuulEureka

Client

Serviço A Serviço B

Page 66: Netflix oss

@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

Page 67: Netflix oss

Netflix - Zuul

ZuulEureka

Client

Serviço A Serviço BServiço A'

AB FILTER

Page 68: Netflix oss

Netflix - Rx

Page 69: Netflix oss