SlideShare uma empresa Scribd logo
Douglas
Alonso
12 Fatores (Twelve-Factor App)
Introdução aos 12 Fatores
“12 Factors APP”
Douglas Alonso
Douglas
Alonso
12 Fatores (Twelve-Factor App)
Arquiteto de Soluções – Itaú Unibanco
Especializado em Engenharia de Software PUC-SP
Graduado em Tecnologia e Desenvolvimento de Sistemas – IBTA SP
Consultor de TI atuando a mais de 20 anos no mercado nacional participando
de grandes projetos para grandes empresas.
Douglas Alonso Cruz
Douglas
Alonso
12 Fatores (Twelve-Factor App)
Evolução dos sistemas
Sistema Local Sistema em Rede Sistema em ambiente em Nuvem
Douglas
Alonso
12 Fatores (Twelve-Factor App)
Evolução das Arquiteturas
Sistema Monolítico Sistema Micro Serviços
Interface do
Usuário
Regras de
Negócio
Acesso a Dados
Base de
Dados
Interface do
Usuário
Microserviço
Clientes
Microserviço
Fornecedores
Microserviço
Estoque
Microserviço
Tabelas
Microserviço
Produtos
Base de
Dados
Base de
Dados
Base de
Dados
Base de
Dados
Imaginando um
Sistema de vendas
Douglas
Alonso
12 Fatores (Twelve-Factor App)
O que mudou?
Vimos na imagem anterior que a complexidade aumentou, agora em vez de olhar para um
sistema, passamos a ter que olhar para vários micro sistemas, com isso manter configurações,
logs, métricas, código, testes ficou realmente mais trabalhoso e complicado.
Douglas
Alonso
12 Fatores (Twelve-Factor App)
Vamos falar do que interessa
Twelve-Factor App é uma metodologia, é um guia usado para a construção de aplicações SAAS. A metodologia
tem como base 12 fatores, ou melhor 12 práticas para permitir que aplicações sejam construídas tendo como
objetivo portabilidade, resiliência, segurança, robustez entre outras características.
E o que isso tem a ver com o cenário dos micro serviços?
Todos os 12 fatores podem e devem ser usados no desenvolvimento dos micro serviços e na infra que serão
executados.
A quem se destina: Desenvolvedores que criam software como serviço,
engenheiros de operações, arquitetos, afinal a todos que criam ou
pretendem criar software de qualidade.
Douglas
Alonso
12 Fatores (Twelve-Factor App)
A metodologia Twelve-Factor foi criado na Heroku, empresa pioneira em hospedagem no mundo cloud. É independente
de linguagem de programação e serve como um guia para desenvolvimento de aplicações com qualidade.
Foi criada em 2011
Douglas
Alonso
12 Fatores (Twelve-Factor App)
I Code Base (Base de código)
Utilizar uma base de código para rastreamento e controle de revisão da aplicação. Ter apenas uma base de código por
aplicação, sempre tem que haver essa relação de 1 pra 1, uma base de código para uma aplicação.
Se existirem várias bases de código isso não é uma aplicação e sim um sistema distribuído, já o inverso onde múltiplas
aplicações compartilham uma base de código também fere a metodologia e não deve ser usado.
Douglas
Alonso
12 Fatores (Twelve-Factor App)
II Dependencies (Dependências)
Bibliotecas
A sua aplicação deve ser autocontida ou seja dentro do seu container ou pacote ela precisa ter todas
as bibliotecas ou pacotes necessários para o seu funcionamento. Ferramentas como (Npm, yarn,
maven, nuget, grade) ajudam neste gerenciamento.
Porém também existem outros tipos de dependências como conexões com banco de dados, serviços, que
podem nos causar problemas, neste caso ferramentas como Chef, Puppet, Docker e Kubernetes.
Tendo as dependências declaradas facilitará também no sentido de integração de novas pessoas na equipe,
rodando apenas um comando no terminal, teremos a aplicação rodando e o ambiente configurado.
Douglas
Alonso
12 Fatores (Twelve-Factor App)
III Config (Configurações)
A 1ª recomendação é que as configurações e o codigo fonte e sejam totalmente separados um do outro. As
configurações podem ser armazenadas em variáveis de ambiente, variáveis de ambiente são pertinentes ao host
onde a aplicação está hospedada, deste modo não corre o risco de alguém sobrepor um arquivo com caminho
errado etc.
As configurações jamais devem ser mantidas em repositório pois contém dados sensíveis e podem impactar na
segurança da empresa. Armazenar configurações em código como constantes também fere a metodologia e não deve
ser usado.
Uma maneira muito simples de verificar se seu aplicativo segue este
princípio de configuração ou não é: Perguntando-se se você pode
tornar seu aplicativo de código aberto agora, sem fazer nenhuma
alteração e sem comprometer nenhuma de suas credenciais.
Set Env APPLICATION_ENV
“development”
Douglas
Alonso
12 Fatores (Twelve-Factor App)
IV Backing services (Serviços de
apoio)
Trate serviços de apoio como recursos anexados
Um serviço de apoio é qualquer serviço que o app consuma via rede como parte de sua operação normal.
Exemplos incluem armazenamentos de dados (como MySQL ou MongoDB), sistemas de mensagens/filas (tais
como RabbitMQ), serviços SMTP para e-mails externos (tais como Sendgrid), e sistemas de cache (tais como
Redis).
O código para um app doze-fatores não faz
distinção entre serviços locais e de terceiros. Para
o app, ambos são recursos anexados, acessíveis via
uma URL ou outro localizador/credenciais na config.
Um deploy do app doze-fatores deve ser capaz de
trocar um banco de dados MySQL por um gerenciado
por terceiros (tais como Amazon RDS) sem realizar
quaisquer mudanças no código do app. Em ambos os
casos, apenas o identificador de recurso precisa
mudar.
Douglas
Alonso
12 Fatores (Twelve-Factor App)
V Build, Release, Run (Construa, libere, execute)
Uma base de código é transformada em um deploy geralmente por três estágios:
Build  consiste em pegar uma versão especifica do repositório com suas dependências e transforma-la em
uma versão executável, funcional, seja por compilação ou empacotamento;
Release  consiste no envio de um build para um servidor e a execução de todas as configurações
necessárias para que ele entre no terceiro estágio
Run  é a inicialização de todos os processos necessários para que ele esteja disponível para os
usuários acessarem.
JENKINS
Douglas
Alonso
12 Fatores (Twelve-Factor App)
VI Process (Processos)
Execute o aplicativo como um ou mais processos sem estado. Um aplicativo segue este princípio se
suas instâncias podem ser criadas e destruídas a qualquer momento sem afetar a funcionalidade geral
de nosso aplicativo.
Interface do
Usuário
Microserviço
Clientes
Microserviço
Vendas
Microserviço
Estoque
Microserviço
Tabelas
Microserviço
Produtos
Base de
Dados
Base de
Dados
Base de
Dados
Base de
Dados
Interface do
Usuário
Microserviço
Clientes
Microserviço
Vendas
Microserviço
Estoque
Microserviço
Tabelas
Microserviço
Produtos
Base de
Dados
Base de
Dados
Base de
Dados
Base de
Dados
Microserviço
Vendas
Microserviço
Vendas
Microserviço
Vendas
Douglas
Alonso
12 Fatores (Twelve-Factor App)
VII Port Binding (Atribuição a portas)
A ideia é que o projeto não dependa de um servidor externo como o Apache ou IIS por exemplo para ser
executado, mas que possa ser auto-contido e executar em uma porta específica que seria acessado por outras
partes do projeto ou mesmo pelos usuários.
http://localhost:7195
Douglas
Alonso
12 Fatores (Twelve-Factor App)
VIII Concurrency (Concorrência)
Tente pensar em seu projeto na forma de processos, como citado anteriormente, que podem ser executados em
paralelo.
Chamadas http não demoradas podem ser resolvidas pelo servidor web de forma rápida e devolvida para o
cliente, porém tarefas mais demoradas podem ser enviadas para mecanismos de filas que executarão o
processamento em background sem travar sua aplicação e retornarão a informação assim que o processamento
for concluído.
Este segundo modo permite que processamento sejam executados em paralelo.
Douglas
Alonso
12 Fatores (Twelve-Factor App)
IX Disposability (Descartabilidade)
Os processos de um app doze-fatores são descartáveis, significando que podem ser iniciados ou parados a
qualquer momento. Isso facilita o escalonamento elástico, rápido deploy de código ou mudanças de configuração,
e robustez de deploys de produção.
Lembra da imagem dos nossos micro serviços
Em dado momento preciso executar um processo
grande e demorado para calcular meu estoque no
final do mês, neste caso subiria mais instâncias do
micro serviço de vendas e estoque. Terminado o
calculo poderia simplesmente derrubar essas
instancias.
Outro exemplo, um micro serviço travou. O
sistema deve derrubar matar esse processo e
subir um novo.
Douglas
Alonso
12 Fatores (Twelve-Factor App)
X Dev / Prod parity (Igualdade de ambiente)
Os ambientes de produção, homologação e desenvolvimento devem ser o mais similares possíveis.
Facilitando assim os processos de Deploy Continuo.
Douglas
Alonso
12 Fatores (Twelve-Factor App)
XI Logs
Os logs são uma importante ferramenta para entender o comportamento de um projeto, identificando erros
e pontos de melhoria. O fluxo de evento para um app pode ser direcionado para um arquivo, ou visto em
tempo real via tail num terminal. Mais significativamente, o fluxo pode ser enviado para um sistema
indexador e analisador tal como Splunk,
Douglas
Alonso
12 Fatores (Twelve-Factor App)
XII Admin Process – Processos Administrativos
Tarefas administrativas devem ser tratadas de forma automatizada. Como agora nosso projeto pode rodar
em diversos servidores, com diversos processos, coisas como limpar caches, carregar dados, atualizar
bases de dados, etc, também devem ser facilitadas.
As linguagens modernas geralmente tem um CLI (Command Line Interfaces) e através de comandos
podemos executar e automatizar muitas coisas, se juntarmos isso a ferramenta de pipeline como Jenkins,
O AWS Pipeline, o Azure Pipelines o cenário fica melhor ainda.
O fluxo de evento para um app pode ser direcionado para um arquivo, ou visto em tempo real via tail num terminal. Mais significativamente, o fluxo pode ser enviado para um sistem
O fluxo de evento para um app pode ser direcionado para um arquivo, ou visto em tempo real via tail num terminal. Mais significativamente, o fluxo pode ser enviado para um sist
Douglas
Alonso
12 Fatores (Twelve-Factor App)
https://12factor.net/pt_br/
Documentação Oficial 12 Fatores
As informações contidos aqui no 12 fatores é o básico do que temos que pensar para ter um produto
/ sistema de qualidade, existem muitas outras preocupações a serem tomadas, mas fica para uma
próxima conversa.
Se quiserem conhecer um pouco mais procurem pelo termo Engenharia da Confiabilidade ou SRE
https://srebrasil.com/
Douglas
Alonso
12 Fatores (Twelve-Factor App)
Obrigado
Douglas Alonso Cruz
douglasalonso@gmail.com
https://www.linkedin.com/in/douglasalonso/
Raphael Freitas
raphael.f.santos@outlook.com
https://www.linkedin.com/in/raphael-Freitas-santos

