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()); } }
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());