guday netflix oss

Post on 22-Jan-2018

91 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

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