tecnologias netflix oss

Download Tecnologias Netflix OSS

Post on 16-Aug-2015

191 views

Category:

Technology

0 download

Embed Size (px)

TRANSCRIPT

  1. 1. Tecnologias Netflix OSS The Developers Conference - 2015
  2. 2. Danival Taffarel Calegari Mestre em Cincia da Computao - UNICAMP Mais de 14 anos desenvolvendo aplicaes Java e Java EE Lder Tcnico na MATERA Systems Instrutor na Globalcode Palestras em diversos eventos: JavaOne, TDC, JustJava, DevCamp, Certificaes: SCJP, SCWCD, SCBCD
  3. 3. Contedo Introduo Arquitetura Eureka Archaius Governator e Karyon Ribbon e Hystrix Demo
  4. 4. Introduo Netflix OSS Netflix Open Source Software
  5. 5. Introduo Soluo para diversos problemas comuns em aplicaes na nuvem Bibliotecas e aplicaes Forte ligao com AWS e microservices Licena Apache Integrao com outras tecnologias Guice Spring j possui simplificaes para uso das tecnologias http://cloud.spring.io/spring-cloud-netflix/
  6. 6. Arquitetura
  7. 7. Eureka Eureka um servidor que fornece servios REST para localizar servidores na camada do middle. Faz balanceamento de carga e prov tolerncia a falhas. Permite o monitoramento de disponibilidade das aplicaes.
  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 iteraes com o server Faz cache da localizao dos servios e load balancer bsico (round robin). Trabalha com servios stateless No faz sticky session No Netflix um load balancer mais sofisticado (que usa pesos com vrios fatores) encapsula o Eureka.
  9. 9. Eureka
  10. 10. Eureka Configurao 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] Configurao mnima eureka.name = nome a aplicao (ex. playlistmiddle) eureka.port = porta na qual a aplicao est executando eureka.vipAddress = nome da aplicao no registro (ex. playlistmiddle.matera.com) eureka.serviceUrls = endereo dos servidores Eureka para consultar Eureka Server tem configuraes semelhantes.
  11. 11. Archaius Gerenciamento de propriedades com configuraes compostas e com hierarquia Extenso do commons-configuration da Apache Propriedades dinmicas e com tipo Mecanismo de polling para obter mudanas de propriedades de uma fonte de configurao. Mecanismo de callback para mudanas de valores JMXBean que pode ser acessado por um JConsole
  12. 12. Archaius
  13. 13. Archaius Obtendo uma configurao: Registrando um callback Criando uma fonte de configuraes 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 clula que contm o DNA e o RNA e responsvel pelo seu crescimento e reproduo. Contm 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 Servio de RPC com balanceamento de carga Chamadas REST com diversos mecanismos de serializao Integrao com Eureka Hystrix Biblioteca para tratar latncia e tolerncia a falha Utiliza biblioteca de ReactiveX/RxJava
  18. 18. Ribbon e Hystrix public class CommandHelloWorld extends HystrixCommand { 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 Execuo Observable 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