Mais conteúdo relacionado

Mais procurados

Arquitetura cliente servidor
Arquitetura cliente servidorArquitetura cliente servidor
Arquitetura cliente servidor
Marcia Abrahim
 
Orquestração de containers com Rancher
Orquestração de containers com RancherOrquestração de containers com Rancher
Orquestração de containers com Rancher
Alex Ishida
 
Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
Mauricio Cesar Santos da Purificação
 
Introdução ao Spring Framework
Introdução ao Spring FrameworkIntrodução ao Spring Framework
Introdução ao Spring Framework
Natanael Fonseca
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
Vagner Santana
 
Aula 7 banco de dados
Aula 7   banco de dadosAula 7   banco de dados
Aula 7 banco de dados
Jorge Ávila Miranda
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dados
vini_campos
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
UFPA
 
Banco de Dados - NoSQL
Banco de Dados - NoSQLBanco de Dados - NoSQL
Banco de Dados - NoSQL
Marcos Luiz Lins Filho
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
Rangel Javier
 
Apresentação mvc
Apresentação mvcApresentação mvc
Apresentação mvc
leopp
 
diagrama de componentes
diagrama de componentesdiagrama de componentes
diagrama de componentes
elliando dias
 
Aula 1 - Revisão UML
Aula 1 - Revisão UMLAula 1 - Revisão UML
Aula 1 - Revisão UML
Rosanete Grassiani dos Santos
 
