Combinando Micro-serviços com
Práticas DevOps
Rodrigo Cândido da Silva
@rcandidosilva
Sobre
• JUG Leader do GUJavaSC
• http://gujavasc.org
• Twitter
• @rcandidosilva
• Contatos
• http://rodrigocandido.me
Agenda
• Micro-serviços
• DevOps
• Docker
• AWS ECS
• Demo
• Perguntas
Monolito vs. Micro-serviços
Monolito vs. Micro-serviços
Micro-serviços
• Pequenos
• Deployment interdependente
• Independente de tecnologia
• Infra-estrutura separada
"Small independent component with well-
defined boundaries that’s doing one thing, but
doing it well"
Manifesto Reativo
Micro-serviços
• Principais desafios
• Configuração centralizada
• Registro e descoberta de serviços
• Roteamento de serviços
• Balanceamento de carga
• Tolerância à falhas
• Monitoramento
• Segurança
• API
• Routing / Health check
• Microservices
• Logging
• Data Management
• Eureka
• Hystrix + Turbine
• Ribbon
• Zuul
• + alguns outros…
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”
Spring Cloud
• Principais Componentes
Spring BootSpring Cloud
Spring Cloud + Netflix OSS
Spring Cloud + Netflix OSS
“Casamento perfeito para criação de micro-
serviços resilientes“
Gerenciamento de Configuração Spring Cloud Config + Bus
Descoberta de Serviços Netflix Eureka
Balanceamento de Carga Netflix Ribbon
Circuit Breaker Netflix Hystrix + Turbine
Proxy Server Netflix Zuul
Segurança Spring Cloud Security
Spring Cloud Config
Netflix Eureka
Netflix Ribbon
Netflix Hystrix
• Circuit Breaker Pattern
Hystrix Dashboard
Netflix Zuul
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
ALM
DevOps
Lifecycle
Ferramentas
Deployment
Deployment
Monolito Micro-serviço
Deployment vs Environments
• Múltiplos ambientes diferentes de execução
Auto Scaling
• Capacidade de aumentar e diminuir a escalabilidade
automaticamente
Orquestração
• Gerenciamento da comunicação dos serviços em containers
diferentes
Docker
Docker engine Docker Hub
“Open platform for building, shipping
and running distributed applications"
Containers vs Virtualization
Virtualization Container
• Minutos para iniciar uma VM, e… segundos para iniciar
um container
Docker
AWS ECS
“highly scalable, high performance container
management service that supports Docker
containers"
AWS ECS
AWS ECS
DevOps + Jenkins + ECS
Demo
• Microservices + DevOps
• https://github.com/rcandidosilva/spring-cloud-sample
Conclusões
• Arquitetura de micro-serviços é complexa
• Práticas de DevOps são essenciais
• Containers são ótimas alternativas para micro-serviços
• Containers necessitam de orquestração
• Cloud oferece boas soluções para orquestração
• Enjoy it ;)
Perguntas
?
Iniciativas
• Eventos mensais
• Blogging
• Redes sociais
• Listas de discussão
• Organização de eventos
• Projetos open source
• etc…
Como Colaborar
• Site
• http://www.gujavasc.org
• Twitter
• http://twitter.com/gujavasc
• Github
• http://github.com/gujavasc
• Facebook
• http://facebook.com/gujavasc
• Slack
• https://gujavasc.herokuapp.com/
Referências
• http://projects.spring.io/spring-boot/
• http://projects.spring.io/spring-cloud/
• https://netflix.github.io/
• http://www.reactivemanifesto.org/
• http://www.docker.com/
• http://docs.docker.com/engine/swarm/
• http://jenkins.io/
• http://aws.amazon.com/ecs/
Muito Obrigado!
@rcandidosilva
rodrigocandido.me

GUJavaSC - Combinando Micro-serviços com Práticas DevOps