MicroServices
@diego_pacheco
Software Architect | Agile Coach
Microservices
Monoliticos
MSA veio depois de SOA
Microservices: Cases - Benchmark
~600 microservices ~150 microservices para uma página
Microservices: Fine-Grained Business
Microservices: Independent + Re-usable
MSA é SOA!
http://martinfowler.com/articles/microservices.html
Unix Philosophy: Dumb Pipes & Smart Endpoints
Remover o “Middleware”
Descentralização
ESB Microservices
Isolamento
Isolamento: Beneficios
Times Recursos Gestão
Isolamento: Beneficios
Times
 Ter multiplos times trabalhando ao mesmo tempo em
coisas diferente, sem merge 
 É possível ter times por serviços
 Cada time pode trabalhar com técnologias diferentes
 Cada time pode trabalhar de formas diferentes por a
dependencia dos times vira por serviços e não pro
pessoas.
 É possível ter times fazendo delivery de business e
outros atualizando tecnologias ou fazendo melhorias de
performance.
Isolamento: Beneficios
Recursos
 Hardware diferente por serviço
 Serviços podem usar mais ou menos recursos
 Serviços não afetam os outros em runtime, tem mais
resiliencia.
 Isolamento de banco permite atualizaçoes no modelo e
tecnolgoia de dados sem impactos e outros serviços.
 Isolamento de CPU, Threads, Memoria, Rede faz com
que o serviço sejá autocontido e indepente assim tendo
mais facilidade para portar de um lugar para outro até
mesmo do DS local para Cloud ou vice-versa.
Isolamento: Beneficios
Gestão
 Diferentes prioridades do negócio podem ser feitas ao
mesmo tempo de um jeito melhor.
 Releases podem acontecer em simultaneo, sem
necessidade de tanta coordenação e bloqueio como em
outros modelos.
 Podem se priorizar melhor: Bugs, Débitos Técnicos,
melhorias de tecnologias e migrações.
 Times tem mais produtividade e menos dependencias.
Velocidade de deploy e test / experimentação de
funcionalidades.
Balanceamento
Anti-Patterns: Entendimentos Errados, Ideias Ruins entre outros…
ANTI-Pattern: 1 Serviço para cada coisa. EX: 1 WS pro operação.
ANTI-Pattern: 1 Serviço tem que ser sempre pequeno.
ANTI-Pattern: MSA é SOA, não ignore os principios.
SOC
Backward
Compatibility
Contracts Versioning
Governance
ANTI-Pattern: NanoServices <= 10..100 LOC. “nem todos concordam”
NanoService or Function as a Service?
Case: Netflix
Case: Twitter
Case: HailO
Case: Gilt
DDD: Domain Driven Design
Usando REST para Microservices
Spring Boot + REST
Node The JS way
Dropwizard+ REST
Netflix OSS - IPC
Akka as Microservice solution
Actors VS RPC
Colossus: nio + akka
Spray: Akka + HTTP
Muitas requests? Mobile? API Gateway Model
API Gateway Model: Como fica a UI?
IPC-ish, point-2-point, Brokerless solutions.
Ribbon
Quasar
Lightweight Servers
Big Fat Jar: $ java –jar service.jar | OneJar, Assembler, Packager, RPM…
Isolamento Físico
Tudo é sobre processos baratos.
Requisitos: DevOps
Requisitos: Monitoramento
Requisitos: Design Boundaries
Multiples DBs & TX
Users Service Images Service Comments Service
Eventual Consistency
 Alternativa a TX distribuidas
 Trabalha com eventos
 Os Serviços tem que ouvir esses
eventos e aplicar as mudanças nos
dados.
 Soluções:
 CQRS + Event Sourcing
 Topicos / Pub-Sub (JMS)
 Akka
 É Possível ter TX local
Eventual Consistency: ES
Log Centralizado – ELK Stack
Log Centralizado – Graphite + Grafana
http://grafana.org/
Log Centralizado – Graylog
https://www.graylog.org/overview/
Back Pressure / Throttling / Spooling
Runtime Isolation + Metrics
Runtime Isolation: Hystrix
Runtime Isolation: Circuit Breaker
https://github.com/Netflix/SimianArmy
Runtime Testing
Todos os microservicos tem que ter o seu proprio pipeline.
Sistema como um organismo vivo.
MicroServices
@diego_pacheco
Software Architect | Agile Coach
Obrigado!
Thank you!

Microservices