Escalando uma Aplicação PHP
com Docker
Do monolito ao microserviço
$ whoami
Wellington F. Silva
Técnico Telecom, Programador, Devops,
Instrutor, Escritor, Marido, Pai,
Apreciador de cafés e viciado em pizza.
AKA: wsilva | tom | boina | fisi
Agenda
• Monolito
• Ciclo de feedback
• Evolução do Monolito
• Jornada ao microserviço
• Docker
• Demo
Monolith First
Monolith First
• http://martinfowler.com/bliki/
MonolithFirst.html
Monolith First
• http://martinfowler.com/bliki/
MonolithFirst.html
• Começa rápido
Monolith First
• http://martinfowler.com/bliki/
MonolithFirst.html
• Começa rápido
• Baixa complexidade entre
desenvolvimento e a entrega
Monolith First
• http://martinfowler.com/bliki/
MonolithFirst.html
• Começa rápido
• Baixa complexidade entre
desenvolvimento e a entrega
• Baixo Custo
Monolith First
• http://martinfowler.com/bliki/
MonolithFirst.html
• Começa rápido
• Baixa complexidade entre
desenvolvimento e a entrega
• Baixo Custo
• Meta: MVP
Feedback Loop
Feedback Loop
• PDCA - Plan, Do, Check, Act
Feedback Loop
• PDCA - Plan, Do, Check, Act
• Retomada de contexto é custosa
Feedback Loop
• PDCA - Plan, Do, Check, Act
• Retomada de contexto é custosa
• Testes diminuem o tempo de feedback loop
Feedback Loop
• PDCA - Plan, Do, Check, Act
• Retomada de contexto é custosa
• Testes diminuem o tempo de feedback loop
• Continuous Integration e Continuous Deployment / Delivery
Feedback Loop
• PDCA - Plan, Do, Check, Act
• Retomada de contexto é custosa
• Testes diminuem o tempo de feedback loop
• Continuous Integration e Continuous Deployment / Delivery
• Muitos bugs - falta de confiança para colocar em produção
–Conway’s Law
“Organizations which design systems ... are constrained to
produce designs which are copies of the communication
structures of these organizations”
Big Monolith
Big Monolith
• Aumento do sistema, mais pessoas para mantê-lo
Big Monolith
• Aumento do sistema, mais pessoas para mantê-lo
• The Mythical Man-Month do Frederick Brooks: "Adding manpower
to a late software project makes it later"
Big Monolith
• Aumento do sistema, mais pessoas para mantê-lo
• The Mythical Man-Month do Frederick Brooks: "Adding manpower
to a late software project makes it later”
• 2 pizza team - tamanho dos times - Jeff Bezos da AWS
Big Monolith
• Aumento do sistema, mais pessoas para mantê-lo
• The Mythical Man-Month do Frederick Brooks: "Adding manpower
to a late software project makes it later”
• 2 pizza team - tamanho dos times - Jeff Bezos da AWS
• O crescimento leva naturalmente na divisão de equipes
–Desconhecido
“Softwares são desenvolvidos por pessoas e para pessoas.”
Microservice Journey
Microservice Journey
• Microservice não escala software, escala pessoas
Microservice Journey
• Microservice não escala software, escala pessoas
• Art of Scalability - Arquitetos do Ebay - 3 dimensões escaláveis:
Microservice Journey
• Microservice não escala software, escala pessoas
• Art of scalability - Arquitetos do Ebay - 3 dimensões escaláveis:
• horizontal: mais máquinas
Microservice Journey
• Microservice não escala software, escala pessoas
• Art of scalability - Arquitetos do Ebay - 3 dimensões escaláveis:
• horizontal: mais máquinas
• particionamento de dados: dividindo coisas similares
Microservice Journey
• Microservice não escala software, escala pessoas
• Art of scalability - Arquitetos do Ebay - 3 dimensões escaláveis:
• horizontal: mais máquinas
• particionamento de dados: dividindo coisas similares
• decomposição funcional: dividir responsabilidades diferentes
Microservice Journey
• Microservice diminui o contexto, permite serviço coeso, baixo
acoplamento
Microservice Journey
• Microservice diminui o contexto, permite serviço coeso, baixo
acoplamento
• APIs para comunicação entre serviços distintos
Microservice Journey
• Microservice diminui o contexto, permite serviço coeso, baixo
acoplamento
• APIs para comunicação entre serviços distintos
• Permite utilizar as melhores tecnologias (liguagem, stack) para
resolver cada problema
Microservice Journey
• Problemas novos
Microservice Journey
• Problemas novos
• aumento de complexidade
Microservice Journey
• Problemas novos
• aumento de complexidade
• confiabilidade tem que estar no software (hardware falha)
Microservice Journey
• Problemas novos
• aumento de complexidade
• confiabilidade tem que estar no software (hardware falha)
• sempre previnir falhas (de comunicação, rede)
Microservice Journey
• Problemas novos
• aumento de complexidade
• confiabilidade tem que estar no software (hardware falha)
• sempre previnir falhas (de comunicação, rede)
• diversos pipelines de entrega (CI/CD) que se interdependem
Microservice Journey
• Problemas novos
• smart router - testes AB, deploys blue-green, cannary releases
Microservice Journey
• Problemas novos
• smart router - testes AB, deploys blue-green, cannary releases
• log unificado das instâncias
Microservice Journey
• Problemas novos
• smart router - testes AB, deploys blue-green, cannary releases
• log unificado das instâncias
• dashboard central com status de todos os serviços
Microservice Journey
• Problemas novos
• smart router - testes AB, deploys blue-green, cannary releases
• log unificado das instâncias
• dashboard central com status de todos os serviços
• monitoria e alarmes para cada serviço
Microservice Journey
• Problemas novos
• smart router - testes AB, deploys blue-green, cannary releases
• log unificado das instâncias
• dashboard central com status de todos os serviços
• monitoria e alarmes para cada serviço
• testes integrados mais difíceis de realizar
Microservice Journey
• Estratégia
Microservice Journey
• Estratégia
• funções e serviços satélites
Microservice Journey
• Estratégia
• funções e serviços satélites
• achar os limites do contexto da aplicação - se foi usado DDD fica
mais fácil identificar
Microservice Journey
• Estratégia
• funções e serviços satélites
• achar os limites do contexto da aplicação - se foi usado DDD fica
mais fácil identificar
• automatização de pipeline (devops)
Microservice Journey
• Estratégia
• funções e serviços satélites
• achar os limites do contexto da aplicação - se foi usado DDD fica
mais fácil identificar
• automatização de pipeline (devops)
• utilizar APIs, pontos de comunicação síncronos e assíncronos
Microservice Journey
• Estratégia
• CQRS
Microservice Journey
• Estratégia
• CQRS
• consistência eventual de dados
Microservice Journey
• Estratégia
• CQRS
• consistência eventual de dados
• aplicar o 12 factor apps para a criação dos novos serviços
Microservice Journey
• Estratégia
• CQRS
• consistência eventual de dados
• aplicar o 12 factor apps para a criação dos novos serviços
• fazer um balanço de qual projeto geram mais valor e dão menos
trabalho (geralmente 1 ou 2 semanas)
Microservice Journey
• Estratégia
• CQRS
• consistência eventual de dados
• aplicar o 12 factor apps para a criação dos novos serviços
• fazer um balanço de qual projeto geram mais valor e dão menos
trabalho (geralmente 1 ou 2 semanas)
• com a evolução matamos o monólito por inanição
Microservice Journey
• Estratégia
• utilizar a última geração de Paas, containers
Docker
• Evolução do LXC (Linux
Containers)
Docker
• Evolução do LXC (Linux
Containers)
• Muito rápido (trabalha com
processos)
Docker
• Evolução do LXC (Linux
Containers)
• Muito rápido (trabalha com
processos)
• Muito leve (não precisa do
Kernel no Guest)
Docker
• Evolução do LXC (Linux
Containers)
• Muito rápido (trabalha com
processos)
• Muito leve (não precisa do
Kernel no Guest)
• Open Source
Docker
• Diversas Ferramentas para
cluster e orquestração
Docker
• Diversas Ferramentas para
cluster e orquestração
• Melhora a distribuição de
recursos
Docker
Docker
Docker
Docker
https://github.com/wsilva/demo-phpsp-ima
DEMO
–Wellington F. Silva
“Docker. Perfeito pra microservice”
Mais sobre Docker
http://bit.ly/curso-docker
http://docker-br.herokuapp.com
https://telegram.me/dockerbr
Cupom 25% Novatec
DOCKER
Dúvidas
Feedback: https://joind.in/talk/18bb6
Slides: http://speakerdeck.com/wsilva

Do monolito aos microserviços com Docker (PHPSP+IMA)