SlideShare uma empresa Scribd logo
Globalcode – Open4education
Trilha – Microservices
Rodrigo Stefani Domingues
Arquiteto de Sistemas na CI&T
~$: pwd
~$: whoami
ciandt.com
Who am I?
● Trabalho com desenvolvimento há 12 anos
● Trabalho com Java há 9 anos
● Arquiteto de Sistemas na CI&T
● Nerd
rodrigosd@ciandt.com
https://github.com/rsdomingues
no twitter :)
Minha situação
ciandt.com
Meu caso
ciandt.com
Operações
complexas
online
População
instantânea
Aumento
Significativo
de vendas
Arquitetura
Modular
Operações
Massivas
Market
Place
- Manutenção de informações de Fornecedor
- Manutenção de informações do Lojista
- Vida Longa e próspera
- Manutenção de documentação de Fornecedor/Lojista
- Gestão de autenticação
- User life cycle
- Consultas diversas (para outros módulos)
- Dados Lojista
- Informações de domínio
- Luke, eu sou seu pai
- Intermediação de atendimento
- Geração de protocolo
- Encaminhamento de mensagens
- Garantia de anonimato (cliente e fornecedor)
- "ET Phone Home"
- Troca/Devolução
- Cálculo de Comissão e Repasse
- Realizar cálculo
- Consolidar ciclo de pagamento
- Não fale sobre o clube da luta
- Gestão de conta corrente
- Fechamento de ciclo
- Notificação do sistema de faturamento
Arquitetura Atual - Drill down Cenário
ciandt.com
Gestão do lojista
Spring Cloud Netflix
ciandt.com
O que é?
ciandt.com
Service Discovery
- Netflix Eureka
Dynamic Routing & Load Balancing
- Netflix Ribbon
Circuit Breaker
- Netflix Hystrix
Monitoring
- Netflix Hystrix Dashboard + Turbine
Edge Server
- Netflix Zuul
Central Configuration
- Spring Cloud Config Server
Problemas que resolvem ...
ciandt.com
HTTP:// MS 1
Problemas que resolvem ...
ciandt.com
HTTP:// MS 1
MS 1
MS 1
Problemas que resolvem ...
ciandt.com
HTTP:// MS 1
MS 1
MS 1
MS 2
MS 2
MS 2
Problemas que resolvem ...
ciandt.com
HTTP:// MS 1
MS 1
MS 1
MS 2
MS 2
MS 2
Load Balancing
ciandt.com
Voltando ao nosso cenário …
ciandt.com
HTTP:// MS 1
MS 1
MS 1
MS 2
MS 2
MS 2
Como resolver este problema ?
ciandt.com
MS 1 MS 2
MS 2
MS 2
Tipicamente ...
ciandt.com
Load
Balancer
MS 2
MS 2
MS 2
MS 1
Netflix Ribbon (Client Side Load Balancing)
ciandt.com
MS 1 MS 2
MS 2
MS 2
Dynamic Routing & Load
Balancing
- Netflix Ribbon
Detalhes
- Client Side Load Balancing
- Integrado a outros componentes da Netflix
Stack
Criando um serviço, usando Feign
Code, Code, Code …
ciandt.com
@FeignClient(value = "bar")
public interface BarClient {
@RequestMapping(method = RequestMethod.GET, value = "/name")
Info getInfo();
}
Configure as URLS para o serviço
bar:
ribbon:
listOfServers: http://localhost:8885
other_service:
ribbon:
listOfServers: http://localhost:8886
user:
ribbon:
listOfServers: http://localhost:8887
Service Registry
ciandt.com
Voltando ao nosso cenário …
ciandt.com
HTTP:// MS 1
MS 1
MS 1
MS 2
MS 2
MS 2
O que acontece se precisarmos adicionar mais um nó?
ciandt.com
MS 1 MS 2
MS 2
MS 2
Ou se algum dos online cair?
ciandt.com
MS 1 MS 2
MS 2
MS 2
Netflix Eureka
ciandt.com
MS 1 MS 2
MS 2
MS 2
Eureka
Server
Service Discovery
- Netflix Eureka
Detalhes
- Aplicação que atua como registro distribuído
de serviços
- Client Lib para registro e busca de
informações sobre os registros
- Integrado a outros componentes da Netflix
Stack, como o Ribbon
Code, Code, Code …
ciandt.com
Adicione como dependência do projeto
Habilite o registro e fetch de informações
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
eureka:
instance:
instance-id: ${spring.application.name}:${random.int}
client:
enabled: true
registerWithEureka: true
Mude o ribbon, para utilizar o Eureka
ribbon:
eureka:
enabled: true
Admin Console
ciandt.com
Tolerância a Falha
ciandt.com
Voltando ao nosso cenário …
ciandt.com
HTTP://
MS 1MS 1MS 1
MS 2MS 2MS 2
Eureka
Server
Problemas durante a requisição
ciandt.com
MS 1 MS 2
MS 2
MS 2
Problemas durante a requisição
ciandt.com
Circuit Breaker
- Netflix Hystrix
Detalhes
- Previne utilização de todos os recursos
(threads) do application server
- Permite configuração de fallback para
eventos de erro
- Configurações variadas para identificação
de erro
- Permite que o sistema como um todo se
recupere de problemas, reduzindo carga de
serviços.
Code, Code, Code …
ciandt.com
public class CommandSomething extends HystrixCommand<String> {
public CommandHelloFailure() {}
protected String run() {
return doShomethingThatCanFail();
}
protected String getFallback() {
return doSomethingThatCantFail();
}
}
Crie um Hystrix Comand
Execute o command
new CommandHelloFailure("World").execute()
@HystrixCommand(defaultFallback = "doSomethingThatCantFail")
public String doShomethingThatCanFail(){
throw new RuntimeException("Error");
}
public String doSomethingThatCantFail(){
return "Success";
}
Via anotação
Serviço de borda
ciandt.com
Voltando ao nosso cenário …
ciandt.com
HTTP://
MS 1MS 1MS 1
MS 2MS 2MS 2
Eureka
Server
Gateway Service
- Netflix Zuul
Detalhes
- Possibilidade de criação de filtros para:
Autenticação, Logging, acompanhamento
de requisição, tratamento de erros etc.
- Integrado com demais elementos da stack
do Netflix (ribbon, Eureka)
Netflix Zuul
ciandt.com
HTTP://
MS 1MS 1MS 1
MS 2MS 2MS 2
Eureka
Server
Serviçodeborda(NetflixZuul)
Gateway Service
- Netflix Zuul
Detalhes
- Possibilidade de criação de filtros para:
Autenticação, Logging, acompanhamento
de requisição, tratamento de erros etc.
- Integrado com demais elementos da stack
do Netflix (ribbon, Eureka)
Netflix Zuul
ciandt.com
Code, Code, Code …
ciandt.com
@SpringBootApplication
@EnableZuulProxy
public class ZuulServerApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulServerApplication.class).web(true).run(args);
}
}
Crie um Spring Boot App e habilite o Zuul
zuul:
routes:
foo: /foo/**
bar: /bar/**
zuulserver: /self/**
Configure quais serviços deseja rotear
Configurações
ciandt.com
Voltando ao nosso cenário …
ciandt.com
HTTP://
MS 1MS 1MS 1
MS 2MS 2MS 2
Eureka
Server
Serviçodeborda(NetflixZuul)
Proliferação de arquivos de configuração
ciandt.com
MS 1 MS 2
Eureka
Server
Voltando ao nosso cenário …
ciandt.com
MS 1 MS 2
Eureka
Server
Config
Server
Configuration Service
- Spring Cloud Config
Detalhes
- Aplicação que "serve" configurações de
outras aplicações.
- Configuração é versionado no GIT e cada
arquivo de configuração é provido para a
aplicação
- Utiliza padrão que permite deixar cada
ambiente em uma branch para controle de
versão, pull request e etc.
Monitoramento
ciandt.com
Turbine & Hystrix Dashboard
ciandt.com
Really Honorable Mentions
ciandt.com
[text]
<Insert here an image> <Insert here an image>
Logo
Ferramenta criada para documentação
de serviços Rest. Documentação feita
diretamente no código com
possibilidade de geração de exemplos
de chamadas.
Swagger
WiTIX
Framework para criação e
configuração de Feature Toogle. Com
grandes possibilidades de integração
com banco de dados e outros
elementos da arquitetura para facilitar
o controle.
FF4j
Witix é uma plataforma de
monitoramento (APM e Log Analytics),
que utiliza um banco de dados nosql
Elasticserach e descoberta de dados e
insights através da ferramenta Kibana.
ciandt.com
Feign é um framework java para
requisições HTTP inspirado por
Retrofit, JAXRS-2.0 e WebSocket. O
primeiro objetivo do Feign foi reduzir a
complexidade de configuração e
código para chamadas apis..
Feign
ciandt.com
Nem tudo são flores!
ciandt.com
Uso com docker.
ciandt.com
Porquê me apaixonei?
ciandt.com
Simples e fácil.
ciandt.com
Maturidade da solução.
ciandt.com
Pouco código.
ciandt.com
Opcional e integrado.
ciandt.com
Thank you!
ciandt.com
Demo Code:
https://github.com/rsdomingues/netflixmicroservices-tdc2017
ciandt.com
WiTIX Code:
https://github.com/cit-witix
https://cit-witix.github.io/
ciandt.com

Mais conteúdo relacionado

Semelhante a Quebrando o monolito com microserviços - TDC 2017

IntroduçãO Ao Desenvolvimento Web 2
IntroduçãO Ao Desenvolvimento Web   2IntroduçãO Ao Desenvolvimento Web   2
IntroduçãO Ao Desenvolvimento Web 2
Maurício Linhares
 

Semelhante a Quebrando o monolito com microserviços - TDC 2017 (20)

Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
 
Aplicações com Tecnologias Web
Aplicações com Tecnologias WebAplicações com Tecnologias Web
Aplicações com Tecnologias Web
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'
 
Minicurso IOT com javascript - SBTI
Minicurso IOT com javascript - SBTIMinicurso IOT com javascript - SBTI
Minicurso IOT com javascript - SBTI
 
LocalStack - TDC Porto Alegre 2020
LocalStack - TDC Porto Alegre 2020LocalStack - TDC Porto Alegre 2020
LocalStack - TDC Porto Alegre 2020
 
Integração de sistemas legados com Plone
Integração de sistemas legados com PloneIntegração de sistemas legados com Plone
Integração de sistemas legados com Plone
 
IntroduçãO Ao Desenvolvimento Web 2
IntroduçãO Ao Desenvolvimento Web   2IntroduçãO Ao Desenvolvimento Web   2
IntroduçãO Ao Desenvolvimento Web 2
 
Cadoop
CadoopCadoop
Cadoop
 
Expondo APIs de back-ends legados e travados
Expondo APIs de back-ends legados e travadosExpondo APIs de back-ends legados e travados
Expondo APIs de back-ends legados e travados
 
Architecture In a Box - Plataforma de Aplicações
Architecture In a Box - Plataforma de AplicaçõesArchitecture In a Box - Plataforma de Aplicações
Architecture In a Box - Plataforma de Aplicações
 
Como funciona a internet
Como funciona a internetComo funciona a internet
Como funciona a internet
 
Arquitetura de dados em stream - TDC SP 2016
Arquitetura de dados em stream - TDC SP 2016Arquitetura de dados em stream - TDC SP 2016
Arquitetura de dados em stream - TDC SP 2016
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha Básica
 
AAB301 - Rich Internet Application - wcamb
AAB301 - Rich Internet Application - wcambAAB301 - Rich Internet Application - wcamb
AAB301 - Rich Internet Application - wcamb
 
Secomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao ElixirSecomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao Elixir
 
Escalando uma plataforma de e-mail transacional- aprendizado das trincheiras
Escalando uma plataforma de e-mail transacional- aprendizado das trincheirasEscalando uma plataforma de e-mail transacional- aprendizado das trincheiras
Escalando uma plataforma de e-mail transacional- aprendizado das trincheiras
 
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
 
Reinventando o Acesso Remoto com DirectAccess
Reinventando o Acesso Remoto com DirectAccessReinventando o Acesso Remoto com DirectAccess
Reinventando o Acesso Remoto com DirectAccess
 
Webinar: Monitorando sensores IoT: Do ESP32 ao Grafana
Webinar: Monitorando sensores IoT: Do ESP32 ao GrafanaWebinar: Monitorando sensores IoT: Do ESP32 ao Grafana
Webinar: Monitorando sensores IoT: Do ESP32 ao Grafana
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 

Mais de Rodrigo Stefani Domingues

Mais de Rodrigo Stefani Domingues (6)

[2020 git lab commit] continuous infrastructure
[2020 git lab commit] continuous infrastructure[2020 git lab commit] continuous infrastructure
[2020 git lab commit] continuous infrastructure
 
[TDC - Testes] Estratégia de automação dos testes em microserviços
[TDC - Testes] Estratégia de automação dos testes em microserviços [TDC - Testes] Estratégia de automação dos testes em microserviços
[TDC - Testes] Estratégia de automação dos testes em microserviços
 
[TDC-Arquitetura Java] Pastoreando Gatos
[TDC-Arquitetura Java] Pastoreando Gatos[TDC-Arquitetura Java] Pastoreando Gatos
[TDC-Arquitetura Java] Pastoreando Gatos
 
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora![Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
 
[Polis Hyperlink ] Apache Camel na vida real
[Polis Hyperlink ] Apache Camel na vida real[Polis Hyperlink ] Apache Camel na vida real
[Polis Hyperlink ] Apache Camel na vida real
 
[Q con] apache camel e eip na vida real
[Q con] apache camel e eip na vida real[Q con] apache camel e eip na vida real
[Q con] apache camel e eip na vida real
 

Quebrando o monolito com microserviços - TDC 2017

  • 1. Globalcode – Open4education Trilha – Microservices Rodrigo Stefani Domingues Arquiteto de Sistemas na CI&T ~$: pwd
  • 2. ~$: whoami ciandt.com Who am I? ● Trabalho com desenvolvimento há 12 anos ● Trabalho com Java há 9 anos ● Arquiteto de Sistemas na CI&T ● Nerd rodrigosd@ciandt.com https://github.com/rsdomingues no twitter :)
  • 5. - Manutenção de informações de Fornecedor - Manutenção de informações do Lojista - Vida Longa e próspera - Manutenção de documentação de Fornecedor/Lojista - Gestão de autenticação - User life cycle - Consultas diversas (para outros módulos) - Dados Lojista - Informações de domínio - Luke, eu sou seu pai - Intermediação de atendimento - Geração de protocolo - Encaminhamento de mensagens - Garantia de anonimato (cliente e fornecedor) - "ET Phone Home" - Troca/Devolução - Cálculo de Comissão e Repasse - Realizar cálculo - Consolidar ciclo de pagamento - Não fale sobre o clube da luta - Gestão de conta corrente - Fechamento de ciclo - Notificação do sistema de faturamento Arquitetura Atual - Drill down Cenário ciandt.com Gestão do lojista
  • 7. O que é? ciandt.com Service Discovery - Netflix Eureka Dynamic Routing & Load Balancing - Netflix Ribbon Circuit Breaker - Netflix Hystrix Monitoring - Netflix Hystrix Dashboard + Turbine Edge Server - Netflix Zuul Central Configuration - Spring Cloud Config Server
  • 8. Problemas que resolvem ... ciandt.com HTTP:// MS 1
  • 9. Problemas que resolvem ... ciandt.com HTTP:// MS 1 MS 1 MS 1
  • 10. Problemas que resolvem ... ciandt.com HTTP:// MS 1 MS 1 MS 1 MS 2 MS 2 MS 2
  • 11. Problemas que resolvem ... ciandt.com HTTP:// MS 1 MS 1 MS 1 MS 2 MS 2 MS 2
  • 13. Voltando ao nosso cenário … ciandt.com HTTP:// MS 1 MS 1 MS 1 MS 2 MS 2 MS 2
  • 14. Como resolver este problema ? ciandt.com MS 1 MS 2 MS 2 MS 2
  • 16. Netflix Ribbon (Client Side Load Balancing) ciandt.com MS 1 MS 2 MS 2 MS 2 Dynamic Routing & Load Balancing - Netflix Ribbon Detalhes - Client Side Load Balancing - Integrado a outros componentes da Netflix Stack
  • 17. Criando um serviço, usando Feign Code, Code, Code … ciandt.com @FeignClient(value = "bar") public interface BarClient { @RequestMapping(method = RequestMethod.GET, value = "/name") Info getInfo(); } Configure as URLS para o serviço bar: ribbon: listOfServers: http://localhost:8885 other_service: ribbon: listOfServers: http://localhost:8886 user: ribbon: listOfServers: http://localhost:8887
  • 19. Voltando ao nosso cenário … ciandt.com HTTP:// MS 1 MS 1 MS 1 MS 2 MS 2 MS 2
  • 20. O que acontece se precisarmos adicionar mais um nó? ciandt.com MS 1 MS 2 MS 2 MS 2
  • 21. Ou se algum dos online cair? ciandt.com MS 1 MS 2 MS 2 MS 2
  • 22. Netflix Eureka ciandt.com MS 1 MS 2 MS 2 MS 2 Eureka Server Service Discovery - Netflix Eureka Detalhes - Aplicação que atua como registro distribuído de serviços - Client Lib para registro e busca de informações sobre os registros - Integrado a outros componentes da Netflix Stack, como o Ribbon
  • 23. Code, Code, Code … ciandt.com Adicione como dependência do projeto Habilite o registro e fetch de informações <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> eureka: instance: instance-id: ${spring.application.name}:${random.int} client: enabled: true registerWithEureka: true Mude o ribbon, para utilizar o Eureka ribbon: eureka: enabled: true
  • 26. Voltando ao nosso cenário … ciandt.com HTTP:// MS 1MS 1MS 1 MS 2MS 2MS 2 Eureka Server
  • 27. Problemas durante a requisição ciandt.com MS 1 MS 2 MS 2 MS 2
  • 28. Problemas durante a requisição ciandt.com Circuit Breaker - Netflix Hystrix Detalhes - Previne utilização de todos os recursos (threads) do application server - Permite configuração de fallback para eventos de erro - Configurações variadas para identificação de erro - Permite que o sistema como um todo se recupere de problemas, reduzindo carga de serviços.
  • 29. Code, Code, Code … ciandt.com public class CommandSomething extends HystrixCommand<String> { public CommandHelloFailure() {} protected String run() { return doShomethingThatCanFail(); } protected String getFallback() { return doSomethingThatCantFail(); } } Crie um Hystrix Comand Execute o command new CommandHelloFailure("World").execute() @HystrixCommand(defaultFallback = "doSomethingThatCantFail") public String doShomethingThatCanFail(){ throw new RuntimeException("Error"); } public String doSomethingThatCantFail(){ return "Success"; } Via anotação
  • 31. Voltando ao nosso cenário … ciandt.com HTTP:// MS 1MS 1MS 1 MS 2MS 2MS 2 Eureka Server
  • 32. Gateway Service - Netflix Zuul Detalhes - Possibilidade de criação de filtros para: Autenticação, Logging, acompanhamento de requisição, tratamento de erros etc. - Integrado com demais elementos da stack do Netflix (ribbon, Eureka) Netflix Zuul ciandt.com HTTP:// MS 1MS 1MS 1 MS 2MS 2MS 2 Eureka Server Serviçodeborda(NetflixZuul)
  • 33. Gateway Service - Netflix Zuul Detalhes - Possibilidade de criação de filtros para: Autenticação, Logging, acompanhamento de requisição, tratamento de erros etc. - Integrado com demais elementos da stack do Netflix (ribbon, Eureka) Netflix Zuul ciandt.com
  • 34. Code, Code, Code … ciandt.com @SpringBootApplication @EnableZuulProxy public class ZuulServerApplication { public static void main(String[] args) { new SpringApplicationBuilder(ZuulServerApplication.class).web(true).run(args); } } Crie um Spring Boot App e habilite o Zuul zuul: routes: foo: /foo/** bar: /bar/** zuulserver: /self/** Configure quais serviços deseja rotear
  • 36. Voltando ao nosso cenário … ciandt.com HTTP:// MS 1MS 1MS 1 MS 2MS 2MS 2 Eureka Server Serviçodeborda(NetflixZuul)
  • 37. Proliferação de arquivos de configuração ciandt.com MS 1 MS 2 Eureka Server
  • 38. Voltando ao nosso cenário … ciandt.com MS 1 MS 2 Eureka Server Config Server Configuration Service - Spring Cloud Config Detalhes - Aplicação que "serve" configurações de outras aplicações. - Configuração é versionado no GIT e cada arquivo de configuração é provido para a aplicação - Utiliza padrão que permite deixar cada ambiente em uma branch para controle de versão, pull request e etc.
  • 40. Turbine & Hystrix Dashboard ciandt.com
  • 42. [text] <Insert here an image> <Insert here an image> Logo Ferramenta criada para documentação de serviços Rest. Documentação feita diretamente no código com possibilidade de geração de exemplos de chamadas. Swagger WiTIX Framework para criação e configuração de Feature Toogle. Com grandes possibilidades de integração com banco de dados e outros elementos da arquitetura para facilitar o controle. FF4j Witix é uma plataforma de monitoramento (APM e Log Analytics), que utiliza um banco de dados nosql Elasticserach e descoberta de dados e insights através da ferramenta Kibana. ciandt.com Feign é um framework java para requisições HTTP inspirado por Retrofit, JAXRS-2.0 e WebSocket. O primeiro objetivo do Feign foi reduzir a complexidade de configuração e código para chamadas apis.. Feign
  • 44. Nem tudo são flores! ciandt.com