Pular para o conteúdo principal

12 Fatores na Construção de um Aplicativo Web

The Twelve-Factor App é um conjunto de recomendações muito popular para desenvolvimento de aplicações web, que é resultado de anos de experiência do pessoal da Heroku na administração de centenas de milhares de aplicações na forma de software-como-serviço.

Os 12 fatores é um conjunto de soluções conceituais que visa tornar as aplicações mais portáveis, escaláveis e fáceis de serem desenvolvidas e implantadas. Pode ser aplicada a projetos escritos em qualquer linguagem de programação.

12 Fatores

Base de Código

O código do projeto deve estar em um repositório de um controle de versão tal como o Git, Subversion ou Mercurial. E deve haver apenas um projeto por repositório. Todas as implantações do projeto devem partir desse mesmo repositório. Tudo bem usar ramos para manter variações do mesmo projeto, mas não diferentes repositórios.

Nível de importância: Fundamental. Não dá pra trabalhar de outra forma.

Dependências

Toda aplicação não trivial precisa usar software de terceiros. No entanto, essas dependências externas devem ficar explícitas e serem controladas através de um gerenciador de pacotes, que existem comumente em várias linguagens, tal como o Pipenv no Python e o npm para Node.js.

Mesmo ferramentas do sistema que forem usadas pela aplicação, tal como curl por exemplo, devem ser gerenciadas de alguma forma para garantir sua disponibilidade.

Nível de importância: Alto. Dependências externas podem se tornar um pesadelo se não forem gerenciadas corretamente.

Configurações

Configuração é a parte do projeto que varia conforme o ambiente que está sendo usado. O código-fonte é a parte que não varia.

Por exemplo, a parte da aplicação que lida com o banco de dados é sempre a mesma, mas a localização do banco de dados varia entre um ambiente de desenvolvimento e o de produção.

Senhas de acesso, endereço de servidores e serviços etc. fazem parte da configuração e devem ser mantidos fora do controle de versão. Essas informações devem ser obtidas durante a execução da aplicação de variáveis de ambiente ou arquivos de configuração não-rastreados.

Nível de importância: Alto. Com a virtualização dos ambientes, a configuração da aplicação ficou mais simples, mas ainda necessário.

Serviços de Apoio

Um serviço de apoio é qualquer serviço que a aplicação consome via rede como parte de sua operação normal, tais como banco de dados, sistemas de mensagens/filas e cache e serviços de SMTP para email.

Serviços de apoio devem ser desacoplados da aplicação, de modo que possam ser substituídos facilmente através de alterações na configuração, como a substituição de uma URL por exemplo.

Nível de importância: Alto. Torna a aplicação mais simples de configurar e manter.

Construir, Lançar e Executar

A construção transforma a configuração de uma revisão do repositório em algo pronto pra ser executado. O lançamento envia esse pacote a um servidor específico junto com as configurações necessárias para esse ambiente e a aplicação pode rodar nesses servidores.

A ideia é que o processo de lançamento seja o mais automatizado possível para que ocorra sem surpresas e sem intervenção manual nos últimos estágios. Isso significa que não deve ser permitido fazer alterações diretamente no ambiente de produção.

Nível de importância: Conceitual. Integração, entrega e implantação contínuas são desejáveis e indicam maturidade do processo de desenvolvimento, mas não são essenciais.

Processos

Algumas aplicações rodam em vários servidores para serem mais tolerante a falhas ou simplesmente para lidar com mais tráfego.

Os processos devem ser stateless, isto é, o estado de cada transação não é definido no processo em si, mas sim por um registro armazenado em um banco de dados ou outro local de armazenamento compartilhado entre os processos.

Nível de importância: Alto. Aplicações stateless são mais robustas e fáceis de gerenciar.

Vínculo de Portas

Da mesma forma que os serviços de apoio são acessados por uma URL, sua aplicação também deve poder ser acessada por outros da mesma forma.

Nível de importância: Médio. Geralmente isso é obtido automaticamente quando a aplicação é fornecida através de um servidor web.

Concorrência

Sua aplicação deve ser planejada para distribuir sua carga em processos independentes. Desse modo, a capacidade de processamento pode ser escalado implantando mais cópias da aplicação (mais processos) em mais servidores ao invés de tentar fazer a aplicação maior, isto é, rodar uma única instância em uma máquina maior.

Nível de importância: Baixa. A escalabilidade é uma preocupação para aplicações que já conseguiram um grande nível de sucesso. A prioridade inicial é conseguir esse sucesso e não a escalabilidade em si.

Descartabilidade

A aplicação deve ser projetada para começar rapidamente e encerrar graciosamente. Deve ser capaz de começar a processar o quanto antes quando for iniciada. Quando for encerrada, deve deixar o sistema em um estado correto, lidando com casos de encerramento normais, tal como o recebimento de um sinal SIGTERM, até os casos de encerramentos bruscos.

Nível de importância: Médio. Depende do grau de escalabilidade necessário da aplicação.

Paridade entre Desenvolvimento e Produção

Os ambientes de desenvolvimento, homologação e produção devem ser tão similares quanto possível. Segundo os 12 fatores, o processo de desenvolvimento deve visar a implantação contínua.

Nível de importância: Alto. Além de importante por melhorar a qualidade e a velocidade do desenvolvimento, atualmente é fácil de manter esses ambientes mais próximos com o uso de containers.

Logs

Logs são uma fonte importante de informações sobre o funcionamento de uma aplicação. A sugestão aqui é enviar os registros de log diretamente pra saída stdout. Caberá ao ambiente de execução (homologação ou produção) capturar essa saída e direcionar para um destino mais adequado para visualização e registro.

