tecnologias netflix oss
TRANSCRIPT
- 1. Tecnologias Netflix OSS The Developers Conference - 2015
- 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. Contedo Introduo Arquitetura Eureka Archaius Governator e Karyon Ribbon e Hystrix Demo
- 4. Introduo Netflix OSS Netflix Open Source Software
- 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. Arquitetura
- 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. 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. Eureka
- 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. 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. Archaius
- 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. 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. 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 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. 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. 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