O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Tecnologias Netflix OSS

1.126 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
  • Seja o primeiro a comentar

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

×