SlideShare uma empresa Scribd logo
1 de 21
Tecnologias Netflix OSS
The Developers Conference - 2015
Danival Taffarel Calegari
● Mestre em Ciência da Computação - UNICAMP
● Mais de 14 anos desenvolvendo aplicações Java e Java EE
● Líder Técnico na MATERA Systems
● Instrutor na Globalcode
● Palestras em diversos eventos: JavaOne, TDC, JustJava,
DevCamp, …
● Certificações: SCJP, SCWCD, SCBCD
Conteúdo
● Introdução
● Arquitetura
● Eureka
● Archaius
● Governator e Karyon
● Ribbon e Hystrix
● Demo
Introdução
● Netflix OSS – Netflix Open Source Software
Introdução
● Solução para diversos problemas comuns em aplicações na
nuvem
● Bibliotecas e aplicações
● Forte ligação com AWS e microservices
● Licença Apache
● Integração com outras tecnologias
● Guice
● Spring já possui simplificações para uso das tecnologias
● http://cloud.spring.io/spring-cloud-netflix/
Arquitetura
Eureka
● Eureka é um servidor que fornece serviços REST para
localizar servidores na camada do middle.
● Faz balanceamento de carga e provê tolerância a falhas.
● Permite o monitoramento de disponibilidade das aplicações.
Eureka
● Eureka Server
● war para deploy no Tomcat
● Usa um Eureka Client para se comunicar com outros Eureka Servers
● Eureka Client
● Cliente Java para facilitar as iterações com o server
● Faz cache da localização dos serviços e load balancer básico (round
robin).
● Trabalha com serviços stateless
● Não faz sticky session
● No Netflix um load balancer mais sofisticado (que usa pesos
com vários fatores) encapsula o Eureka.
Eureka
Eureka
● Configuração do Eureka Client:
● Procura automaticamente o arquivo eureka-client.properties no
classpath.
● Pode ter um arquivo por ambiente
● eureka-client-test.properties
● eureka-client-prod.properties
● -Deureka.environment=[test|prod]
● Configuração mínima
● eureka.name = nome a aplicação (ex. playlistmiddle)
● eureka.port = porta na qual a aplicação está executando
● eureka.vipAddress = nome da aplicação no registro (ex.
playlistmiddle.matera.com)
● eureka.serviceUrls = endereço dos servidores Eureka para consultar
● Eureka Server tem configurações semelhantes.
Archaius
● Gerenciamento de propriedades com configurações
compostas e com hierarquia
● Extensão do commons-configuration da Apache
● Propriedades dinâmicas e com tipo
● Mecanismo de polling para obter mudanças de propriedades
de uma fonte de configuração.
● Mecanismo de callback para mudanças de valores
● JMXBean que pode ser acessado por um JConsole
Archaius
Archaius
● Obtendo uma configuração:
● Registrando um callback
● Criando uma fonte de configurações
public class DBConfigurationSource implements PolledConfigurationSource {
// ...
@Override
public PollResult poll(boolean initial, Object checkPoint)
throws Exception {
// implement logic to retrieve properties from DB
}
}
DynamicIntProperty prop =
DynamicPropertyFactory.getInstance().getIntProperty("myProperty",
DEFAULT_VALUE);
myMethod(prop.get());
prop.addCallback(new Runnable() {
public void run() {
// ...
}
});
Governator e Karyon
● Governator
● Melhorias para o Google Guice
● Gerenciamento de ciclo de vida
● Simplifica o bootstrapping do Guice
● Karyon
● Parte da célula que contém o DNA e o RNA e é responsável pelo seu
crescimento e reprodução.
● Contém os templates para configurar bibliotecas e deixá-las prontas
para uso.
● Bootstrapping , dependency and Lifecycle Management (via Governator)
● Runtime Insights and Diagnostics (via karyon-admin-web module)
● Configuration Management (via Archaius)
● Service discovery (via Eureka)
● Powerful transport module (via RxNetty)
Governator e Karyon
package com.matera.playlistmiddle.config;
import com.netflix.governator.guice.BootstrapBinder;
import com.netflix.karyon.server.ServerBootstrap;
public class Bootstrap extends ServerBootstrap {
@Override
protected void configureBootstrapBinder(BootstrapBinder bootstrapBinder) {
bootstrapBinder.install(new RestModule());
}
}
Governator e Karyon
● config.properties
● playlistmiddle.properties
archaius.deployment.applicationId=playlistmiddle
com.netflix.karyon.server.bootstrap.class=com.matera.playlistmiddle.
config.Bootstrap
# Eureka runtime configuration
com.netflix.karyon.eureka.disable=false
com.netflix.karyon.disable.app.discovery=false
netflix.platform.admin.resources.port=9093
com.netflix.karyon.unify.health.check.with.eureka=true
Ribbon e Hystrix
● Ribbon
● Serviço de RPC com balanceamento de carga
● Chamadas REST com diversos mecanismos de serialização
● Integração com Eureka
● Hystrix
● Biblioteca para tratar latência e tolerância a falha
● Utiliza biblioteca de ReactiveX/RxJava
Ribbon e Hystrix
public class CommandHelloWorld extends HystrixCommand<String> {
private final String name;
public CommandHelloWorld(String name) {
super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
this.name = name;
}
@Override
protected String run() {
// a real example would do work like a network call here
return "Hello " + name + "!";
}
}
● Command
● Execução
Observable<String> co = new CommandHelloWorld("World").toObservable();
assertEquals("Hello World!", co.toBlockingObservable().single());
Ribbon e Hystrix
@Override
protected PlayListResponseMiddle run() throws Exception {
HttpRequest request =
HttpRequest.newBuilder().uri(PLAYLIST_URL)
.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON).build();
try (HttpResponse response =
restClient.executeWithLoadBalancer(request)) {
return mapper.readValue(response.getInputStream(),
PlayListResponseMiddle.class);
}
}
Demo
● https://github.com/wfuertes/playlist-core
● https://github.com/wfuertes/playlist-middle
● https://github.com/wfuertes/playlist-client
● https://github.com/wfuertes/playlist-edge
Obrigado!
● Danival Taffarel Calegari
● @danivaltc
● http://pt.slideshare.net/DanivalCalegari

