Transcript of Tecnologias Netflix OSS
- 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