guday netflix oss

56

Upload: cristiano-altmann

Post on 22-Jan-2018

91 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Guday netflix oss
Page 2: Guday netflix oss

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/

Page 3: Guday netflix oss

this.presentation

RuntimeServices open netflix

● Discovery: Eureka

● Gateway: Zuul

● Service communication: Ribbon

● Service client: Feign

● Service reliability: Hystrix

Page 4: Guday netflix oss

● 98,7 milhões assinantes (02/17)

● 42,5 bilhões horas em streaming

(2016)

● Percentual de market share nos

EUA: 75%

Netflix

Page 5: Guday netflix oss

● Valor estimado empresa: $ 60 bi

● Receita 1T2017 $ 2.5 B

● Incluindo DVD: $ 2.63 B

Netflix

Page 6: Guday 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: Guday netflix oss

● 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

Page 8: Guday netflix oss

● 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

Page 9: Guday netflix oss

Netflix open source stack

Eureka

APP-2

APP-1

APP-2

zuulribbon

feign

hystrix

Page 10: Guday netflix oss

Netflix open source stack

Eureka

APP-2

APP-1

APP-2

zuulribbon

feign

hystrix

Page 11: Guday netflix oss

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

● Serviço de discoverability

● Componente central da plataforma

● Baseado em REST

Eureka

Page 12: Guday netflix oss

Tradicionalmente

VM10.1.12.254:4566

DNSmeusservico.com.br/service

Page 13: Guday netflix oss

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

Page 14: Guday netflix oss

Microserviços + cloud native

Serviço10.1.12.254:4566

Client Eureka1 - Solicita serviços endpoint

Page 15: Guday netflix oss

Eureka lifecycle - register

Client Eureka

Register

Application nameHostPortDS-Zone

Dados serviços registrados

Page 16: Guday netflix oss

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)

Page 17: Guday netflix oss

Eureka lifecycle - heartbeating fail

Client Eureka

Page 18: Guday netflix oss

Eureka lifecycle - rises heartbeating

Client EurekaPing

Dados

Page 19: Guday netflix oss

Eureka lifecycle - shutdown gracefully

Client EurekaCancel

Page 20: Guday netflix oss

Netflix - Eureka Server

Page 21: Guday netflix oss

Netflix - Eureka Server

Page 22: Guday netflix oss

Netflix - Eureka Client

Page 23: Guday netflix oss

Netflix - Eureka Client

Page 24: Guday netflix oss

Netflix - Eureka Client

Page 25: Guday netflix oss

Netflix - Eureka Server

Page 26: Guday netflix oss

● 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

Page 27: Guday netflix oss

Feign + Ribbon

Eureka

APP-2

APP-1

APP-2

zuulribbon

feign

hystrix

Page 28: Guday netflix oss

● Lib para comunicação entre processos.

● Client Load Balancer.

● Tolerância a falhas

● Múltiplos protocolos (HTTP, TCP, UDP)

Netflix - Ribbon

Page 29: Guday netflix oss

Netflix - Ribbon

APP-1

APP-2

APP-2

Eureka

Page 30: Guday netflix oss

Netflix - Ribbon

APP-1

APP-2

APP-2

Eureka

Page 31: Guday netflix oss

Netflix - Ribbon

APP-1

APP-2

APP-2

Eureka

Page 32: Guday netflix oss

● RoundRobinRule

● AvailabilityFilteringRule

● WeightedResponseTimeRule

● ZoneAvoidanceRule

Netflix - Ribbon

Page 33: Guday netflix oss

Netflix - App-2 exemplo

Page 34: Guday netflix oss

Netflix - Eureka Client Load Balancer

application-name

Page 35: Guday netflix oss

Netflix - Ribbon round robin

Page 36: Guday netflix oss

Netflix - Ribbon round robin

Page 37: Guday netflix oss

Netflix - Ribbon Rule

Page 38: Guday netflix oss

● REST Client

● Integrate via REST Contract

● Utiliza ribbon

● @EnableFeignClients

Netflix - Feign

Page 39: Guday netflix oss

● Uma interface com as configurações do contrato do serviço REST

Netflix - Feign

Page 40: Guday netflix oss

Netflix - Feign

Page 41: Guday netflix oss

● Injeta no código a interface

● Runtime existirá um @Bean para este RestClient (@EnableFeignClients)

● Chamada java simples

Netflix - Feign

Page 42: Guday netflix oss

Netflix - Feign call

Page 43: Guday netflix oss

Hystrix

Eureka

APP-2

APP-1

APP-2

zuulribbon

feign

hystrix

Page 44: Guday netflix oss

● Circuit break pattern

● Timeout

● Fallback

● Metrics

Page 45: Guday netflix oss

Netflix - Hystrix

Page 46: Guday netflix oss

Netflix - Hystrix Command

Page 47: Guday netflix oss

● Turbine stream

● Dashboard com metricas

● Diversos indicadores:

○ Status circuito

○ Latência

○ Request rate

○ Percentual erro últimos 10 requests

Netflix - Hystrix stream

Page 48: Guday netflix oss

Netflix - Hystrix

Page 49: Guday netflix oss

Netflix - @EnableHystrixDashboard

Page 50: Guday netflix oss

● Time amadurecendo o uso

● Dificuldade negócio entender o "fallback"

● Problemas com erros 4xx

● Dashboard pouco usual

Netflix - Hystrix stream

Page 51: Guday netflix oss

Zuul

Eureka

APP-2

APP-1

APP-2

zuulribbon

feign

hystrix

Page 52: Guday netflix oss

● Gateway

● Dynamic routing

● Integração eureka

● Filters

● Canary

● AB

Netflix - Zuul

Page 53: Guday netflix oss

Netflix - Zuul

ZuulEureka

Client

Serviço A Serviço B

Page 54: Guday netflix oss

@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

Page 55: Guday netflix oss

Netflix - Zuul

ZuulEureka

Client

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

AB FILTER

Page 56: Guday netflix oss

Obrigado.Dúvidas?