SlideShare uma empresa Scribd logo
1 de 74
Construindo Aplicações PHP com
TWELVE-FACTOR APP
Marcela Godoy
06 de Março de 2018
#MeuLugarEmTI
Marcela Godoy
Backend Developer @Eduzz
Coorganizadora Meetup @PHPSP - Campinas
@magodoy88 helloworld@marcelagodoy.net
Cloud Computing
2008 2012
Maior foco no negócio
Escalabilidade para demandas crescentes
Usuário final sem preocupação com infraestrutura
Utilizado em qualquer lugar e em diferentes plataformas
Cloud Computing
SaaS
Software as a Service
(Software como Serviço)
Provedor
SaaS
Aplicação
Data
Runtime
Middleware
O/S
Virtualization
Servers
Storage
Networking
Fácil de implementar gradualmente
Aplicação sempre atualizada, compatível e segura
O provedor cuida de tudo
Acesso de qualquer lugar em diferentes plataformas
SaaS
600 Startups brasileiras
Possuem ao menos um produto
SaaS
SaaS
Eficiente
Sustentável
Padrões de desenvolvimento
Facilite o trabalho do time
Como construir uma aplicação SaaS?
Adam
Wiggins + Heroku
Team
The Twelve-Factor App
The Twelve-Factor App
Facilitar a dinâmica entre desenvolvedores
Resolver problemas sistêmicos
Boas práticas
Escalabilidade
Portabilidade
The Twelve-Factor App
Refactoring
Improving the Design of Existing Code
(Martin Fowler - 1999)
Patterns of Enterprise Application Architecture
(Martin Fowler - 2003)
The Twelve-Factor App
I. Base de Código
“Uma base de código rastreada por controle de versão.
Muitos deploys.”
Controle de Versão
(GIT, Mercurial, Subversion)
Repositório
(Base de código)
I. Base de Código
Relação de um-para-um:
I. Base de CódigoI. Base de Código
Uma base de código = Uma aplicação
Vários deploys para a mesma base de código
I. Base de Código
Várias bases de código envolvidas = Sistema distribuído
Várias aplicações na mesma base = Errado!
I. Base de Código
+ +
II. Dependências
“Declare e isole explicitamente as dependências.”
Gerenciador de dependências
II. Dependências
Dependências declaradas e isoladas
Manifesto de
declaração
Dependências declaradas e isoladas
Ferramenta de
isolamento
Declaração e isolamento de dependência sempre juntos
II. Dependências
Recursos do Sistema devem ser vendorizados
II. Dependências
Como assim?
II. Dependências
II. Dependências
vendor/autoload.php
$ composer install
$ composer update
III. Configurações
“Armazene as configurações no ambiente.”
Configuração:
Tudo que é provável variar entre deploys
III. Configurações
Constantes no código = muito trabalho!
Armazenar as configurações em um arquivo de variáveis
de ambiente
III. Configurações
Novo deploy sem alterar a base de código
Estou fazendo isso certo?
III. Configurações
“Minha base de código poderia ser um repositório
público sem comprometer a minha segurança?”
Veja só
III. Configurações
III. Configurações
III. Configurações
III. Configurações
III. Configurações
IV. Serviços de Apoio
“Trate serviços de apoio como recursos anexados.”
Qualquer serviço que a aplicação consuma como parte
de sua operação (Gerenciamento de dados, cache, filas)
IV. Serviços de Apoio
Serviço de
apoio
Recurso Configurações
Facilidade para acoplar e desacoplar recursos da
aplicação
IV. Serviços de Apoio
Sabe como?
IV. Serviços de Apoio
IV. Serviços de Apoio
IV. Serviços de Apoio
V. Build, Release, Run
“Separe estritamente os estágios de construção e execução.”
Para que a base de código se transforme em versão:
V. Build, Release, Run
Build + Release Run+
Commit + Dependências = Build
V. Build, Release, Run
Build + Configurações do Deploy = Release
(Não se esqueça do nome da versão!)
Release + ambiente de execução + start( ) = Run!
V. Build, Release, Run
Releases nunca voltam ao estágio de Build!
Códigos alterados geram novas Releases
Ferramentas de Deploy revertem Releases (Rollback!)
Novos códigos no Deploy iniciam uma nova Build
V. Build, Release, Run
VI. Processos
“Execute a aplicação como um ou mais processos que
não armazenam estados.”
Processos de stateless e shared-nothing
VI. Processos
Dados consistentes devem ser armazenados em
serviços de apoio
Escalabilidade horizontal
Memórias e sistemas de arquivos apenas para
cache de transição única
VI. Processos
Sessões persistentes – NÃÃÃÃO!
(Use um datastore: memcached, redis...)
VI. Processos
VII. Vínculo de Portas
“Exporte serviços via vínculo de portas.”
Aplicação auto-contida
VII. Vínculo de Portas
Escuta e recebe requisições através de uma porta
Um app torna-se serviço de outro vinculando portas
VII. Vínculo de Portas
VIII. Concorrência
“Escale através do processo modelo.”
VIII. Concorrência
A execução de uma aplicação é representada
por processos
Arquitete a aplicação para lidar com diferentes
cargas
VIII. Concorrência
Performance vs. Custo
Escalonamento por meio de paralelização
IX. Descartabilidade
“Maximize robustez com inicialização rápida e
desligamento suave.”
IX. Descartabilidade
Processos são descartáveis
Escalonamento elástico
Deploy rápido
Produção robusta
IX. Descartabilidade
Desligamento suave:
Porta de
serviço
Requisições
finalizam Desligamento
IX. Descartabilidade
Morte súbita:
Falha de
hardware
Retorna tarefas
à fila
Ferramenta
Backend
X. Paridade entre Desenvolvimento
E Produção
“Mantenha o desenvolvimento, homologação e produção
os mais similares possível.”
X. Paridade entre Desenvolvimento e Produção
( 1 ) Tempo: Dev trabalhando no deploy
local a muito tempo...
( 2 ) Pessoal: O Dev finalizou o código, mas está esperando
o time de deploy
( 3 ) Ferramentas: O Dev utiliza OSX, Nginx e SQLite.
Enquanto isso em produção temos Linux, Apache e MySQL
X. Paridade entre Desenvolvimento e Produção
Implantação contínua:
“Garante entrega ao usuário final sem gargalo
no ambiente de homologação”
X. Paridade entre Desenvolvimento e Produção
( 1 ) Tempo: Dev escreve o código e realiza o deploy em
poucas horas
( 2 ) Pessoal: O Dev finalizou o código, é envolvido com o
deploy e acompanha o comportamento em produção
( 3 ) Ferramentas: Mantenha desenvolvimento e produção
o mais similar possível!
X. Paridade entre Desenvolvimento e Produção
O desenvolvedor não deve usar ferramentas
adaptadoras
Deploys com mesmas versões de cada
serviço de apoio
XI. Logs
“Trate logs como fluxos de eventos.”
XI. Logs
“Fluxos de eventos agregados e ordenados por tempo,
coletados dos fluxos de saída de todos os processos em
execução dos serviços de apoio”
XI. Logs
Não escreve ou gera serviços de Log
Gerido pelo ambiente de execução
XI. Logs
Captura-se o fluxo de saída;
Agrupa-se a outros fluxos;
Direciona para um arquivamento
de longo prazo
XI. Logs
Elasticseach Logstach Kibana
XII. Processos Administrativos
“Rode tarefas de administração/gestão em
processos pontuais.”
XII. Processos Administrativos
Processos Pontuais:
Migração de uma base de dados,
Execução arbitrária de códigos...
Execução em ambiente idêntico a outros processos
Utilizar declaração e isolamento de dependências
E ao final...
Estamos prontos para escalar
Possuímos uma ótima portabilidade
Seguimos boas práticas
Temos uma aplicação robusta
E ao final...
Era isso que a gente queria!
Referências
www.12factor.net Beyond the Twelve-Factor App
Kevin Hoffman
Obrigada!
@magodoy88 helloworld@marcelagodoy.net