Nível de importância: Alto. É possível e desejável extrair informações importantes do log tais como tendências, heurísticas e alertas.

Processos Administrativos

Processos administrativos, tais como a migração de um banco de dados, também fazem parte da aplicação e devem ser entregues junto com o resto do sistema.

Devem rodar a partir do mesmo ambiente da aplicação.

Nível de importância: Alto. Tarefas administrativas também devem ser consideradas parte da aplicação.

Conclusão

Os 12 fatores não são recentes e foram definidos tendo em mente as necessidades da plataforma Heroku. Ainda assim, fornecem um bom conjunto de diretrizes que deve ser seguido no desenvolvimento de aplicações web modernas que rodam na nuvem para que sejam escaláveis, robustas e confiáveis.

Referências

Lançamento do Módulo 1 do Cursos de Controle de Versão com Mercurial, Git e Subversion

A Pronus acaba de lançar o primeiro módulo dos cursos de Controle de Versão com Mercurial, Git e Subversion na modalidade de Ensino a Distância. Esses módulos são GRÁTIS, mas por tempo limitado.

Esses módulos possuem uma mesma base teórica bastante sólida. As diferenças aparecem na parte prática, com aulas que mostram em detalhes as particularidades de controle de versão nas operações da ferramenta escolhida (Mercurial, Git ou Subversion), usando tanto a execução pela linha de comando quanto uma interface gráfica.

O primeiro módulo é básico, voltado para profissionais e estudantes iniciantes. Nele, você vai aprender definições e conceitos importantes sobre Gerência de Configuração de Software e Controle de Versão. Na parte prática, o aluno aprenderá a instalar, configurar e usar o a ferramenta escolhida (Mercurial, Git ou Subversion) para executar operações básicas de controle de versão que são essenciais para o trabalho individual.

Os próximos módulos continuam a partir daí e tratarão de trabalho em equipe, variações de projeto, controle de mudança e integração contínua.

Veja umas aulas abertas pra ter uma ideia de como é o curso. Temos certeza de que você ficará muito satisfeito e vai se inscrever.

Os links para cada um dos módulos são:

Qual a melhor ferramenta de controle de versão: Subversion, Git ou Mercurial?

As ferramentas mais interessantes atualmente de controle de versão são o Subversion, Git e Mercurial. Se você ainda não escolheu uma, ficará feliz em saber que existe sim uma solução simples e eficaz dependendo do perfil da equipe e das necessidades do projeto. A surpresa está em saber que a melhor opção certamente será o Subversion ou o Mercurial, mas dificilmente o Git. Vamos analisar os porquês neste artigo.

Seja qual for a sua escolha, a Pronus possui o melhor treinamento em Subversion, Git ou Mercurial. São mais de 20 horas de treinamento e mais de 100 exercícios práticos que cobrem operações cotidianas e avançadas de controle de versão no desenvolvimento de software. Veja as aulas abertas e inscreva-se!

Leia mais…

Por que o Facebook escolheu o Mercurial e não o Git?

Nem todo mundo sabe, mas o Facebook usa o Mercurial como controle de versão desde 2013. Antes, usou o Subversion e depois tentou o Git. Mas como o Git não deu conta do volume de código do seu repositório monolítico, resolveram investir no Mercurial e deu muito certo! Desde então, o Facebook é um grande colaborador do Mercurial, contribuindo com inúmeras melhorias ao projeto. Também são grandes colaboradores o Google e o Mozilla (Firefox).

Essa é a versão resumida da história. Mas o que aconteceu exatamente? Quais foram as limitações do Git que fizeram que fosse preterido em relação ao Mercurial? Vamos analisar esses pontos no artigo.

Leia mais…

Vídeo: Revertendo Alterações no Mercurial (11min) - Operações Básicas de Controle de Versão Parte 3

Esse vídeo trata do primeiro dos três tipos de reversão possível no controle de versão: a reversão das operações pendentes no diretório de trabalho. Isso conclui um quarto do curso de controle de versão com Mercurial! Cobrimos até aqui todas as operações cotidianas que você precisa para trabalhar individualmente com o Mercurial!

Próximos capítulos:

  • Trabalho em equipe
  • Variações de projeto
  • Operações avançadas (manipulação de histórico, fluxo de trabalho etc.)

Vídeo: Ignorando Arquivos Desnecessários (11min) - Operações Básicas de Controle de Versão com Mercurial Parte 2

Nem todos os arquivos presentes no diretório de trabalho devem ser rastreados pelo controle de versão. Assista ao vídeo para saber quais são esses tipos de arquivos, porque não devem ser versionados e como filtrá-los pelo controle de versão.

Operações Básicas de Controle de Versão com Mercurial - Parte 1 (13min)

Este é o quinto na série de vídeos sobre Gerência de Configuração de Software, Controle de Versão e Mercurial:

  1. O que é Gerência de Configuração de Software?
  2. Para que serve o controle de versão?
  3. Como funciona o controle de versão?
  4. Instalação e configuração do Mercurial
  5. Operações Básicas de Controle de Versão com o Mercurial - Parte 1 (este vídeo)

Essa aula tem 13 minutos de duração e apresenta as operações de criação de repositório, adição, remoção, cópia e renomeação de arquivos, e a consolidação. As operações são apresentadas através de dois exemplos que são executados igualmente pelo terminal, usando a linha de comando, e pela interface gráfica com o TortoiseHg.

Assista aos vídeos e comece a usar o Mercurial ainda hoje em seus projetos!

Vídeo: Instalação e Configuração do Mercurial (5min)