Aula 6 - Cardinalidade
Aula 6 - CardinalidadeAula 6 - Cardinalidade
Aula 6 - Cardinalidade
Vitor Hugo Melo Araújo
 
Desenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos BásicosDesenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos Básicos
Fabio Moura Pereira
 
Hadoop
HadoopHadoop
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
André Justi
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
Elaine Cecília Gatto
 
Arquitetura Hexagonal: uma introdução
Arquitetura Hexagonal: uma introduçãoArquitetura Hexagonal: uma introdução
Arquitetura Hexagonal: uma introdução
Morvana Bonin
 
Plano Diretor de Tecnologia da Informação
Plano Diretor de Tecnologia da InformaçãoPlano Diretor de Tecnologia da Informação
Plano Diretor de Tecnologia da Informação
Helio Rebouças
 

Mais procurados (20)

Arquitetura cliente servidor
Arquitetura cliente servidorArquitetura cliente servidor
Arquitetura cliente servidor
 
Orquestração de containers com Rancher
Orquestração de containers com RancherOrquestração de containers com Rancher
Orquestração de containers com Rancher
 
Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
 
Introdução ao Spring Framework
Introdução ao Spring FrameworkIntrodução ao Spring Framework
Introdução ao Spring Framework
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Aula 7 banco de dados
Aula 7   banco de dadosAula 7   banco de dados
Aula 7 banco de dados
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dados
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 
Banco de Dados - NoSQL
Banco de Dados - NoSQLBanco de Dados - NoSQL
Banco de Dados - NoSQL
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Apresentação mvc
Apresentação mvcApresentação mvc
Apresentação mvc
 
