Tecnologias Netflix OSS

1.064 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
1.064
No SlideShare
0
A partir de incorporações
0
Número de incorporações
22
Ações
Compartilhamentos
0
Downloads
16
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

×