construindo microservices auto-curáveis com spring cloud e ... · construindo microservices...
TRANSCRIPT
![Page 1: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/1.jpg)
Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSSRodrigo Cândido da Silva @rcandidosilva
![Page 2: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/2.jpg)
About Me• Software Architect
• http://integritastech.com • JUG Leader do GUJavaSC
• http://gujavasc.org • Twitter
• @rcandidosilva • Contatos
• http://rodrigocandido.me
![Page 3: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/3.jpg)
Agenda• Monolito vs. Microservices • Principais Desafios • Spring Cloud + Netflix OOS
• Spring Cloud Config + Bus • Netflix Eureka • Netflix Ribbon • Netflix Hystrix + Turbine • Netflix Zuul • Spring Cloud Security
• Conclusões • Perguntas
![Page 4: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/4.jpg)
Monolito vs. Microservices
![Page 5: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/5.jpg)
Monolito vs. Microservices
![Page 6: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/6.jpg)
Microservices
• Características • Pequenos • Deployment interdependentes • Independente de tecnologia • Independente de infra-estrutura
"Small independent component with well-defined boundaries that’s doing one thing, but
doing it well"
![Page 7: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/7.jpg)
Microservices• Como torná-los auto-curáveis?
• Gerenciamento de configuração • Registro e descoberta dos serviços • Roteamento • Balanceamento de carga • Tolerância à falhas • Monitoramento
![Page 8: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/8.jpg)
Gerenciamento de Configuração
![Page 9: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/9.jpg)
Registro e Descoberta de Serviços
![Page 10: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/10.jpg)
Roteamento
![Page 11: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/11.jpg)
Tolerância à Falhas
![Page 12: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/12.jpg)
Balanceamento de Carga
![Page 13: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/13.jpg)
![Page 14: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/14.jpg)
• API • Routing / Health check • Microservices • Logging • Data Management
• Eureka • Hystrix + Turbine • Ribbon • Zuul • + alguns outros…
![Page 15: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/15.jpg)
![Page 16: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/16.jpg)
Spring Cloud
• Conjunto de bibliotecas / componentes • Não é apenas uma ferramenta
• Integrado ao Spring Boot • Suporta diferentes arquiteturas e tecnologias em Cloud
• AWS, Netflix, Heroku, Cloud Foundry, etc • Facilita a implementação de padrões necessários aos sistemas distribuídos
“Toolset designed for building distributed systems”
![Page 17: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/17.jpg)
Spring Cloud• Principais Componentes
![Page 18: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/18.jpg)
Spring Cloud + Netflix OSS"Casamento perfeito para criação de
microservices auto-curáveis"
Gerenciamento de configuração Spring Cloud Config + Bus
Descoberta de serviços Netflix Eureka
Balanceamento de carga Netflix Ribbon
Tolerância à falhas Netflix Hystrix + Turbine
Roteamento Netflix Zuul
Segurança Spring Cloud Security
![Page 19: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/19.jpg)
Spring Cloud + Netflix OSSExemplo de Utilização
![Page 20: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/20.jpg)
Spring Cloud Config
“Gerenciamento de configuração para microservices"
• Centraliza a configuração da aplicação • Permite atualizações dinâmicas • Versionado • Suporte à rollback • Suporta configuração via repositórios
• Git, SVN, filesystem • Permite atualização via barramento
• Spring Cloud Bus
![Page 21: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/21.jpg)
Spring Cloud Config
![Page 22: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/22.jpg)
Spring Cloud Config (Server)
@SpringBootApplication @EnableConfigServerpublic class ConfigServer {...}
spring.cloud.config.git.uri: https://github.com/...
ConfigServer.java
application.yml
![Page 23: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/23.jpg)
Spring Cloud Config (Client)
spring.cloud.config.uri: ${vcap.services.configserver.credentials.uri}
application.yml
![Page 24: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/24.jpg)
Demo• Gerenciamento de Configuração
• Spring Cloud Config + Spring Cloud Bus • https://github.com/rcandidosilva/spring-cloud-sample
![Page 25: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/25.jpg)
Netflix Eureka"Transparência de localização aos microservices"
• Registro de serviços REST based • Suporte à replicação • Cache aplicado no stub cliente • Resiliente • Rápido… mas não consistente • Fornece o alicerce para outros serviços • Mantém registro de clientes com metadados
![Page 26: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/26.jpg)
Netflix Eureka
![Page 27: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/27.jpg)
Netflix Eureka@SpringBootApplication @EnableEurekaServerpublic class EurekaServer {...}
@SpringBootApplication @EnableEurekaClientpublic class Application {...}
EurekaServer.java
Application.java
![Page 28: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/28.jpg)
Demo• Transparência de Localização
• Spring Cloud + Netflix Eureka • https://github.com/rcandidosilva/spring-cloud-sample
![Page 29: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/29.jpg)
Netflix Ribbon
• Balanceamento decentralizado no cliente • Resiliente • Suporte à tolerância a falhas • Trabalha com múltiplos protocolos
• HTTP, TCP, UDP • Modelo assíncrono e reativo • Suporte à caching e batching • Múltiplos algoritmos de balanceamento
"Balanceamento de carga para microservices"
![Page 30: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/30.jpg)
Netflix Ribbon
![Page 31: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/31.jpg)
Demo• Balanceamento de Carga
• Spring Cloud + Netflix Ribbon • https://github.com/rcandidosilva/spring-cloud-sample
![Page 32: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/32.jpg)
Netflix Hystrix“Tolerância à falhas para microservices"
• Implementa padrão circuit breakers • Fornece monitoramento aos serviços
• Hystrix dashboard • Suporta comandos assíncronos • Utiliza diferentes thread pools • Pode implementar timeouts
![Page 33: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/33.jpg)
Netflix Hystrix• Circuit Breaker Pattern
• Máquina de estados • Closed, Open, Half-Open
• Falha não é propagada para chamada do cliente
![Page 34: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/34.jpg)
Netflix Hystrix
![Page 35: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/35.jpg)
Hystrix Dashboard
![Page 36: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/36.jpg)
Hystrix Dashboard + Turbine
![Page 37: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/37.jpg)
Demo• Tolerância a Falhas
• Spring Cloud + Netflix Hystrix • https://github.com/rcandidosilva/spring-cloud-sample
![Page 38: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/38.jpg)
Netflix Zuul“Roteamento centralizado para microservices"
• Fornece único ponto de entrada para os serviços • Roteamento e balanceamento na JVM • Cria uma rota para cada serviço no Eureka • Define filtros para pontos de entrada • Similar outros roteamentos
• httpd, nginx, CF go router
![Page 39: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/39.jpg)
Netflix Zuul
![Page 40: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/40.jpg)
Demo• Roteamento centralizado
• Spring Cloud + Netflix Zuul • https://github.com/rcandidosilva/spring-cloud-sample
![Page 41: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/41.jpg)
Spring Cloud Security
“Segurança aplicada para microservices"
• Integração Spring Security + OAuth2 • SSO com OAuth2 e OpenID Connect • Proteção dos serviços com tokens (JWT) • Transmissão tokens entre SSO e apps • OAuth2 + OpenID Connect + JWT ;)
![Page 42: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/42.jpg)
Spring Cloud Security
Discovery
Client Relying Party
Resource Server
Get an access token
& an ID Token (JWT)
Use an access token
Authorization Server
Iden.tyProviderorIDPor
OpenIDProviderorOP
Authorization Endpoint
Token Endpoint
Important Stuff
Userinfo Endpoint
Registration Endpoint
JWKS Endpoint
JWKS Endpoint
Validate (JWT)
ID Token
/.well-known /webfinger /openid-configura.on
Check Session IFrame
End Session Endpoint
![Page 43: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/43.jpg)
Conclusões…• Microservices são sistemas distribuídos • Sistemas distribuídos são complexos • Netflix OSS define ótimas ferramentas para
implementação com microservices • Spring Cloud
• Ótima abstração para Netflix OSS • Fácil utilização (via anotações) • Integração com ecossistema Spring • Enjoy it ;)
![Page 44: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/44.jpg)
Perguntas
?
![Page 45: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/45.jpg)
Referências• http://projects.spring.io/spring-boot/ • http://projects.spring.io/spring-cloud/ • https://netflix.github.io/ • https://github.com/Netflix/zuul • https://github.com/Netflix/eureka • https://github.com/Netflix/ribbon • https://github.com/Netflix/Hystrix • http://www.pwc.com/us/en/technology-forecast/2014/cloud-computing/features/
microservices.html • http://martinfowler.com/articles/microservices.html • http://callistaenterprise.se/blogg/teknik/2015/04/10/building-microservices-with-
spring-cloud-and-netflix-oss-part-1/ • http://www.javaworld.com/article/2927920/cloud-computing/build-self-healing-
distributed-systems-with-spring-cloud.html
![Page 46: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva](https://reader033.vdocument.in/reader033/viewer/2022041720/5e4dc292e5440564de2aee88/html5/thumbnails/46.jpg)
Muito obrigado! @rcandidosilva
rodrigocandido.me