Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Construindo Microservices
Auto-curáveis com Spring Cloud
e Netflix OSS
Rodrigo Cândido da Silva
@rcandidosilva
About Me
• Software Architect
• http://integritastech.com
• JUG Leader do GUJavaSC
• http://gujavasc.org
• Twitter
• @rcan...
Agenda
• Monolito vs. Microservices
• Principais Desafios
• Spring Cloud + Netflix OOS
• Spring Cloud Config + Bus
• Netfl...
Monolito vs. Microservices
Monolito vs. Microservices
Microservices
• Características
• Pequenos
• Deployment interdependentes
• Independente de tecnologia
• Independente de in...
Microservices
• Como torná-los auto-curáveis?
• Gerenciamento de configuração
• Registro e descoberta dos serviços
• Rotea...
Gerenciamento de Configuração
Registro e Descoberta de Serviços
Roteamento
Tolerância à Falhas
Balanceamento de Carga
• API
• Routing / Health check
• Microservices
• Logging
• Data Management
• Eureka
• Hystrix + Turbine
• Ribbon
• Zuul
• ...
Spring Cloud
• Conjunto de bibliotecas / componentes
• Não é apenas uma ferramenta
• Integrado ao Spring Boot
• Suporta di...
Spring Cloud
• Principais Componentes
Spring Cloud + Netflix OSS
"Casamento perfeito para criação de
microservices auto-curáveis"
Gerenciamento de configuração ...
Spring Cloud + Netflix OSS
Exemplo de Utilização
Spring Cloud Config
“Gerenciamento de configuração para microservices"
• Centraliza a configuração da aplicação
• Permite ...
Spring Cloud Config
Spring Cloud Config (Server)
@SpringBootApplication
@EnableConfigServer
public class ConfigServer {...}
spring.cloud.confi...
Spring Cloud Config (Client)
spring.cloud.config.uri: ${vcap.services.configserver.credentials.uri}
application.yml
Demo
• Gerenciamento de Configuração
• Spring Cloud Config + Spring Cloud Bus
• https://github.com/rcandidosilva/spring-cl...
Netflix Eureka
"Transparência de localização aos microservices"
• Registro de serviços REST based
• Suporte à replicação
•...
Netflix Eureka
Netflix Eureka
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {...}
@SpringBootApplication
@EnableEu...
Demo
• Transparência de Localização
• Spring Cloud + Netflix Eureka
• https://github.com/rcandidosilva/spring-cloud-sample
Netflix Ribbon
• Balanceamento decentralizado no cliente
• Resiliente
• Suporte à tolerância a falhas
• Trabalha com múlti...
Netflix Ribbon
Demo
• Balanceamento de Carga
• Spring Cloud + Netflix Ribbon
• https://github.com/rcandidosilva/spring-cloud-sample
Netflix Hystrix
“Tolerância à falhas para microservices"
• Implementa padrão circuit breakers
• Fornece monitoramento aos ...
Netflix Hystrix
• Circuit Breaker Pattern
• Máquina de estados
• Closed, Open, Half-Open
• Falha não é propagada para
cham...
Netflix Hystrix
Hystrix Dashboard
Hystrix Dashboard + Turbine
Demo
• Tolerância a Falhas
• Spring Cloud + Netflix Hystrix
• https://github.com/rcandidosilva/spring-cloud-sample
Netflix Zuul
“Roteamento centralizado para microservices"
• Fornece único ponto de entrada para os serviços
• Roteamento e...
Netflix Zuul
Demo
• Roteamento centralizado
• Spring Cloud + Netflix Zuul
• https://github.com/rcandidosilva/spring-cloud-sample
Spring Cloud Security
“Segurança aplicada para microservices"
• Integração Spring Security + OAuth2
• SSO com OAuth2 e Ope...
Spring Cloud Security
Discovery	
Client
Relying Party
Resource
Server
Get an access token
& an ID Token (JWT)
Use an acces...
Conclusões…
• Microservices são sistemas distribuídos
• Sistemas distribuídos são complexos
• Netflix OSS define ótimas fe...
Perguntas
?
Referências
• http://projects.spring.io/spring-boot/
• http://projects.spring.io/spring-cloud/
• https://netflix.github.io...
Muito obrigado!
@rcandidosilva
rodrigocandido.me
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS
Upcoming SlideShare
Loading in …5
×

QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS

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.

QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS

  1. 1. Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva
  2. 2. About Me • Software Architect • http://integritastech.com • JUG Leader do GUJavaSC • http://gujavasc.org • Twitter • @rcandidosilva • Contatos • http://rodrigocandido.me
  3. 3. 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
  4. 4. Monolito vs. Microservices
  5. 5. Monolito vs. Microservices
  6. 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. 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
  8. 8. Gerenciamento de Configuração
  9. 9. Registro e Descoberta de Serviços
  10. 10. Roteamento
  11. 11. Tolerância à Falhas
  12. 12. Balanceamento de Carga
  13. 13. • API • Routing / Health check • Microservices • Logging • Data Management • Eureka • Hystrix + Turbine • Ribbon • Zuul • + alguns outros…
  14. 14. 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”
  15. 15. Spring Cloud • Principais Componentes
  16. 16. 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
  17. 17. Spring Cloud + Netflix OSS Exemplo de Utilização
  18. 18. 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
  19. 19. Spring Cloud Config
  20. 20. Spring Cloud Config (Server) @SpringBootApplication @EnableConfigServer public class ConfigServer {...} spring.cloud.config.git.uri: https://github.com/... ConfigServer.java application.yml
  21. 21. Spring Cloud Config (Client) spring.cloud.config.uri: ${vcap.services.configserver.credentials.uri} application.yml
  22. 22. Demo • Gerenciamento de Configuração • Spring Cloud Config + Spring Cloud Bus • https://github.com/rcandidosilva/spring-cloud-sample
  23. 23. 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
  24. 24. Netflix Eureka
  25. 25. Netflix Eureka @SpringBootApplication @EnableEurekaServer public class EurekaServer {...} @SpringBootApplication @EnableEurekaClient public class Application {...} EurekaServer.java Application.java
  26. 26. Demo • Transparência de Localização • Spring Cloud + Netflix Eureka • https://github.com/rcandidosilva/spring-cloud-sample
  27. 27. 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"
  28. 28. Netflix Ribbon
  29. 29. Demo • Balanceamento de Carga • Spring Cloud + Netflix Ribbon • https://github.com/rcandidosilva/spring-cloud-sample
  30. 30. 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
  31. 31. Netflix Hystrix • Circuit Breaker Pattern • Máquina de estados • Closed, Open, Half-Open • Falha não é propagada para chamada do cliente
  32. 32. Netflix Hystrix
  33. 33. Hystrix Dashboard
  34. 34. Hystrix Dashboard + Turbine
  35. 35. Demo • Tolerância a Falhas • Spring Cloud + Netflix Hystrix • https://github.com/rcandidosilva/spring-cloud-sample
  36. 36. 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
  37. 37. Netflix Zuul
  38. 38. Demo • Roteamento centralizado • Spring Cloud + Netflix Zuul • https://github.com/rcandidosilva/spring-cloud-sample
  39. 39. 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 ;)
  40. 40. 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
  41. 41. 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 ;)
  42. 42. Perguntas ?
  43. 43. 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
  44. 44. Muito obrigado! @rcandidosilva rodrigocandido.me

×