O documento descreve os 12 princípios para aplicações que seguem o manifesto Twelve-Factor, incluindo: 1) manter uma única base de código com uma única instância da aplicação, 2) declarar e isolar explicitamente as dependências, 3) armazenar configurações em variáveis de ambiente.
4. 1. CODEBASE
4
▪ Utilizar sistemas de controle de versão
▪ 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
5. 2. DEPENDENCIES
▪ Declarar explicitamente e isolar
dependências
▫ Códigos e bibliotecas
▫ Serviços e pacotes do sistema
▫ Exemplos: curl, ImageMagick
▪ Utilizar ferramentas para gerenciá-las
▫ Exemplos: composer, Gemfile, npm 5
6. 3. CONFIG
▪ Isolar configurações que podem sofrer
alterações entre 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
7. 4. BACKING SERVICES
▪ Serviços consumíveis via rede devem ser
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
8. 5. BUILD, RELEASE, RUN
▪ Separar estágios de deploy
▫ 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
9. 6. PROCESSES
▪ A aplicação deve ser executada como
processo(s) stateless
▫ Arquitetura share-nothing
▫ Persistência deve ser mantida em backing
services
▫ Nem mesmo sistema de arquivos local
9
10. 7. PORT BINDING
▪ Exporte serviços em portas
▫ A aplicação deve escutar e processar
requisições que chegam
▫ Princípio para se ter uma arquitetura
orientada a serviços
10
11. 8. CONCURRENCY
▪ Crie aplicações que podem ser escaláveis
horizontalmente
▫ 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
12. 9. DISPOSABILITY
▪ Processos são descartáveis
▫ Início rápido
▫ Desligamento amigável
▫ Robustos contra término inesperado
12
14. 11. LOGS
▪ Devem ser considerados como streams
agnósticas
▪ Não é da responsabilidade da aplicação
gerenciar modo e destino do log
14
15. 12. ADMIN PROCESSES
▪ Execute tarefas administrativas e de
gerenciamento no mesmo ambiente em que
sua aplicação principal
▫ Também devem ser adicionados ao VCS
15