Metodologia 12factors: projetos de SaaS mais assertivos - DXC Technology | IT Forum 365
• outubro 13, 2016
12factorsaplicativosHPEITF365+HPESaaS
Garantir que o software como serviço (software as a service, ou SaaS) esteja adequado ao conceito de transformação digital de sua empresa requer que a aplicação tenha passado por um preparo específico durante o processo de desenvolvimento, conhecido como Metodologia dos Doze Fatores, ou 12factors. "Trata-se de manifesto com os 12 pontos que devem ser seguidos para a criação de um projeto SaaS de sucesso", diz Rita de Cássia Rodrigues, coordenadora e professora dos cursos de graduação tecnológica da Faculdade de Informática e Administração Paulista (Fiap).
O conceito pode ser adotado em aplicativos escritos em qualquer linguagem de programação e que utilizem qualquer combinação de serviços de apoio (banco de dados, filas, cache de memória etc.). Veja, a seguir, os 12 fatores.
Todos os códigos devem ser gerenciados por um sistema de controle de versões (Git ou Subversion). A partir disso, é importante gerar deploys, que são versões de código executada em máquinas de desenvolvimento, testes ou produção.
O ideal é que as dependências do projeto sejam declaradas e isoladas do código, mas caso dependam de alguma ferramenta externa, como banco de dados, por exemplo, é necessário inserir uma versão do item em um diretório do projeto. Isso garante que o deploy possa ser feito em qualquer servidor, facilitando a escalabilidade.
O recomendado é que as configurações sejam armazenadas dentro do ambiente, não no código da fonte, configuradas em cada servidor e lidas no momento da execução. Por exemplo, o código de comunicação com o banco de dados é sempre o mesmo, mas a localização do banco será diferente para a máquina do desenvolvedor e do servidor de produção.
São os serviços que o aplicativo consome, normalmente por meio da rede, necessários para a operação da aplicação, como bancos de dados, servidores de cache, serviços de e-mail e repositórios de arquivos. Esses serviços podem ser executados na mesma máquina, ou em hosts e data centers diferentes, o que traz flexibilidade: caso ocorra alguma mudança, o código não precisará ser alterado.
A base de códigos é transformada em um deploy por três estágios:
Buid: consiste em pegar uma versão específica do repositório com suas dependências e transformá-la em uma versão executável.
Release: envia um build para um servidor e executa todas as configurações necessárias para o terceiro estágio.
Execução: inicializa todos os processos necessários para que os usuários possam utilizar.
Pense em seu aplicativo como um ou mais processos, que sejam "stateless" e "share-nothing". A ideia é diminuir o acoplamento entre os componentes do projeto para facilitar a escala.
Exporta serviços, por meio de entradas, sem precisar de um servidor externo. Pode-se criar uma URL separada para o API que o website poderá utilizar, sem precisar passar por níveis de segurança (firewall e autenticação), o que auxilia na otimização do tempo de execução.
O projeto deve ser pensado na forma de processos, que podem ser executados paralelamente. Por exemplo: processamento das solicitações web e de e-mails, chamadas de APIs e compartilhamento em serviços de mídia social são processos que trabalham de forma independente, e se forem executados separadamente terão melhor rendimento.
Ajuda na inicialização e desligamento rápidos. Ao implantar um novo código, o objetivo é que a nova versão seja iniciada imediatamente e que comece a responder ao tráfego. Se uma aplicação gastar 20 segundos para se preparar para atender ao tráfego, pode prejudicar o início/término de processos independentes.
É importante ter um ciclo mais rápido entre o desenvolvimento de uma alteração e a implantação da mudança no ambiente de produção. Para isso, mantenha o desenvolvimento, teste e produção o mais semelhante possível. Isso significa usar os mesmos serviços de apoio, as mesmas técnicas de gerenciamento de configuração, e assim por diante.
Os logs são ferramentas que ajudam a entender o comportamento de uma aplicação, identificando erros e processos de melhoria. Em uma máquina de desenvolvimento, pode-se ter um arquivo com essas informações mas, em um servidor de produção, é possível usar algo mais complexo, como um Hadoop ou um serviço externo
As tarefas de administração e gerenciamento devem ser automatizadas, já que a aplicação pode rodar em diversos servidores, contemplando vários processos. Tarefas como limpar cache, carregar dados e atualizar bases de dados precisam ser facilitadas.