▪ Apartar serviços em repositórios diferentes ▪ Relação um-a-um entre código e aplicação ▫ Mais de uma base → sistema distribuído ▪ Várias aplicações usando o mesmo código viola o manifesto
e bibliotecas ▫ Serviços e pacotes do sistema ▫ Exemplos: curl, ImageMagick ▪ Utilizar ferramentas para gerenciá-las ▫ Exemplos: composer, Gemfile, npm 5
deploys ▪ Armazená-las em variáveis de ambiente ▫ Por que não arquivos? ▫ Podem ser acidentalmente incluídos no VCS ▫ Geralmente acoplados à linguagem e/ou SO ▫ Dica de pacote: dotenv 6
tratados como recursos “acoplados” ▪ Substituir um serviço local por um remoto (ou vice-versa) não deve precisar gerar mudanças de código ▫ Exemplos: bancos de dados, gerenciador de filas, caching 7
Build: transformação do repositório em um pacote executável ▫ Release: combinação do build com a configuração do ambiente ▫ Run: execução da aplicação e dos processos necessários 8
▫ Separe tipos de processo diferente para ter regras escaláveis diferentes ▫ Se necessário, utilize serviços de fila ▫ Exemplos: RabbitMQ, Amazon SQS, Gearman 11