Os microservices tornaram-se o tema mais quente na arquitetura de software, e muito se pode dizer sobre os seus benefícios. Mas é importante compreender que ao começar a decompor o monolito entramos no reino de sistemas distribuídos. Precisamos lidar com cenários de transparência de localização, recuperação de falhas, escalabilidade, autonomia, facilidade de atualização e outros aspectos. Por outro lado, quando tratamos toda essa complexidade, conseguimos definir aplicações que rodam “eternamente” – tornando-se auto-curáveis (self-healing) e muito escaláveis.
O projeto Spring Cloud traz ferramentas para facilitar a aplicação desses conceitos na prática, definindo padrões de implementação para sistemas distribuídos com suporte a gerenciamento de configuração, descoberta de serviços, circuit breakers, roteamento, distribuição de sessões, barramento de controle, dentre outras técnicas. Pode também ser combinado com a plataforma Netflix OSS, que oferece componentes especialmente úteis em um ambiente de microservices, como Eureka (registro), Ribbon (localização), Hystrix (tolerância a falhas), Zulu (roteamento).
Nesta palestra será demonstrado como usar na prática essas ferramentas, bem como os desafios e lições aprendidas – tudo com base em casos reais de uso de uma arquitetura de microservices implementada com Spring Cloud e Netflix OSS.
6. 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"
7. 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
14. • API
• Routing / Health check
• Microservices
• Logging
• Data Management
• Eureka
• Hystrix + Turbine
• Ribbon
• Zuul
• + alguns outros…
15.
16. 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”
18. 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
20. 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
22. Spring Cloud Config (Server)
@SpringBootApplication
@EnableConfigServer
public class ConfigServer {...}
spring.cloud.config.git.uri: https://github.com/...
ConfigServer.java
application.yml
23. Spring Cloud Config (Client)
spring.cloud.config.uri: ${vcap.services.configserver.credentials.uri}
application.yml
24. Demo
• Gerenciamento de Configuração
• Spring Cloud Config + Spring Cloud Bus
• https://github.com/rcandidosilva/spring-cloud-sample
25. 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
28. Demo
• Transparência de Localização
• Spring Cloud + Netflix Eureka
• https://github.com/rcandidosilva/spring-cloud-sample
29. 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"
37. Demo
• Tolerância a Falhas
• Spring Cloud + Netflix Hystrix
• https://github.com/rcandidosilva/spring-cloud-sample
38. 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
41. 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 ;)
42. Spring Cloud Security
Discovery
Client
Relying Party
Resource
Server
Get an access token
& an ID Token (JWT)
Use an access token
Authorization
Server
Iden.ty Provider or
IDP or
OpenID Provider or
OP
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
43. 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 ;)