diagrama de componentes
diagrama de componentesdiagrama de componentes
diagrama de componentes
 
Aula 1 - Revisão UML
Aula 1 - Revisão UMLAula 1 - Revisão UML
Aula 1 - Revisão UML
 
Aula 6 - Cardinalidade
Aula 6 - CardinalidadeAula 6 - Cardinalidade
Aula 6 - Cardinalidade
 
Desenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos BásicosDesenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos Básicos
 
Hadoop
HadoopHadoop
Hadoop
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Arquitetura Hexagonal: uma introdução
Arquitetura Hexagonal: uma introduçãoArquitetura Hexagonal: uma introdução
Arquitetura Hexagonal: uma introdução
 
Plano Diretor de Tecnologia da Informação
Plano Diretor de Tecnologia da InformaçãoPlano Diretor de Tecnologia da Informação
Plano Diretor de Tecnologia da Informação
 

Semelhante a Introdução ao 12 Factors APP

PHP nas Nuvens
PHP nas NuvensPHP nas Nuvens
PHP nas Nuvens
Marcos Bezerra
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquitetura
Graziella Bonizi
 
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
tdc-globalcode
 
12 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 201812 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 2018
Graziella Bonizi
 
Construindo aplicações saudáveis e prontas para envelhecer The 12ou15 Factors
Construindo aplicações saudáveis e prontas para envelhecer The 12ou15 FactorsConstruindo aplicações saudáveis e prontas para envelhecer The 12ou15 Factors
Construindo aplicações saudáveis e prontas para envelhecer The 12ou15 Factors
Roberto Santacroce Martins
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Luiz Costa
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
Deep Tech Brasil
 
Transformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoTransformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualização
Darlan Segalin
 
Mobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para NegociosMobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para Negocios
Rodney Repullo
 
Teoria de Sistemas de Informação - Atividade: Tecnologia e SI
Teoria de Sistemas de Informação - Atividade: Tecnologia e SITeoria de Sistemas de Informação - Atividade: Tecnologia e SI
Teoria de Sistemas de Informação - Atividade: Tecnologia e SI
Alessandro Almeida
 
DevOps
DevOpsDevOps
Cursos
CursosCursos
DevOps - Operação contínua
DevOps - Operação contínuaDevOps - Operação contínua
DevOps - Operação contínua
Luís Cesar Teodoro
 
Integração de software solucao e estilo
Integração de software   solucao e estiloIntegração de software   solucao e estilo
Integração de software solucao e estilo
GrupoAlves - professor
 
Integração de software 2
Integração de software 2Integração de software 2
Integração de software 2
GrupoAlves - professor
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlab
Jackson F. de A. Mafra
 
TechNet - e-Book- Artigos sobre Test Manager
TechNet - e-Book- Artigos sobre Test ManagerTechNet - e-Book- Artigos sobre Test Manager
TechNet - e-Book- Artigos sobre Test Manager
Alan Carlos
 
Blue coat 4 steps_high_performance_wan_internet-por-br
Blue coat 4 steps_high_performance_wan_internet-por-brBlue coat 4 steps_high_performance_wan_internet-por-br
Blue coat 4 steps_high_performance_wan_internet-por-br
Ronaldo Cesar Espíndola Ferreira
 
Essentials - Sessão de Salesforce1 Platform
Essentials - Sessão de Salesforce1 PlatformEssentials - Sessão de Salesforce1 Platform
Essentials - Sessão de Salesforce1 Platform
Salesforce Brasil
 
O Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareO Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de Software
Camilo de Melo
 

Semelhante a Introdução ao 12 Factors APP (20)

PHP nas Nuvens
PHP nas NuvensPHP nas Nuvens
PHP nas Nuvens
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquitetura
 
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
 
12 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 201812 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 2018
 
Construindo aplicações saudáveis e prontas para envelhecer The 12ou15 Factors
Construindo aplicações saudáveis e prontas para envelhecer The 12ou15 FactorsConstruindo aplicações saudáveis e prontas para envelhecer The 12ou15 Factors
Construindo aplicações saudáveis e prontas para envelhecer The 12ou15 Factors
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
 
Transformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoTransformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualização
 
Mobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para NegociosMobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para Negocios
 
Teoria de Sistemas de Informação - Atividade: Tecnologia e SI
Teoria de Sistemas de Informação - Atividade: Tecnologia e SITeoria de Sistemas de Informação - Atividade: Tecnologia e SI
Teoria de Sistemas de Informação - Atividade: Tecnologia e SI
 
DevOps
DevOpsDevOps
DevOps
 
Cursos
CursosCursos
Cursos
 
DevOps - Operação contínua
DevOps - Operação contínuaDevOps - Operação contínua
DevOps - Operação contínua
 
Integração de software solucao e estilo
Integração de software   solucao e estiloIntegração de software   solucao e estilo
Integração de software solucao e estilo
 
Integração de software 2
Integração de software 2Integração de software 2
Integração de software 2
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlab
 
TechNet - e-Book- Artigos sobre Test Manager
TechNet - e-Book- Artigos sobre Test ManagerTechNet - e-Book- Artigos sobre Test Manager
TechNet - e-Book- Artigos sobre Test Manager
 
