SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
LIDANDO COM DESAFIOS DOS MICROSERVIÇOS
COM A STACK SPRING CLOUD NETFLIX
Emmanuel Neri
@emmanuelnerii
EMMANUEL NERI
‣ Mestre em Desenvolvimento de Tecnologia
‣ Desenvolvedor (Java) desde 2010
‣ Professor na FACEC
‣ Líder técnico na Navita
MICROSERVICES
martinfowler.com/articles/microservices.html
COMPUTAÇÃO DISTRIBUÍDA
DESAFIOS
‣ Comunicação
‣ Consistência
‣ Disponibilidade
‣ Monitoramento
‣ Gerenciamento
SPRING + NETFLIX
+
GERENCIAMENTO
SERVICE DISCOVERY
orders:8080
processor:8040 processor:8041
files:8090
EUREKA
‣ Localizador de serviços
‣ Possibilita registro dinâmico
‣ Baseado em serviços REST
‣ Proporciona Health check
EUREKA
EUREKA + SPRING CLOUD
register
renew
30seg
90seg
DISPONIBILIZAÇÃO DAS APLICAÇÕES
Request
PROXY / GATEWAY
PROXY / GATEWAY
Request
ZUUL
‣ Centralização
‣ Gateway
‣ Rotas dinâmicas
‣ ServiceId
‣ Segurança
‣ Spring Cloud Security
ZUUL + SPRING CLOUD
zuul.prefix=/api
zuul.ignored-services=*
zuul.routes.files.path=/files/**
zuul.routes.files.serviceId=FILESAPI
zuul.routes.files.strip-prefix=false
zuul.routes.orders.path=/orders/**
zuul.routes.orders.serviceId=ORDERSAPI
zuul.routes.orders.strip-prefix=false
zuul.routes.receiver.path=/receiver/**
zuul.routes.receiver.serviceId=RECEIVER
zuul.routes.receiver.strip-prefix=false
gateway.properties
ZUUL
Request
ZULL
EUREKA
Retorna lista de aplicações
RIBBON
Pede aplicações
disponíveis
LOAD BALANCER
Request
LOAD BALANCER
RIBBON
‣ Balanceador de carga Client side
‣ Lista das aplicações (ServerList)
‣ Estática
‣ Dinâmica
‣ IPing
‣ IRule
‣ RoundRobinRule
‣ WeightedResponseTimeRule
‣ AvailabilityFilteringRule
COMUNICAÇÃO
FEIGN CLIENTS
@FeignClient(value = "http://localhost:8060", path = "/customers",
name = "customers")
public interface Customers {
@RequestMapping(value = "/customers/document/{cnpj}",
method = RequestMethod.GET)
Customer findByCnpj(@PathVariable("cnpj") String cnpj);
}
FEIGN
‣ Facilitador de Clients HTTP
‣ Logs
‣ Interceptors
‣ Tratamento de erros
‣ Error Handling
‣ Hystrix
‣ Retry
‣ Ribbon
FEIGN + EUREKA
EUREKA
Pede endereço
serviço customers
Retorna endereço do
serviço requisitado
@FeignClient(value = "customers")
public interface Customers {
FALHAS
CIRCUIT BREAKER
HYSTRIX
‣ Impedir propagação de falhas em outros serviços
‣ Aberto, Fechado, Meio Aberto
‣ Recuperação rápida
‣ Fallback
‣ Monitoramento dos serviços
HYSTRIX
@RestController
@RequestMapping(value = "/receiver/orders")
@Slf4j
public class OrderController {
@Autowired
private OrderService orderService;
@HystrixCommand(fallbackMethod = "defaultFallback")
@RequestMapping(value = "/{origin}", method = RequestMethod.POST)
public void receive(
@PathVariable("origin") String origin,
@RequestBody String order) {
orderService.receive(origin, order);
}
private void defaultFallback(String origin, String order) {
log.error("fallback Method - origin: " + origin);
}
}
HYSTRIX
@FeignClient(value = "customers", fallback = CustomersFallBack.class)
public interface Customers {
@RequestMapping(value = "/customers/document/{cnpj}",
method = RequestMethod.GET)
Customer findByCnpj(@PathVariable("cnpj") String cnpj);
}
HYSTRIX
Hystrix Dashboard
MÉTRICAS / DEBUG
TRACE
Request
Response
SLEUTH + ZIPKIN
‣ Spring Cloud Sleuth
‣ Gerar os logs
‣ TraceId , SpanId
‣ REST, Mensageria, Filtros, Agendadores
‣ Zipkin
‣ Interpreta os logs
SLEUTH + ZIPKIN
INFO [ordersApi,49b8420c329b42f7,3dbc2c5800e5669e,true] b.c.e.orders.controller.OrderController
INFO [ordersApi,13ff24ba66af1a00,5c98e5176f8345d9,true] b.c.e.orders.controller.OrderController
Zipkin
CONFIGURAÇÃO
CONFIG SERVER
‣ Servidor de configuração distribuído
‣ Acesso dos arquivos via Rest
‣ Pode armazenar no Git ou SVN
‣ Funcionalidades
‣ Criptografia de configurações
‣ Alterações de properties em runtime
SPRING CLOUD CONFIG
CONFIG SERVER
GIT
OUTROS PROJETOS SPRING CLOUD
‣ Outros recursos
‣ spring-cloud-stream
‣ spring-cloud-task
‣ Alternativas
‣ spring-cloud-zookeeper
‣ spring-cloud-consul
‣ spring-cloud-gateway
NÃO ENGLOBA
‣ Consistência dos dados distribuídas
‣ SAGA
‣ Infraestrutura
‣ Containers
‣ Logs / Monitoramento
‣ ELK - (Elasticsearch/Logstash/Kibana)
RESUMO
Positivo Negativo
Dinamismo Stack Java
Agnóstico de cloud
provider
Custo do dinamismo
Ambiente replicável
https://github.com/emmanuelneri/microservices-spring-cloud
GITHUB/EMMANUELNERI
‣ Configurações distribuídas com Spring Cloud Config
‣ https://emmanuelneri.com.br/2018/07/09/
configuracoes-distribuidas-com-spring-cloud-config/
‣ Clients dinâmicos com Feign e Eureka
‣ https://emmanuelneri.com.br/2018/05/02/criando-
proxy-de-apis-com-spring-cloud-zuul-e-eureka/
‣ Criando proxy de APIs com Spring Cloud, Zuul e Eureka
‣ https://emmanuelneri.com.br/2018/06/05/clients-
dinamicos-com-feign-e-eureka/
EMMANUELNERI.COM.BR
EMMANUEL NERI
emmanuelnerisouza@gmail.com
@emmanuelnerii
www.linkedin.com/in/emmanuelnerisouza
OBRIGADO!
www.emmanuelneri.com.br

Contenu connexe

Tendances

Tendances (20)

Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010
 
JasperReports
JasperReportsJasperReports
JasperReports
 
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com PythonWeb2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core Java
 
Teste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStrykerTeste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStryker
 
PHP e Redis
PHP e RedisPHP e Redis
PHP e Redis
 
Pilares do desenvolvimento Mobile no Nubank
 Pilares do desenvolvimento Mobile no Nubank Pilares do desenvolvimento Mobile no Nubank
Pilares do desenvolvimento Mobile no Nubank
 
PHP 7
PHP 7PHP 7
PHP 7
 
Threads e Estruturas de dados
Threads e Estruturas de dadosThreads e Estruturas de dados
Threads e Estruturas de dados
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento android
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHP
 
PHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPPHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHP
 
TDD - Test Driven Development (em PHP)
TDD - Test Driven Development (em PHP)TDD - Test Driven Development (em PHP)
TDD - Test Driven Development (em PHP)
 
Java script aula 05 - funções
Java script   aula 05 - funçõesJava script   aula 05 - funções
Java script aula 05 - funções
 
Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Android
 
Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo Branas
 

Similaire à Lidando com desafios dos microserviços com a stack Spring Cloud Netflix

Integração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPIntegração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHP
elliando dias
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
Fabrízio Mello
 

Similaire à Lidando com desafios dos microserviços com a stack Spring Cloud Netflix (20)

Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
 
Integração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPIntegração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHP
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
HUGSP#6 Opus uDSL - Uma DSL para Microserviços
HUGSP#6 Opus uDSL - Uma DSL para MicroserviçosHUGSP#6 Opus uDSL - Uma DSL para Microserviços
HUGSP#6 Opus uDSL - Uma DSL para Microserviços
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
 
Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em Java
 
Vraptor
VraptorVraptor
Vraptor
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
TDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal AppsTDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal Apps
 
Angular js
Angular jsAngular js
Angular js
 
Aula09 phonegap storage_connection
Aula09 phonegap storage_connectionAula09 phonegap storage_connection
Aula09 phonegap storage_connection
 
PyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonPyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com Python
 
VRaptor4
VRaptor4VRaptor4
VRaptor4
 
Apache NiFi com postgresql
Apache NiFi com postgresqlApache NiFi com postgresql
Apache NiFi com postgresql
 
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
 

Plus de Emmanuel Neri

O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
Emmanuel Neri
 
Aplicação da arquitetura de micro serviços em softwares corporativos
Aplicação da arquitetura de micro serviços em softwares corporativosAplicação da arquitetura de micro serviços em softwares corporativos
Aplicação da arquitetura de micro serviços em softwares corporativos
Emmanuel Neri
 

Plus de Emmanuel Neri (20)

Arquitetura orientada a eventos
Arquitetura orientada a eventosArquitetura orientada a eventos
Arquitetura orientada a eventos
 
Iniciando com Docker
Iniciando com DockerIniciando com Docker
Iniciando com Docker
 
Arquitetura reativa, a solução para os microserviços?
Arquitetura reativa,  a solução para os microserviços?Arquitetura reativa,  a solução para os microserviços?
Arquitetura reativa, a solução para os microserviços?
 
Preparando nossas aplicações para falharem com feature toggle e configurações...
Preparando nossas aplicações para falharem com feature toggle e configurações...Preparando nossas aplicações para falharem com feature toggle e configurações...
Preparando nossas aplicações para falharem com feature toggle e configurações...
 
Preparando nossa aplicação para falhar com feature toggle e configurações dis...
Preparando nossa aplicação para falhar com feature toggle e configurações dis...Preparando nossa aplicação para falhar com feature toggle e configurações dis...
Preparando nossa aplicação para falhar com feature toggle e configurações dis...
 
Combatendo code smells em Java
Combatendo code smells em Java Combatendo code smells em Java
Combatendo code smells em Java
 
Configurações distribuídas com Spring Cloud Config
Configurações distribuídas com Spring Cloud ConfigConfigurações distribuídas com Spring Cloud Config
Configurações distribuídas com Spring Cloud Config
 
Trabalho Remoto
Trabalho RemotoTrabalho Remoto
Trabalho Remoto
 
O Impacto da arquitetura de Micro Serviços nas soluções de software
O Impacto da arquitetura de Micro Serviços nas soluções de softwareO Impacto da arquitetura de Micro Serviços nas soluções de software
O Impacto da arquitetura de Micro Serviços nas soluções de software
 
A Cultura do Home Office
A Cultura do Home OfficeA Cultura do Home Office
A Cultura do Home Office
 
Construindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVC
Construindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVCConstruindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVC
Construindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVC
 
A trilogia Spring MVC + Spring Data + AngularJS
A trilogia  Spring MVC + Spring Data + AngularJSA trilogia  Spring MVC + Spring Data + AngularJS
A trilogia Spring MVC + Spring Data + AngularJS
 
Criando uma arquitetura escalável para processamento de arquivos com micro s...
Criando uma arquitetura escalável para processamento de arquivos com micro s...Criando uma arquitetura escalável para processamento de arquivos com micro s...
Criando uma arquitetura escalável para processamento de arquivos com micro s...
 
Microservices: Mais que uma arquitetura de software, uma filosofia de desenvo...
Microservices: Mais que uma arquitetura de software, uma filosofia de desenvo...Microservices: Mais que uma arquitetura de software, uma filosofia de desenvo...
Microservices: Mais que uma arquitetura de software, uma filosofia de desenvo...
 
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
 
Aplicação da arquitetura de micro serviços em softwares corporativos
Aplicação da arquitetura de micro serviços em softwares corporativosAplicação da arquitetura de micro serviços em softwares corporativos
Aplicação da arquitetura de micro serviços em softwares corporativos
 
Desenvolvimento baseado em componentes com JSF
Desenvolvimento baseado em componentes com JSFDesenvolvimento baseado em componentes com JSF
Desenvolvimento baseado em componentes com JSF
 
Jett: Exporte Excel do jeito que seu cliente sempre sonhou
Jett: Exporte Excel do jeito que seu cliente sempre sonhouJett: Exporte Excel do jeito que seu cliente sempre sonhou
Jett: Exporte Excel do jeito que seu cliente sempre sonhou
 
Análise e Design - RUP
Análise e Design - RUPAnálise e Design - RUP
Análise e Design - RUP
 
Solução técnica - CMMI nível 3
Solução técnica - CMMI nível 3Solução técnica - CMMI nível 3
Solução técnica - CMMI nível 3
 

Lidando com desafios dos microserviços com a stack Spring Cloud Netflix