SlideShare a Scribd company logo
1 of 21
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

More Related Content

What's hot

TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentElias Nogueira
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação DockerAndré Justi
 
Gerência de Configuração
Gerência de ConfiguraçãoGerência de Configuração
Gerência de ConfiguraçãoWagner Zaparoli
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareÁlvaro Farias Pinheiro
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
Enteprise Integration Patterns
Enteprise Integration PatternsEnteprise Integration Patterns
Enteprise Integration PatternsAlessandro Kieras
 
Gestão do conhecimento FIA - 2011
Gestão do conhecimento FIA - 2011Gestão do conhecimento FIA - 2011
Gestão do conhecimento FIA - 2011Jose Claudio Terra
 
Apresentação TCC - Banca
Apresentação TCC - BancaApresentação TCC - Banca
Apresentação TCC - Bancaguest2c4508
 
Governança de TI.pptx
Governança de TI.pptxGovernança de TI.pptx
Governança de TI.pptxssusera0a510
 
Metodologia ágil das Desenvolvimento Adaptativo Software
Metodologia ágil das   Desenvolvimento Adaptativo SoftwareMetodologia ágil das   Desenvolvimento Adaptativo Software
Metodologia ágil das Desenvolvimento Adaptativo SoftwareMarilainny Martins da Silva
 
DevOps, por onde começar
DevOps, por onde começarDevOps, por onde começar
DevOps, por onde começarAdriano Tavares
 

What's hot (20)

TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
Gerência de Configuração
Gerência de ConfiguraçãoGerência de Configuração
Gerência de Configuração
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Enteprise Integration Patterns
Enteprise Integration PatternsEnteprise Integration Patterns
Enteprise Integration Patterns
 
Gestão do conhecimento FIA - 2011
Gestão do conhecimento FIA - 2011Gestão do conhecimento FIA - 2011
Gestão do conhecimento FIA - 2011
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Metodos Ageis
Metodos AgeisMetodos Ageis
Metodos Ageis
 
Apresentação TCC - Banca
Apresentação TCC - BancaApresentação TCC - Banca
Apresentação TCC - Banca
 
Computação em nuvem
Computação em nuvemComputação em nuvem
Computação em nuvem
 
Fundamentos da Engenharia de Software
Fundamentos da Engenharia de SoftwareFundamentos da Engenharia de Software
Fundamentos da Engenharia de Software
 
Computação em Nuvem
Computação em NuvemComputação em Nuvem
Computação em Nuvem
 
Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
 
Governança de TI.pptx
Governança de TI.pptxGovernança de TI.pptx
Governança de TI.pptx
 
Métodos ágeis
Métodos ágeisMétodos ágeis
Métodos ágeis
 
Metodologia ágil das Desenvolvimento Adaptativo Software
Metodologia ágil das   Desenvolvimento Adaptativo SoftwareMetodologia ágil das   Desenvolvimento Adaptativo Software
Metodologia ágil das Desenvolvimento Adaptativo Software
 
DevOps, por onde começar
DevOps, por onde começarDevOps, por onde começar
DevOps, por onde começar
 
Gestão Estratégica da TI - Apresentação
Gestão Estratégica da TI - ApresentaçãoGestão Estratégica da TI - Apresentação
Gestão Estratégica da TI - Apresentação
 
Governança de TI - Aula01 Apresentação da disciplina
Governança de TI - Aula01 Apresentação da disciplinaGovernança de TI - Aula01 Apresentação da disciplina
Governança de TI - Aula01 Apresentação da disciplina
 

Similar to Introdução ao 12 Factors APP

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 à arquiteturaGraziella 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 2018Graziella 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 FactorsRoberto 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 LegadoLuiz 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 MicroservicesDeep 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çãoDarlan Segalin
 
Mobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para NegociosMobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para NegociosRodney 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 SIAlessandro Almeida
 
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 estiloGrupoAlves - professor
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlabJackson 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 ManagerAlan Carlos
 
Essentials - Sessão de Salesforce1 Platform
Essentials - Sessão de Salesforce1 PlatformEssentials - Sessão de Salesforce1 Platform
Essentials - Sessão de Salesforce1 PlatformSalesforce Brasil
 
O Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareO Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareCamilo de Melo
 

Similar to 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

Editor's Notes

  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