Mais conteúdo relacionado

Mais procurados

Escalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIEscalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIMatheus Espanhol
 
Docker Swarm Cluster
Docker Swarm ClusterDocker Swarm Cluster
Docker Swarm ClusterFernando Ike
 
MySQL 5.7 Multi-Source Replication
MySQL 5.7 Multi-Source ReplicationMySQL 5.7 Multi-Source Replication
MySQL 5.7 Multi-Source ReplicationWagner Bianchi
 
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootWorkshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootRodrigo Cândido da Silva
 
UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6Wagner Bianchi
 
UNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - ReplicaçãoUNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - ReplicaçãoWagner Bianchi
 
Opennebula Introdução
Opennebula IntroduçãoOpennebula Introdução
Opennebula IntroduçãoLuís Eduardo
 
Docker 1.12 - Swarm Mode
Docker 1.12 - Swarm ModeDocker 1.12 - Swarm Mode
Docker 1.12 - Swarm ModeRafael Gomes
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machineBruno Coan
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanJuliano Atanazio
 
Orquestração de containers com Rancher
Orquestração de containers com RancherOrquestração de containers com Rancher
Orquestração de containers com RancherAlex Ishida
 
Containers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteContainers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteRoberto Mello
 
Monitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosMonitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosEduardo Legatti
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginnersRafael Chiavegatto
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...Renato Groff
 

Mais procurados (20)

MicroProfile benefits for monolitic applications
MicroProfile benefits for monolitic applicationsMicroProfile benefits for monolitic applications
MicroProfile benefits for monolitic applications
 
Escalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool IIEscalabilidade horizontal com PostgreSQL e Pgpool II
Escalabilidade horizontal com PostgreSQL e Pgpool II
 
Docker Swarm Cluster
Docker Swarm ClusterDocker Swarm Cluster
Docker Swarm Cluster
 
MySQL 5.7 Multi-Source Replication
MySQL 5.7 Multi-Source ReplicationMySQL 5.7 Multi-Source Replication
MySQL 5.7 Multi-Source Replication
 
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootWorkshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring Boot
 
UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6
 
UNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - ReplicaçãoUNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - Replicação
 
Nagios
NagiosNagios
Nagios
 
Opennebula Introdução
Opennebula IntroduçãoOpennebula Introdução
Opennebula Introdução
 
Docker 1.12 - Swarm Mode
Docker 1.12 - Swarm ModeDocker 1.12 - Swarm Mode
Docker 1.12 - Swarm Mode
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machine
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarman
 
Orquestração de containers com Rancher
Orquestração de containers com RancherOrquestração de containers com Rancher
Orquestração de containers com Rancher
 