Mais conteúdo relacionado

Mais procurados

Explicando DevOps
Explicando DevOpsExplicando DevOps
Explicando DevOpss4nx
 
Automatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWSAutomatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWSAmazon Web Services LATAM
 
Primeiros passos utilizando o AWS Mobile Hub
Primeiros passos utilizando o AWS Mobile HubPrimeiros passos utilizando o AWS Mobile Hub
Primeiros passos utilizando o AWS Mobile HubAmazon Web Services LATAM
 
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRJBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRElvis Rocha
 
Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Pablo Nóbrega
 
Webinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWSWebinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWSAmazon Web Services LATAM
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Apresentação na PHP Conference Brasil 2012
Apresentação na PHP Conference Brasil 2012Apresentação na PHP Conference Brasil 2012
Apresentação na PHP Conference Brasil 2012Ariovaldo Carmona
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Novidades do ASP.NET 5.X
Novidades do ASP.NET 5.XNovidades do ASP.NET 5.X
Novidades do ASP.NET 5.XEduardo Pires
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETRenato Groff
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe munizMatheus de Lara Calache
 
DevOps - melhores práticas e integração contínua
DevOps - melhores práticas e integração contínuaDevOps - melhores práticas e integração contínua
DevOps - melhores práticas e integração contínuaAmazon Web Services LATAM
 

Mais procurados (20)

Explicando DevOps
Explicando DevOpsExplicando DevOps
Explicando DevOps
 
Automatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWSAutomatize seu processo de entrega de software com CI/CD na AWS
Automatize seu processo de entrega de software com CI/CD na AWS
 
Primeiros passos utilizando o AWS Mobile Hub
Primeiros passos utilizando o AWS Mobile HubPrimeiros passos utilizando o AWS Mobile Hub
Primeiros passos utilizando o AWS Mobile Hub
 
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRJBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
 
ArcServe in the AWS Cloud - part II
ArcServe in the AWS Cloud - part IIArcServe in the AWS Cloud - part II
ArcServe in the AWS Cloud - part II
 
