O que são os 12 Factor App? – Parte 2 \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 13 Horas 

 54 Min 

 18 Seg 

   Tempo restante da oferta: 13 54 18 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) O que são os 12 Factor App? – Parte 2  [ Engenharia de Software ](https://www.treinaweb.com.br/blog/categoria/engenharia-de-software) 

# O que são os 12 Factor App? – Parte 2

 No artigo anterior, foi apresentado o conceito do 12 Factor App. Nessa segunda parte, veremos mais três fatores: Backing Services; Build, Release, Run e Processes.

 [ Marylene Guedes ](https://www.treinaweb.com.br/blog/autor/marylene-guedes) 6 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/TWELVE-FACTOR-APP.png)  

No [artigo anterior](https://www.treinaweb.com.br/blog/o-que-sao-os-12-factor-app-parte-1/ "artigo anterior"), foi apresentado o conceito do 12 Factor App. Vimos o conceito principal e os 3 primeiros fatores: **Codebase**, **Dependencies** e **Configs**.

De forma resumida, os [12 Factor App](https://12factor.net/ "12 Factor App") são 12 fatores definidos por um grupo de desenvolvedores da [Heroku](https://www.heroku.com/ "Heroku"). Trata-se de 12 diretivas que norteiam o desenvolvimento saudável e sustentável de aplicações SaaS (Software as a Service).

Na segunda parte desse artigo, veremos mais três fatores: **Backing Services**, **Build, Release, Run** e **Processes**.

### Backing Services

Backing Services, ou Serviços de Apoio, são serviços que são consumidos por uma aplicação principal para que esta funcione e desempenhe suas funções. Trata-se de serviços que tradicionalmente são consumidos via interface de rede.

Alguns exemplos de serviços de apoio são: bancos de dados (como MySQL, SQL Server, PostgreSQL, Oracle), serviços de cache (como Memcached, Redis, Cassandra), serviços de comunicação assíncrona como filas e tópicos (como Apache Kafka, RabbitMQ e Amazon SQS/SNS) e até mesmo serviços de monitoramento de aplicações (como Sentry ou New Relic).

Serviços de apoio não fazem parte do núcleo da aplicação de maneira direta, mas são imprescindíveis para que a aplicação funcione e desempenhe o papel esperado.

Por exemplo: uma aplicação que realiza a gestão de uma escola precisa de um banco de dados para armazenar os dados e informações a serem gerenciadas. Embora o núcleo da aplicação seja a gestão da escola em si, sem a presença de um banco de dados, a aplicação não funcionaria corretamente, pois ela não teria uma estrutura confiável para guardar todas as informações manipuladas. Isso mostra a força e importância dos Backing Services para a aplicação principal.

Backing Services podem estar expostos de várias maneiras dentro da infraestrutura de uma aplicação. Eles podem estar implantados dentro de uma infraestrutura local (como serviços On Premise) ou até mesmo serem gerenciados por terceiros (como o RDS, um serviço de banco de dados relacional gerenciado pela AWS).

O ponto importante é que a maneira como o serviço está disponível não pode impactar a maneira como a aplicação é executada: se o banco de dados da aplicação está instalado localmente ou se está em um serviço de nuvem, isso deve ser transparente para a aplicação.

Além disso, uma aplicação não deve ser acoplada com um de seus Backing Services: a aplicação deve ser capaz de trocar seu banco de dados entre uma instância local e uma instância gerenciada por terceiros de maneira transparente.

### Build, release, run

Aplicações, quando são construídas, precisam ser entregues através de operações de deploy. Geralmente, para a geração de um deploy, são necessários três estágios:

• **Estágio de construção, ou build:** nesse momento, todo o código presente em uma versão do codebase é transformado em uma versão executável. Este processo de transformação envolve a compilação do código, a geração de binários e o empacotamento em conjunto com suas respectivas dependências necessárias;

• **Estágio de lançamento, ou release:** nesta etapa, o pacote gerado no estágio de build é aplicado dentro de uma configuração específica. Geralmente, estas configurações são específicas para diferentes ambientes de execução. Por exemplo, uma mesma aplicação pode ter configurações específicas para cada ambiente de execução, como um ambiente de desenvolvimento, um ambiente de homologação e um ambiente de produção. As configurações que serão utilizadas pela aplicação são definidas no estágio de lançamento;

• **Estágio de execução, ou run:** nesta etapa, a aplicação é executada dentro da versão gerada no estágio de construção e com as configurações definidas no estágio de lançamento.

Estas etapas precisam ser muito bem separadas umas das outras devido às suas naturezas: não deve ser possível alterar código em tempo de execução, pois este código fatalmente não poderá ser reintegrado ao codebase. Não deve ser possível definir configurações de execução na etapa de build, pois a aplicação ainda está sendo gerada, e não deve ser possível definir estas configurações durante a execução, pois a aplicação pode já ter sido iniciada com valores incorretos de configuração.

Gerenciar processos de build, release e run pode parecer algo simples em determinados ambientes, mas são processos que naturalmente se tornam complexos no decorrer do tempo. Aos poucos, é natural que vá ficando complicado gerenciar múltiplas versões geradas pelos processos de build de maneira alinhada com a coordenação de diferentes ambientes de execução com diferentes configurações.

Por isso, hoje existem ferramentas específicas para auxiliar nestes processos, ferramentas estas conhecidas como CI/CD (Continuous Integration/Continuous Delivery). Alguns exemplos destas aplicações são o Jenkins, o Ansible e o Deployer.

### Processes

Quando uma aplicação entra no estágio de execução, esta passa a ser composta por múltiplos processos. Estes processos podem ser representados por várias estruturas, como diferentes threads ou até mesmo sub-rotinas, uma estrutura comum em linguagens modernas como Go (goroutines) e Kotlin (coroutines).

Ainda podemos ter a mesma aplicação com múltiplas instâncias de execução concorrentes, como em microsserviços que escalam em múltiplas instâncias para suportarem cargas maiores. Aplicações que seguem o 12 Factor App devem conseguir reagir naturalmente a estes ambientes de execução complexos.

Para que as aplicações consigam lidar com processos concorrentes de maneira natural, duas características são mandatórias: estas aplicações precisam ser stateless (ou seja, não devem guardar estados) e devem ser share-nothing (ou seja, seus diferentes processos não devem trocar informações e estados entre si).

Cada um dos processos precisa ser isolado e independente dos demais processos em execução, sejam estes processos sub-rotinas, threads ou múltiplas instâncias concorrentes. Caso seja necessário compartilhar algum estado, as aplicações devem utilizar os Backing Services, como um banco de dados ou um serviço de armazenamento externo. Em algumas situações, até pode ser plausível utilizar um processo de armazenamento temporário e transitório, como a própria memória, mas de maneira geral, isso deve ser evitado.

Isso é essencial para que estas aplicações possam reagir principalmente a situações como necessidade de escalabilidade (superior ou inferior), onde a gestão de estado compartilhado tende a se tornar um grande desafio.

- [ #12 Factor App ](https://www.treinaweb.com.br/blog/tag/12-factor-app)
- [ #Backing Services ](https://www.treinaweb.com.br/blog/tag/backing-services)
- [ #Build ](https://www.treinaweb.com.br/blog/tag/build)
- [ #Release ](https://www.treinaweb.com.br/blog/tag/release)
- [ #Run ](https://www.treinaweb.com.br/blog/tag/run)
- [ #Processes ](https://www.treinaweb.com.br/blog/tag/processes)

Autor

 ![Marylene Guedes](//secure.gravatar.com/avatar/5b0ba52b3705f298802db58782656bbc?d=mm)

## Marylene Guedes

 Responsável pelo sucesso do cliente na TreinaWeb. Graduada em Gestão de Tecnologia da Informação pela FATEC Guaratinguetá, além de estudante de UX/UI. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/marylene-guedes)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/TWELVE-FACTOR-APP-400x280.png)  [ Engenharia de Software ](https://www.treinaweb.com.br/blog/categoria/engenharia-de-software) 

     6 anos atrás

    ##  [ O que são os 12 Factor App? - Parte 1 ](https://www.treinaweb.com.br/blog/o-que-sao-os-12-factor-app-parte-1) 

     Se você trabalha desenvolvendo aplicativos que funcionam como um serviço, conheça os 12 (Twelve) Factor App, uma metodologia que te ajudará a criar aplicações melhores.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/03/TWELVE-FACTOR-APP-400x280.png)  [ Engenharia de Software ](https://www.treinaweb.com.br/blog/categoria/engenharia-de-software) 

     6 anos atrás

    ##  [ O que são os 12 factor app? - Parte 3 ](https://www.treinaweb.com.br/blog/o-que-sao-os-12-factor-app-parte-3) 

     Nesta terceira parte, iremos abordar mais três dos 12 princípios: port binding, concurrency e disposability.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/unidades_de_medidas_no_css-400x280.jpg)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     4 anos atrás

    ##  [ Unidades de medidas no CSS ](https://www.treinaweb.com.br/blog/unidades-de-medidas-no-css) 

     Nesse artigo você irá entender de fato a diferença entre as várias opções de unidades medidas do CSS, como Rem, Em, %, Px, entre outras.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/07/05112250/SPRING-BOOT-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ Criando uma API REST com o Spring Boot ](https://www.treinaweb.com.br/blog/criando-uma-api-rest-com-o-spring-boot) 

     Todos os passos da criação de uma API REST com o framework Spring Boot do Java, no Visual Studio Code.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/lean-ux-como-potencializar-o-foco-na-experiencia-do-usuario-parte-1-400x280.png)  [ Acessibilidade e User Experience (UX) ](https://www.treinaweb.com.br/blog/categoria/acessibilidade-e-user-experience-ux) 

     6 anos atrás

    ##  [ Lean UX: como potencializar o foco na experiência do usuário – parte 2 ](https://www.treinaweb.com.br/blog/lean-ux-como-potencializar-o-foco-na-experiencia-do-usuario-parte-2) 

     Nessa segunda parte, veremos os 15 princípios que regem o Lean UX.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/20161707/PHP-PSR-1-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ O que são as PSRs do PHP ](https://www.treinaweb.com.br/blog/o-que-sao-as-psrs-do-php) 

     Neste artigo veremos o que são as PSRs do PHP. Entenderemos conceitos importantes, como, RFCs e a RFC2119, além de falar sobre o grupo responsável pelas PSRs, o PHP-FIG.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/08/o-que-e-ruby-on-rails-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     6 anos atrás

    ##  [ O que é Ruby on Rails? ](https://www.treinaweb.com.br/blog/o-que-e-ruby-on-rails) 

     Veja neste artigo o que é Ruby on Rails.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/03/01154814/NUGET-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ O que é o NuGet? ](https://www.treinaweb.com.br/blog/o-que-e-o-nuget) 

     Um gerenciador de pacote é essencial em qualquer plataforma de desenvolvimento moderna. Para o .NET há o Nuget, o conheça em detalhes neste artigo.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/09/27171418/loiane-groner-400x280.png)  [ Entrevistas ](https://www.treinaweb.com.br/blog/categoria/entrevistas) 

     8 anos atrás

    ##  [ TW Entrevista 12: Loiane Groner ](https://www.treinaweb.com.br/blog/tw-entrevista-12-loiane-groner) 

     Fizemos uma série de entrevistas chamada "TW Entrevista". A entrevistada de hoje é a Loiane Groner, que já escreveu diversos livros publicados internacionalmente e possui os títulos GDE (Google Developer Expert) e Microsoft MVP (Most Valuable Professional).

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/06/foreach-no-php-aprenda-ler-arrays-e-outras-estruturas-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Foreach no PHP. Aprenda ler arrays e outras estruturas! ](https://www.treinaweb.com.br/blog/foreach-no-php-aprenda-ler-arrays-e-outras-estruturas) 

     O loop foreach no PHP é uma estrutura de repetição simples e flexível! Aprenda corretamente como utilizar para percorrer arrays e outras estruturas no PHP.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/03/iterators-php-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Generators no PHP ](https://www.treinaweb.com.br/blog/generators-no-php) 

     Saiba o que são Iterators e Generators, bem como os seus casos de uso.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/11/30154906/TOP-5-1-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     9 anos atrás

    ##  [ Top 5 das linguagens de programação mais populares de 2017 ](https://www.treinaweb.com.br/blog/top-5-das-linguagens-de-programacao-mais-populares-de-2017) 

     O ano está acabando e você, sabe quais foram as linguagens de programação mais utilizadas / populares neste ano?

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **13h 54min 18s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