Containers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteContainers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container Suite
 
Monitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosMonitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - Nagios
 
Olá docker
Olá dockerOlá docker
Olá docker
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginners
 
Consegi 2011: Ganeti + Puppet
Consegi 2011: Ganeti + PuppetConsegi 2011: Ganeti + Puppet
Consegi 2011: Ganeti + Puppet
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
 
Crud
CrudCrud
Crud
 

Destaque

Cassandra EU 2012 - Netflix's Cassandra Architecture and Open Source Efforts
Cassandra EU 2012 - Netflix's Cassandra Architecture and Open Source EffortsCassandra EU 2012 - Netflix's Cassandra Architecture and Open Source Efforts
Cassandra EU 2012 - Netflix's Cassandra Architecture and Open Source EffortsAcunu
 
Netshoes - API Gateway
Netshoes - API GatewayNetshoes - API Gateway
Netshoes - API GatewayMarcos Barbero
 
Service discovery with Eureka and Spring Cloud
Service discovery with Eureka and Spring CloudService discovery with Eureka and Spring Cloud
Service discovery with Eureka and Spring CloudMarcelo Serpa
 
Cassandra Operations at Netflix
Cassandra Operations at NetflixCassandra Operations at Netflix
Cassandra Operations at Netflixgreggulrich
 
Power, patterns and pains of microservices
Power, patterns and pains of microservicesPower, patterns and pains of microservices
Power, patterns and pains of microservicesMarcos Barbero
 

Destaque (6)

Cassandra EU 2012 - Netflix's Cassandra Architecture and Open Source Efforts
Cassandra EU 2012 - Netflix's Cassandra Architecture and Open Source EffortsCassandra EU 2012 - Netflix's Cassandra Architecture and Open Source Efforts
Cassandra EU 2012 - Netflix's Cassandra Architecture and Open Source Efforts
 
Princípios S.O.L.I.D.
Princípios S.O.L.I.D.Princípios S.O.L.I.D.
Princípios S.O.L.I.D.
 
Netshoes - API Gateway
Netshoes - API GatewayNetshoes - API Gateway
Netshoes - API Gateway
 
Service discovery with Eureka and Spring Cloud
Service discovery with Eureka and Spring CloudService discovery with Eureka and Spring Cloud
Service discovery with Eureka and Spring Cloud
 
Cassandra Operations at Netflix
Cassandra Operations at NetflixCassandra Operations at Netflix
Cassandra Operations at Netflix
 
Power, patterns and pains of microservices
Power, patterns and pains of microservicesPower, patterns and pains of microservices
Power, patterns and pains of microservices
 

Semelhante a Netflix OSS: Eureka, Archaius, Governator, Ribbon e Hystrix

k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetesk6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
k6: Performance Engineering, Monitoramento e Teste de um HPA no KubernetesKelvin Silva
 
Terraform + Kops + Kubernetes na AWS
Terraform + Kops + Kubernetes na AWSTerraform + Kops + Kubernetes na AWS
Terraform + Kops + Kubernetes na AWSLeandro Freitas
 
Novidades do Universo MySQL Agosto 2014
Novidades do Universo MySQL Agosto 2014Novidades do Universo MySQL Agosto 2014
Novidades do Universo MySQL Agosto 2014MySQL Brasil
 
Conheça o Quarkus Java: Supersonic Subatomic Java
Conheça o Quarkus Java: Supersonic Subatomic JavaConheça o Quarkus Java: Supersonic Subatomic Java
Conheça o Quarkus Java: Supersonic Subatomic JavaMarcus Paulo
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes Rhuan Karlus Silva
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...Renato Groff
 
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018Renato Groff
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETslides_teltools
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...Renato Groff
 
Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3Ricardo Katz
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 
Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...
Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...
Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...Renato Groff
 

Semelhante a Netflix OSS: Eureka, Archaius, Governator, Ribbon e Hystrix (20)

Java Seminar
Java SeminarJava Seminar
Java Seminar
 
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetesk6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
 
Terraform + Kops + Kubernetes na AWS
Terraform + Kops + Kubernetes na AWSTerraform + Kops + Kubernetes na AWS
Terraform + Kops + Kubernetes na AWS
 
Novidades do Universo MySQL Agosto 2014
Novidades do Universo MySQL Agosto 2014Novidades do Universo MySQL Agosto 2014
Novidades do Universo MySQL Agosto 2014
 