Macro Arquitetura de Software
Macro Arquitetura de SoftwareMacro Arquitetura de Software
Macro Arquitetura de Software
 
Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2
 
Front7 React Native
Front7 React NativeFront7 React Native
Front7 React Native
 
Webinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWSWebinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWS
 
O Futuro do ASP.NET
O Futuro do ASP.NETO Futuro do ASP.NET
O Futuro do ASP.NET
 
JavaME
JavaMEJavaME
JavaME
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Apresentação na PHP Conference Brasil 2012
Apresentação na PHP Conference Brasil 2012Apresentação na PHP Conference Brasil 2012
Apresentação na PHP Conference Brasil 2012
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Novidades do ASP.NET 5.X
Novidades do ASP.NET 5.XNovidades do ASP.NET 5.X
Novidades do ASP.NET 5.X
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
 
DevOps - melhores práticas e integração contínua
DevOps - melhores práticas e integração contínuaDevOps - melhores práticas e integração contínua
DevOps - melhores práticas e integração contínua
 
JavaME - Aula 1
JavaME - Aula 1JavaME - Aula 1
JavaME - Aula 1
 
Automatização de Ambientes CI & CD & DevOps
Automatização de Ambientes CI & CD & DevOpsAutomatização de Ambientes CI & CD & DevOps
Automatização de Ambientes CI & CD & DevOps
 

Semelhante a Construindo Aplicações PHP com TWELVE-FACTOR APP

DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasAmazon Web Services LATAM
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAmazon Web Services LATAM
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...Amazon Web Services
 
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaAzure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaRodrigo Marques Teixeira
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlabJackson F. de A. Mafra
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4David Ruiz
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareNorberto Santos
 
SATADS 2019 - Desenvolvimento com recursos da AWS
SATADS 2019 - Desenvolvimento com recursos da AWSSATADS 2019 - Desenvolvimento com recursos da AWS
SATADS 2019 - Desenvolvimento com recursos da AWSAnderson Contreira
 
Ferramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de SoftwareFerramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de SoftwareDanilo Sousa
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker ContainersHugo Henley
 
Adobe flash platform fabricio
Adobe flash platform fabricioAdobe flash platform fabricio
Adobe flash platform fabricioFabricioManzi
 
Site estático + Hospedagem Gratuita.pdf
Site estático + Hospedagem Gratuita.pdfSite estático + Hospedagem Gratuita.pdf
Site estático + Hospedagem Gratuita.pdfDanilo Pinotti
 
Desenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioDesenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioGeovani Ferreira Gonçalves
 
Melhores práticas para Arquitetura em Cloud Computing
Melhores práticas para Arquitetura em Cloud ComputingMelhores práticas para Arquitetura em Cloud Computing
Melhores práticas para Arquitetura em Cloud ComputingDaniel Checchia
 
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile ServicesConstruindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile ServicesWilliam S. Rodriguez
 
WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)Juarez Junior
 
Adobe flash platform bem 2009
 Adobe flash platform bem 2009 Adobe flash platform bem 2009
Adobe flash platform bem 2009FabricioManzi
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHPFlávio Lisboa
 

Semelhante a Construindo Aplicações PHP com TWELVE-FACTOR APP (20)

DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
 
Continuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na NuvemContinuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na Nuvem
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...DevOps na AWS: Construindo Sistemas para Entregas Rápidas -  DEV301 - Sao Pau...
DevOps na AWS: Construindo Sistemas para Entregas Rápidas - DEV301 - Sao Pau...
 
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaAzure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlab
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4
 
ESX Tech Lives - DevOps
ESX Tech Lives - DevOpsESX Tech Lives - DevOps
ESX Tech Lives - DevOps
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
SATADS 2019 - Desenvolvimento com recursos da AWS
SATADS 2019 - Desenvolvimento com recursos da AWSSATADS 2019 - Desenvolvimento com recursos da AWS
SATADS 2019 - Desenvolvimento com recursos da AWS
 
Ferramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de SoftwareFerramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de Software
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker Containers
 
Adobe flash platform fabricio
Adobe flash platform fabricioAdobe flash platform fabricio
Adobe flash platform fabricio
 
Site estático + Hospedagem Gratuita.pdf
Site estático + Hospedagem Gratuita.pdfSite estático + Hospedagem Gratuita.pdf
Site estático + Hospedagem Gratuita.pdf
 
Desenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioDesenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual Studio
 
Melhores práticas para Arquitetura em Cloud Computing
Melhores práticas para Arquitetura em Cloud ComputingMelhores práticas para Arquitetura em Cloud Computing
Melhores práticas para Arquitetura em Cloud Computing
 
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile ServicesConstruindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
 
WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)
 
Adobe flash platform bem 2009
 Adobe flash platform bem 2009 Adobe flash platform bem 2009
Adobe flash platform bem 2009
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHP
 

Construindo Aplicações PHP com TWELVE-FACTOR APP