O documento apresenta uma palestra sobre arquitetura de microsserviços usando a biblioteca Spring Cloud Netflix. O palestrante discute problemas comuns em arquiteturas monolíticas e como serviços como Eureka, Ribbon, Hystrix e Zuul da biblioteca resolvem esses problemas, permitindo escalabilidade e tolerância a falhas. Ele também apresenta outras ferramentas como o Config Server e o Hystrix Dashboard.
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
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
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
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.
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