Conheça o Quarkus Java: Supersonic Subatomic Java
Conheça o Quarkus Java: Supersonic Subatomic JavaConheça o Quarkus Java: Supersonic Subatomic Java
Conheça o Quarkus Java: Supersonic Subatomic Java
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
 
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
 
Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
Cloudformation
CloudformationCloudformation
Cloudformation
 
5. rodando containers docker na aws
5. rodando containers docker na aws5. rodando containers docker na aws
5. rodando containers docker na aws
 
Java Nuvem Appengine
Java Nuvem AppengineJava Nuvem Appengine
Java Nuvem Appengine
 
Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...
Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...
Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...
 
Rails nas Nuvens
Rails nas NuvensRails nas Nuvens
Rails nas Nuvens
 

Mais de Danival Calegari

TDC 2014 - Java 8: Expressões Lambda e API de Stream
TDC 2014 - Java 8: Expressões Lambda e API de StreamTDC 2014 - Java 8: Expressões Lambda e API de Stream
TDC 2014 - Java 8: Expressões Lambda e API de StreamDanival Calegari
 
Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Danival Calegari
 
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013Danival Calegari
 
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvem
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvemEvitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvem
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvemDanival Calegari
 
JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...
JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...
JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...Danival Calegari
 
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJBPolis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJBDanival Calegari
 
JSR 352 Batch Applications for the Java Platform
JSR 352 Batch Applications for the Java PlatformJSR 352 Batch Applications for the Java Platform
JSR 352 Batch Applications for the Java PlatformDanival Calegari
 

Mais de Danival Calegari (7)

TDC 2014 - Java 8: Expressões Lambda e API de Stream
TDC 2014 - Java 8: Expressões Lambda e API de StreamTDC 2014 - Java 8: Expressões Lambda e API de Stream
TDC 2014 - Java 8: Expressões Lambda e API de Stream
 
Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Java 8 - Expressões Lambda e Stream API - DevCamp 2014
Java 8 - Expressões Lambda e Stream API - DevCamp 2014
 
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013
 
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvem
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvemEvitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvem
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvem
 
JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...
JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...
JavaOne 2012 - BOF7955 ­ Avoiding Java EE Application Design Traps to Achieve...
 
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJBPolis Hyperlink Dicas e truques de Performance para JPA e EJB
Polis Hyperlink Dicas e truques de Performance para JPA e EJB
 
JSR 352 Batch Applications for the Java Platform
JSR 352 Batch Applications for the Java PlatformJSR 352 Batch Applications for the Java Platform
JSR 352 Batch Applications for the Java Platform
 

