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

PDF
[qCon Rio 2015] Arquitetura Incremental
PDF
Deploy mágico: o caso de sucesso do PHP'n Rio 11
PDF
Construindo sua Assistente Virtual Integrada a Dispositivos IoT com Python ...
PPT
Azure blob xamarin-tdc2016
PDF
Afinal, o que e quarkus
PDF
Node.js - Programação assíncrona e de tempo real
PPT
Fsi8a Sistemas Internet
PDF
Distribuindo Aplicações com WCF
[qCon Rio 2015] Arquitetura Incremental
Deploy mágico: o caso de sucesso do PHP'n Rio 11
Construindo sua Assistente Virtual Integrada a Dispositivos IoT com Python ...
Azure blob xamarin-tdc2016
Afinal, o que e quarkus
Node.js - Programação assíncrona e de tempo real
Fsi8a Sistemas Internet
Distribuindo Aplicações com WCF

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

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

Mais de Rodrigo Stefani Domingues (6)

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

Último (7)

DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PPTX
Curso de Windows 11 resumido na prática.pptx
PDF
Dos requisitos ao código: como criar código rastreável em PHP
PDF
apresentacao introducao computacao ead.pdf
PPTX
Mapeamento de Objeto para Tabela Relacional
PDF
Evolução em código: algoritmos genéticos com PHP
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Curso de Windows 11 resumido na prática.pptx
Dos requisitos ao código: como criar código rastreável em PHP
apresentacao introducao computacao ead.pdf
Mapeamento de Objeto para Tabela Relacional
Evolução em código: algoritmos genéticos com PHP
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO

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