Blue coat 4 steps_high_performance_wan_internet-por-br
Blue coat 4 steps_high_performance_wan_internet-por-brBlue coat 4 steps_high_performance_wan_internet-por-br
Blue coat 4 steps_high_performance_wan_internet-por-br
 
Essentials - Sessão de Salesforce1 Platform
Essentials - Sessão de Salesforce1 PlatformEssentials - Sessão de Salesforce1 Platform
Essentials - Sessão de Salesforce1 Platform
 
O Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareO Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de Software
 

Introdução ao 12 Factors APP

  • 1. Douglas Alonso 12 Fatores (Twelve-Factor App) Introdução aos 12 Fatores “12 Factors APP” Douglas Alonso
  • 2. Douglas Alonso 12 Fatores (Twelve-Factor App) Arquiteto de Soluções – Itaú Unibanco Especializado em Engenharia de Software PUC-SP Graduado em Tecnologia e Desenvolvimento de Sistemas – IBTA SP Consultor de TI atuando a mais de 20 anos no mercado nacional participando de grandes projetos para grandes empresas. Douglas Alonso Cruz
  • 3. Douglas Alonso 12 Fatores (Twelve-Factor App) Evolução dos sistemas Sistema Local Sistema em Rede Sistema em ambiente em Nuvem
  • 4. Douglas Alonso 12 Fatores (Twelve-Factor App) Evolução das Arquiteturas Sistema Monolítico Sistema Micro Serviços Interface do Usuário Regras de Negócio Acesso a Dados Base de Dados Interface do Usuário Microserviço Clientes Microserviço Fornecedores Microserviço Estoque Microserviço Tabelas Microserviço Produtos Base de Dados Base de Dados Base de Dados Base de Dados Imaginando um Sistema de vendas
  • 5. Douglas Alonso 12 Fatores (Twelve-Factor App) O que mudou? Vimos na imagem anterior que a complexidade aumentou, agora em vez de olhar para um sistema, passamos a ter que olhar para vários micro sistemas, com isso manter configurações, logs, métricas, código, testes ficou realmente mais trabalhoso e complicado.
  • 6. Douglas Alonso 12 Fatores (Twelve-Factor App) Vamos falar do que interessa Twelve-Factor App é uma metodologia, é um guia usado para a construção de aplicações SAAS. A metodologia tem como base 12 fatores, ou melhor 12 práticas para permitir que aplicações sejam construídas tendo como objetivo portabilidade, resiliência, segurança, robustez entre outras características. E o que isso tem a ver com o cenário dos micro serviços? Todos os 12 fatores podem e devem ser usados no desenvolvimento dos micro serviços e na infra que serão executados. A quem se destina: Desenvolvedores que criam software como serviço, engenheiros de operações, arquitetos, afinal a todos que criam ou pretendem criar software de qualidade.
  • 7. Douglas Alonso 12 Fatores (Twelve-Factor App) A metodologia Twelve-Factor foi criado na Heroku, empresa pioneira em hospedagem no mundo cloud. É independente de linguagem de programação e serve como um guia para desenvolvimento de aplicações com qualidade. Foi criada em 2011
  • 8. Douglas Alonso 12 Fatores (Twelve-Factor App) I Code Base (Base de código) Utilizar uma base de código para rastreamento e controle de revisão da aplicação. Ter apenas uma base de código por aplicação, sempre tem que haver essa relação de 1 pra 1, uma base de código para uma aplicação. Se existirem várias bases de código isso não é uma aplicação e sim um sistema distribuído, já o inverso onde múltiplas aplicações compartilham uma base de código também fere a metodologia e não deve ser usado.
  • 9. Douglas Alonso 12 Fatores (Twelve-Factor App) II Dependencies (Dependências) Bibliotecas A sua aplicação deve ser autocontida ou seja dentro do seu container ou pacote ela precisa ter todas as bibliotecas ou pacotes necessários para o seu funcionamento. Ferramentas como (Npm, yarn, maven, nuget, grade) ajudam neste gerenciamento. Porém também existem outros tipos de dependências como conexões com banco de dados, serviços, que podem nos causar problemas, neste caso ferramentas como Chef, Puppet, Docker e Kubernetes. Tendo as dependências declaradas facilitará também no sentido de integração de novas pessoas na equipe, rodando apenas um comando no terminal, teremos a aplicação rodando e o ambiente configurado.
  • 10. Douglas Alonso 12 Fatores (Twelve-Factor App) III Config (Configurações) A 1ª recomendação é que as configurações e o codigo fonte e sejam totalmente separados um do outro. As configurações podem ser armazenadas em variáveis de ambiente, variáveis de ambiente são pertinentes ao host onde a aplicação está hospedada, deste modo não corre o risco de alguém sobrepor um arquivo com caminho errado etc. As configurações jamais devem ser mantidas em repositório pois contém dados sensíveis e podem impactar na segurança da empresa. Armazenar configurações em código como constantes também fere a metodologia e não deve ser usado. Uma maneira muito simples de verificar se seu aplicativo segue este princípio de configuração ou não é: Perguntando-se se você pode tornar seu aplicativo de código aberto agora, sem fazer nenhuma alteração e sem comprometer nenhuma de suas credenciais. Set Env APPLICATION_ENV “development”
  • 11. Douglas Alonso 12 Fatores (Twelve-Factor App) IV Backing services (Serviços de apoio) Trate serviços de apoio como recursos anexados Um serviço de apoio é qualquer serviço que o app consuma via rede como parte de sua operação normal. Exemplos incluem armazenamentos de dados (como MySQL ou MongoDB), sistemas de mensagens/filas (tais como RabbitMQ), serviços SMTP para e-mails externos (tais como Sendgrid), e sistemas de cache (tais como Redis). O código para um app doze-fatores não faz distinção entre serviços locais e de terceiros. Para o app, ambos são recursos anexados, acessíveis via uma URL ou outro localizador/credenciais na config. Um deploy do app doze-fatores deve ser capaz de trocar um banco de dados MySQL por um gerenciado por terceiros (tais como Amazon RDS) sem realizar quaisquer mudanças no código do app. Em ambos os casos, apenas o identificador de recurso precisa mudar.
  • 12. Douglas Alonso 12 Fatores (Twelve-Factor App) V Build, Release, Run (Construa, libere, execute) Uma base de código é transformada em um deploy geralmente por três estágios: Build  consiste em pegar uma versão especifica do repositório com suas dependências e transforma-la em uma versão executável, funcional, seja por compilação ou empacotamento; Release  consiste no envio de um build para um servidor e a execução de todas as configurações necessárias para que ele entre no terceiro estágio Run  é a inicialização de todos os processos necessários para que ele esteja disponível para os usuários acessarem. JENKINS
  • 13. Douglas Alonso 12 Fatores (Twelve-Factor App) VI Process (Processos) Execute o aplicativo como um ou mais processos sem estado. Um aplicativo segue este princípio se suas instâncias podem ser criadas e destruídas a qualquer momento sem afetar a funcionalidade geral de nosso aplicativo. Interface do Usuário Microserviço Clientes Microserviço Vendas Microserviço Estoque Microserviço Tabelas Microserviço Produtos Base de Dados Base de Dados Base de Dados Base de Dados Interface do Usuário Microserviço Clientes Microserviço Vendas Microserviço Estoque Microserviço Tabelas Microserviço Produtos Base de Dados Base de Dados Base de Dados Base de Dados Microserviço Vendas Microserviço Vendas Microserviço Vendas
  • 14. Douglas Alonso 12 Fatores (Twelve-Factor App) VII Port Binding (Atribuição a portas) A ideia é que o projeto não dependa de um servidor externo como o Apache ou IIS por exemplo para ser executado, mas que possa ser auto-contido e executar em uma porta específica que seria acessado por outras partes do projeto ou mesmo pelos usuários. http://localhost:7195
  • 15. Douglas Alonso 12 Fatores (Twelve-Factor App) VIII Concurrency (Concorrência) Tente pensar em seu projeto na forma de processos, como citado anteriormente, que podem ser executados em paralelo. Chamadas http não demoradas podem ser resolvidas pelo servidor web de forma rápida e devolvida para o cliente, porém tarefas mais demoradas podem ser enviadas para mecanismos de filas que executarão o processamento em background sem travar sua aplicação e retornarão a informação assim que o processamento for concluído. Este segundo modo permite que processamento sejam executados em paralelo.
  • 16. Douglas Alonso 12 Fatores (Twelve-Factor App) IX Disposability (Descartabilidade) Os processos de um app doze-fatores são descartáveis, significando que podem ser iniciados ou parados a qualquer momento. Isso facilita o escalonamento elástico, rápido deploy de código ou mudanças de configuração, e robustez de deploys de produção. Lembra da imagem dos nossos micro serviços Em dado momento preciso executar um processo grande e demorado para calcular meu estoque no final do mês, neste caso subiria mais instâncias do micro serviço de vendas e estoque. Terminado o calculo poderia simplesmente derrubar essas instancias. Outro exemplo, um micro serviço travou. O sistema deve derrubar matar esse processo e subir um novo.
  • 17. Douglas Alonso 12 Fatores (Twelve-Factor App) X Dev / Prod parity (Igualdade de ambiente) Os ambientes de produção, homologação e desenvolvimento devem ser o mais similares possíveis. Facilitando assim os processos de Deploy Continuo.
  • 18. Douglas Alonso 12 Fatores (Twelve-Factor App) XI Logs Os logs são uma importante ferramenta para entender o comportamento de um projeto, identificando erros e pontos de melhoria. O fluxo de evento para um app pode ser direcionado para um arquivo, ou visto em tempo real via tail num terminal. Mais significativamente, o fluxo pode ser enviado para um sistema indexador e analisador tal como Splunk,
  • 19. Douglas Alonso 12 Fatores (Twelve-Factor App) XII Admin Process – Processos Administrativos Tarefas administrativas devem ser tratadas de forma automatizada. Como agora nosso projeto pode rodar em diversos servidores, com diversos processos, coisas como limpar caches, carregar dados, atualizar bases de dados, etc, também devem ser facilitadas. As linguagens modernas geralmente tem um CLI (Command Line Interfaces) e através de comandos podemos executar e automatizar muitas coisas, se juntarmos isso a ferramenta de pipeline como Jenkins, O AWS Pipeline, o Azure Pipelines o cenário fica melhor ainda. O fluxo de evento para um app pode ser direcionado para um arquivo, ou visto em tempo real via tail num terminal. Mais significativamente, o fluxo pode ser enviado para um sistem O fluxo de evento para um app pode ser direcionado para um arquivo, ou visto em tempo real via tail num terminal. Mais significativamente, o fluxo pode ser enviado para um sist
  • 20. Douglas Alonso 12 Fatores (Twelve-Factor App) https://12factor.net/pt_br/ Documentação Oficial 12 Fatores As informações contidos aqui no 12 fatores é o básico do que temos que pensar para ter um produto / sistema de qualidade, existem muitas outras preocupações a serem tomadas, mas fica para uma próxima conversa. Se quiserem conhecer um pouco mais procurem pelo termo Engenharia da Confiabilidade ou SRE https://srebrasil.com/
  • 21. Douglas Alonso 12 Fatores (Twelve-Factor App) Obrigado Douglas Alonso Cruz douglasalonso@gmail.com https://www.linkedin.com/in/douglasalonso/ Raphael Freitas raphael.f.santos@outlook.com https://www.linkedin.com/in/raphael-Freitas-santos

Notas do Editor

  1. Exemplo anterior comentar que se um processo cair e o processamento da fila não tiver sido concluído este voltara para fila e será processado assim que voltar
  2. Exemplo anterior comentar que se um processo cair e o processamento da fila não tiver sido concluído este voltara para fila e será processado assim que voltar