Netflix OSS: Eureka, Archaius, Governator, Ribbon e Hystrix

  • 1. Tecnologias Netflix OSS The Developers Conference - 2015
  • 2. Danival Taffarel Calegari ● Mestre em Ciência da Computação - UNICAMP ● Mais de 14 anos desenvolvendo aplicações Java e Java EE ● Líder Técnico na MATERA Systems ● Instrutor na Globalcode ● Palestras em diversos eventos: JavaOne, TDC, JustJava, DevCamp, … ● Certificações: SCJP, SCWCD, SCBCD
  • 3. Conteúdo ● Introdução ● Arquitetura ● Eureka ● Archaius ● Governator e Karyon ● Ribbon e Hystrix ● Demo
  • 4. Introdução ● Netflix OSS – Netflix Open Source Software
  • 5. Introdução ● Solução para diversos problemas comuns em aplicações na nuvem ● Bibliotecas e aplicações ● Forte ligação com AWS e microservices ● Licença Apache ● Integração com outras tecnologias ● Guice ● Spring já possui simplificações para uso das tecnologias ● http://cloud.spring.io/spring-cloud-netflix/
  • 7. Eureka ● Eureka é um servidor que fornece serviços REST para localizar servidores na camada do middle. ● Faz balanceamento de carga e provê tolerância a falhas. ● Permite o monitoramento de disponibilidade das aplicações.
  • 8. Eureka ● Eureka Server ● war para deploy no Tomcat ● Usa um Eureka Client para se comunicar com outros Eureka Servers ● Eureka Client ● Cliente Java para facilitar as iterações com o server ● Faz cache da localização dos serviços e load balancer básico (round robin). ● Trabalha com serviços stateless ● Não faz sticky session ● No Netflix um load balancer mais sofisticado (que usa pesos com vários fatores) encapsula o Eureka.
  • 10. Eureka ● Configuração do Eureka Client: ● Procura automaticamente o arquivo eureka-client.properties no classpath. ● Pode ter um arquivo por ambiente ● eureka-client-test.properties ● eureka-client-prod.properties ● -Deureka.environment=[test|prod] ● Configuração mínima ● eureka.name = nome a aplicação (ex. playlistmiddle) ● eureka.port = porta na qual a aplicação está executando ● eureka.vipAddress = nome da aplicação no registro (ex. playlistmiddle.matera.com) ● eureka.serviceUrls = endereço dos servidores Eureka para consultar ● Eureka Server tem configurações semelhantes.
  • 11. Archaius ● Gerenciamento de propriedades com configurações compostas e com hierarquia ● Extensão do commons-configuration da Apache ● Propriedades dinâmicas e com tipo ● Mecanismo de polling para obter mudanças de propriedades de uma fonte de configuração. ● Mecanismo de callback para mudanças de valores ● JMXBean que pode ser acessado por um JConsole
  • 13. Archaius ● Obtendo uma configuração: ● Registrando um callback ● Criando uma fonte de configurações public class DBConfigurationSource implements PolledConfigurationSource { // ... @Override public PollResult poll(boolean initial, Object checkPoint) throws Exception { // implement logic to retrieve properties from DB } } DynamicIntProperty prop = DynamicPropertyFactory.getInstance().getIntProperty("myProperty", DEFAULT_VALUE); myMethod(prop.get()); prop.addCallback(new Runnable() { public void run() { // ... } });
  • 14. Governator e Karyon ● Governator ● Melhorias para o Google Guice ● Gerenciamento de ciclo de vida ● Simplifica o bootstrapping do Guice ● Karyon ● Parte da célula que contém o DNA e o RNA e é responsável pelo seu crescimento e reprodução. ● Contém os templates para configurar bibliotecas e deixá-las prontas para uso. ● Bootstrapping , dependency and Lifecycle Management (via Governator) ● Runtime Insights and Diagnostics (via karyon-admin-web module) ● Configuration Management (via Archaius) ● Service discovery (via Eureka) ● Powerful transport module (via RxNetty)
  • 15. Governator e Karyon package com.matera.playlistmiddle.config; import com.netflix.governator.guice.BootstrapBinder; import com.netflix.karyon.server.ServerBootstrap; public class Bootstrap extends ServerBootstrap { @Override protected void configureBootstrapBinder(BootstrapBinder bootstrapBinder) { bootstrapBinder.install(new RestModule()); } }
  • 16. Governator e Karyon ● config.properties ● playlistmiddle.properties archaius.deployment.applicationId=playlistmiddle com.netflix.karyon.server.bootstrap.class=com.matera.playlistmiddle. config.Bootstrap # Eureka runtime configuration com.netflix.karyon.eureka.disable=false com.netflix.karyon.disable.app.discovery=false netflix.platform.admin.resources.port=9093 com.netflix.karyon.unify.health.check.with.eureka=true
  • 17. Ribbon e Hystrix ● Ribbon ● Serviço de RPC com balanceamento de carga ● Chamadas REST com diversos mecanismos de serialização ● Integração com Eureka ● Hystrix ● Biblioteca para tratar latência e tolerância a falha ● Utiliza biblioteca de ReactiveX/RxJava
  • 18. Ribbon e Hystrix public class CommandHelloWorld extends HystrixCommand<String> { private final String name; public CommandHelloWorld(String name) { super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup")); this.name = name; } @Override protected String run() { // a real example would do work like a network call here return "Hello " + name + "!"; } } ● Command ● Execução Observable<String> co = new CommandHelloWorld("World").toObservable(); assertEquals("Hello World!", co.toBlockingObservable().single());
  • 19. Ribbon e Hystrix @Override protected PlayListResponseMiddle run() throws Exception { HttpRequest request = HttpRequest.newBuilder().uri(PLAYLIST_URL) .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON).build(); try (HttpResponse response = restClient.executeWithLoadBalancer(request)) { return mapper.readValue(response.getInputStream(), PlayListResponseMiddle.class); } }
  • 20. Demo ● https://github.com/wfuertes/playlist-core ● https://github.com/wfuertes/playlist-middle ● https://github.com/wfuertes/playlist-client ● https://github.com/wfuertes/playlist-edge
  • 21. Obrigado! ● Danival Taffarel Calegari ● @danivaltc ● http://pt.slideshare.net/DanivalCalegari