Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • Mais de 200 livros de programação gratuitos em português
    • System Design: da teoria à prática
    • Pessoas e Processos: o fator humano por trás da arquitetura de sistemas
    • Observabilidade e Operações: dando olhos e mãos ao sistema
    • Performance e Custo: otimizando o que realmente importa
    • Padrões de Arquitetura e Organização: quando o design encontra a realidade
    • Confiabilidade e Consistência: construindo sistemas que não quebram sob pressão
    • Bancos de dados e armazenamento: onde moram os gargalos
    Facebook X (Twitter) Instagram
    Código Simples .NETCódigo Simples .NET
    Código Simples .NETCódigo Simples .NET
    Home»Boas práticas»Metodologia 12 Factor App – construindo Software as a Service (SaaS) com qualidade – pt1

    Metodologia 12 Factor App – construindo Software as a Service (SaaS) com qualidade – pt1

    Jhonathan SoaresBy Jhonathan Soares12 de janeiro de 20174 Mins Read Boas práticas
    Share
    Facebook Twitter LinkedIn WhatsApp Copy Link

    Entregas de software como serviço estão muito comuns hoje em dia, graças à inúmeras plataformas que auxiliam desenvolvedores a construir e entregar softwares de maneira desacoplada e “em cloud”. Serviços como Amazon, Digital Ocean, Azure, Heroku, GitHut etc, se tornaram referência no assunto e são muito utilizados quando pensamos em SaaS.

    E com o crescimento de popularidade, esse novo jeito de “construir e entregar software” recebe diversas sugestões de boas práticas. O 12 factor é um destes guide lines, funcionando como uma metodologia. Ele  é independente de linguagem de programação, criado por Adam Wiggins, Co-fundador do heroku, e hoje eu vou mostrar para vocês um pouco do que o guia aborda:

    Na era moderna, software é comumente entregue como um serviço: denominados web apps, ou software-como-serviço. A aplicação doze-fatores é uma metodologia para construir softwares-como-serviço que:

    • Usam formatos declarativos para automatizar a configuração inicial, minimizar tempo e custo para novos desenvolvedores participarem do projeto;
    • Tem um contrato claro com o sistema operacional que o suporta, oferecendo portabilidade máxima entre ambientes que o executem;
    • São adequados para implantação em modernas plataformas em nuvem, evitando a necessidade por servidores e administração do sistema;
    • Minimizam a divergência entre desenvolvimento e produção, permitindo a implantação contínua para máxima agilidade;
    • E podem escalar sem significativas mudanças em ferramentas, arquiteturas, ou práticas de desenvolvimento.

    A metodologia doze-fatores pode ser aplicada a aplicações escritas em qualquer linguagem de programação, e que utilizem qualquer combinação de serviços de suportes (banco de dados, filas, cache de memória, etc).

    Vamos ver os 5 primeiros fatores:

    I. Base de Código

    “Uma base de código com rastreamento utilizando controle de revisão, muitos deploys”

    Uma base de código, múltiplos deploys. Isso significa que você pode/deve ter vários codebase para várias versões. Branches é ok, diferentes repositórios não são. Você pode usar git/mercurial ou até mesmo SVN (mesmo eu não recomendando). E ferramentas para DVCS (Distributed version control) por exemplo, SourceTree já são muito boas.

    II. Dependências

    “Declare e isole as dependências”

    Obviamente, você deve colocar todas dependências em seus manifestos/config files,  o máximo possível. O guia alerta e recomenda a não utilizar nada que seja um software pré instalado e/ou amarrado ao sistema, mas eu não seguiria esta dica 100% ao pé da letra. Se suas implementações são automatizadas e você garante a presença de uma determinada ferramenta, então está tudo ok. Apenas tenha em mente de isolar suas dependências e ser “independente” delas o máximo possível.

    III. Configurações

    “Armazene as configurações no ambiente”

    Esta é uma regra/dica muito importante – As configurações variam entre os ambientes, acontece, eu sei. Dentre elas, estão as credenciais para o banco de dados, S3, Twitter, Facebook, security tokens, chaves de acesso, configurações que só você e Deus sabem etc. Mas a configuração não deve ficar no código, pois além de não ser seguro, dificulta o setup em outro ambiente. O problema das configurações pode ser resolvido usando arquivos de configuração para cada ambiente, como yml ou xml, que devem estar no .gitignore. Caso contrário, as credenciais continuam compartilhadas. Porém, a solução mais recomendada é utilizar variáveis de ambiente, pois estão presentes em todos os sistemas operacionais e acessíveis de qualquer linguagem de programação. Além disso, podem ser facilmente alteradas.

    IV. Serviços de Apoio

    “Trate os serviços de apoio, como recursos ligados”

    Trata-se de tratar os serviços externos de que a sua aplicação depende igualmente, independentemente de os gerir ou se outra parte os gere. Se houver uma fila na memória, não implante um MQ separado. Se existe um banco de dados incorporado, não gerencie uma instalação de banco de dados (por exemplo, neo4j oferece uma variante incorporada). E assim por diante. Mas se você precisar do serviço externo completo, torne o caminho / credenciais configurável como se fosse externo (ao invés de, por exemplo, apontar para localhost por padrão).

    V. Build, release, run

    “Separe estritamente os builds e execute em estágios”

    É ótimo ter um ciclo de vida. Mas é preciso tempo e recursos para configurá-lo. Dependendo de suas limitações, você pode não ter o pipeline completo, e alguns estágios podem ser mais manuais  do que ideal. Às vezes, por exemplo, nos estágios iniciais de uma inicialização, pode ser benéfico ser capaz de trocar arquivos de classe ou páginas da web em um servidor de produção em execução, ao invés de passar por um processo de deploy completo (que você não teve tempo para automatizar). Eu sei que isso soa como heresia, e você deve se esforçar para um processo totalmente automatizado e separado, mas antes de chegar lá, não descartar totalmente a opção para manual. Ou seja, seja simples, mas não se esqueça do cenário ideal, nunca.

    Ufa! Esta foi a primeira parte do artigo e você vai pode ler a segunda parte aqui.

    Um grande abraço a todos!

    Share. Facebook Twitter LinkedIn Telegram WhatsApp Copy Link
    Jhonathan Soares
    • Website
    • Facebook
    • X (Twitter)
    • LinkedIn

    Criador do blog Código Simples e com mais 15 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist.

    Posts Relacionados

    System Design: da teoria à prática

    Arquitetura Boas práticas 12 de setembro de 20255 Mins Read

    Pessoas e Processos: o fator humano por trás da arquitetura de sistemas

    Arquitetura Gestão & Produtividade 11 de setembro de 20256 Mins Read

    Fundamentos que nunca mudam: 5 princípios práticos de System Design

    Arquitetura Boas práticas 5 de setembro de 20256 Mins Read
    Newsletter

    Digite seu endereço de e-mail para receber notificações de novas publicações por e-mail.

    Junte-se a 25mil outros assinantes
    Posts recentes
    • Mais de 200 livros de programação gratuitos em português
    • System Design: da teoria à prática
    • Pessoas e Processos: o fator humano por trás da arquitetura de sistemas
    • Observabilidade e Operações: dando olhos e mãos ao sistema
    • Performance e Custo: otimizando o que realmente importa
    Categorias
    • Arquitetura (27)
      • Microsserviços (2)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (92)
      • NoSql (59)
      • Sql (38)
    • Boas práticas (33)
      • Gestão & Produtividade (3)
      • Metodologias Ágeis (6)
    • Cursos (53)
    • Dicas (106)
    • Front-End (92)
    • IA (4)
    • Linux (6)
    • NodeJS (4)
    • Post do Leitor (9)
    • Python (5)
    • Seo (12)
    • Tecnologia (30)
      • ITIL (1)
      • Padrões de Projeto (4)
    • Testes (2)

    VEJA TAMBÉM

    Testes
    28 de fevereiro de 20254 Mins Read

    30 APIs Gratuitas para desenvolvedores

    APIs são ferramentas essenciais para desenvolvedores que querem criar aplicações mais eficientes, conectadas e funcionais sem reinventar a roda. Desde dados abertos, notícias em tempo real e inteligência artificial até esportes e clima, há APIs gratuitas que oferecem vastas possibilidades de integração. Este artigo apresenta 30 APIs gratuitas que podem acelerar o desenvolvimento e abrir novas oportunidades para projetos inovadores.

    1000 livros gratuitos sobre programação!

    Facebook X (Twitter) Instagram LinkedIn

    Type above and press Enter to search. Press Esc to cancel.

    Vá para versão mobile