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 Ja...
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 ...
Arquitetura
Eureka
● Eureka é um servidor que fornece serviços REST para
localizar servidores na camada do middle.
● Faz balanceamento...
Eureka
● Eureka Server
● war para deploy no Tomcat
● Usa um Eureka Client para se comunicar com outros Eureka Servers
● Eu...
Eureka
Eureka
● Configuração do Eureka Client:
● Procura automaticamente o arquivo eureka-client.properties no
classpath.
● Pode ...
Archaius
● Gerenciamento de propriedades com configurações
compostas e com hierarquia
● Extensão do commons-configuration ...
Archaius
Archaius
● Obtendo uma configuração:
● Registrando um callback
● Criando uma fonte de configurações
public class DBConfigu...
Governator e Karyon
● Governator
● Melhorias para o Google Guice
● Gerenciamento de ciclo de vida
● Simplifica o bootstrap...
Governator e Karyon
package com.matera.playlistmiddle.config;
import com.netflix.governator.guice.BootstrapBinder;
import ...
Governator e Karyon
● config.properties
● playlistmiddle.properties
archaius.deployment.applicationId=playlistmiddle
com.n...
Ribbon e Hystrix
● Ribbon
● Serviço de RPC com balanceamento de carga
● Chamadas REST com diversos mecanismos de serializa...
Ribbon e Hystrix
public class CommandHelloWorld extends HystrixCommand<String> {
private final String name;
public Command...
Ribbon e Hystrix
@Override
protected PlayListResponseMiddle run() throws Exception {
HttpRequest request =
HttpRequest.new...
Demo
● https://github.com/wfuertes/playlist-core
● https://github.com/wfuertes/playlist-middle
● https://github.com/wfuert...
Obrigado!
● Danival Taffarel Calegari
● @danivaltc
● http://pt.slideshare.net/DanivalCalegari
Próximos SlideShares
Carregando em…5
×

Tecnologias Netflix OSS

862 visualizações

Publicada em

Apresentação feita na trilha de Arquitetura Java do The Developers Conference 2015 sobre as tecnologias open source oferecidas pela Netflix. Nela foi abordado o servidor Eureka e as bibliotecas Archaius, Governator, Karyon,
Ribbon e Hystrix.

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
862
No SlideShare
0
A partir de incorporações
0
Número de incorporações
22
Ações
Compartilhamentos
0
Downloads
12
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Tecnologias Netflix OSS

  1. 1. Tecnologias Netflix OSS The Developers Conference - 2015
  2. 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. 3. Conteúdo ● Introdução ● Arquitetura ● Eureka ● Archaius ● Governator e Karyon ● Ribbon e Hystrix ● Demo
  4. 4. Introdução ● Netflix OSS – Netflix Open Source Software
  5. 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/
  6. 6. Arquitetura
  7. 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. 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.
  9. 9. Eureka
  10. 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. 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
  12. 12. Archaius
  13. 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. 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. 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. 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. 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. 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. 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. 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. 21. Obrigado! ● Danival Taffarel Calegari ● @danivaltc ● http://pt.slideshare.net/DanivalCalegari

×