SlideShare uma empresa Scribd logo
1 de 115
Baixar para ler offline
The 12 factor app
Princípios e boas práticas
aplicados no mundo real
Glendon Leitão / José Filipe Lyra
Várias linguagens | Micro serviços
Times independentes
Nosso time
API de Anúncios
API de anúncios
Testes unitários e de integração
Paridade entre ambiente de testes e produção
Convention over Configuration
Continuous Integration / Continuous Delivery
Features do
produto
Evolução no mercado
(K8S)
by Heroku, 2012
Escalabilidade
Portabilidade
Manutenibilidade
Escalabilidade
Portabilidade
Manutenibilidade
Imutável
Efêmero
Declarativo
Automatizado
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
The 12 factor app
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
The 12 factor app
Uma base de código com
controle de versão, uma
aplicação, muitos deploys
1 Aplicação = 1 Codebase
Sistema distribuído != Aplicação
Alto acoplamento
Deploy complexo
Com 1 codebase e várias apps
API de Anúncios
Notificador de eventos
Como fazemos
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
The 12 factor app
Declare e isole explicitamente
as dependências
Proibido Jars no Codebase
Como fazemos
task wrapper(type: Wrapper) {
gradleVersion = "3.4.1"
distributionType = Wrapper.DistributionType.ALL
}
Como fazemos
build.gradle
Como fazemos
Confiar em
dependências implícitas
Como fazemos
FROM
vivareal/base-images:alpine-3.2-java-8-utf8
WORKDIR /opt/app/
ADD /build/libs/listings-api-*.jar api.jar
EXPOSE 8080
ENV ENVIRONMENT=dev
CMD java $EXTRA_JAVA_OPTS -jar
-Dspring.profiles.active=${ENVIRONMENT} api.jar
Como fazemos
Dockerfile
Dependências
explícitas e isoladas
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
The 12 factor app
Armazene as configurações
no ambiente
Config = env vars
Fazemos diferente...
Como fazemos
env vars apenas para
credenciais
Como fazemos
Como fazemos
Previsibilidade
docker-compose
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
The 12 factor app
Trate serviços de apoio
como recursos anexados
URL = Baixo acoplamento
Migrando banco de
dados...
Nossa experiência
Nossa experiência
API Notificador
SQS
SNS
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
The 12 factor app
Separe estritamente os
estágios de construção e
execução
BUILD = ARTEFATO
Como fazemos
RELEASE = VERSÃO IMUTÁVEL
Como fazemos
docker hub
artefato
versão
RUN = DEPLOY
Como fazemos
Como fazemos
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: listings-api
namespace: listings
labels: ...
spec:
replicas: 1
strategy: ...
template:
metadata: ...
spec:
containers:
- name: listings-api
image: listings-api:005b9f7
env: ...
ports: ...
resources: ...
livenessProbe: ...
readinessProbe: ...
Kubernetes Deployment YAML
$ ./gradlew build
$ docker build -t vivareal/listings-api:${COMMIT_HASH}
$ docker push vivareal/listings-api:${COMMIT_HASH}
$ kubectl apply -f deploy/qa-deployment.yaml
Como fazemos
Facilita automatização
Como fazemos
(circle.yml) (Jenkinsfile)
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
The 12 factor app
Execute a aplicação como
um ou mais processos que
não armazenam estado
Stateless e Share-nothing
Requests independentes
Como fazemos
Concurrency
Disposability
É base para...
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
The 12 factor app
Exporte serviços via
port-binding
App auto-contida
App | HTTP | Port-binding
Spring boot
Sem Jboss ou tomcat
Como fazemos
Workers != web-apps
Como fazemos
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
The 12 factor app
Escale através do
modelo de processos
Scale out
Scale up
Divide
API de anúncios / Notificador
Como fazemos
Divide
Como fazemos
Scale out
Scale up
Como fazemos
Horizontal Pod
Autoscaling (HPA)
Como fazemos
Scale out
Como fazemos
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata: …
spec:
maxReplicas: 10
minReplicas: 3
scaleTargetRef:
kind: Deployment
name: listings-api
targetCPUUtilizationPercentage: 80
Kubernetes HPA YAML
Request / Limit
Como fazemos
Scale up
Como fazemos
...
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 1
memory: 2Gi
...
Kubernetes Deployment YAML (resources)
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
The 12 factor app
Maximize robustez com fast
startup e graceful
degradation
"Servidores são gado, não pets"
Descartável
Fast Startup
Graceful Degradation
Scale Out
Rápido Deploy
Robustez
Como fazemos
POD
Como fazemos
POD POD
Como fazemos
POD POD POD
Como fazemos
POD POD POD POD
Como fazemos
POD POD POD POD
Como fazemos
POD POD POD
Startup em 120 s
Graceful degradation
Como fazemos
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
The 12 factor app
Mantenha o ambiente de
desenvolvimento, homologação
e produção o mais similares
possíveis
Gap de tempo
Gap de equipe
Gap de ferramentas
Ser rápido
Menos burocracia
Mesmas ferramentas
Falhamos rápido
Como fazemos
1. Nova branch
2. Commits
3. PR
4. Checagem dos testes
5. Code review
6. Merge
7. CD -> QA
8. Aprovação -> CD -> Prod
Como fazemos
Gap de tempo
Gap de equipe
Gap de ferramentas
Como fazemos
Como fazemos
version: "2"
services:
postgres:
image: postgres:9.6.1
mem_limit: 500m
ports:
- "5432:5432"
environment:
POSTGRES_DB: listings
Como fazemos
POSTGRES_PASSWORD: listings
POSTGRES_USER: listings
sqs:
image: s12v/elasticmq:latest
mem_limit: 200m
ports:
- "9324:9324"
docker-compose.yml
http://bit.ly/viva-db-testes-docker
Como fazemos
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
The 12 factor app
Trate logs como
fluxos de eventos
STDOUT
Config único
Simplicidade
Roteamento via K8S (filebeat)
Json
Log padronizado
Como fazemos
Como fazemos
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
The 12 factor app
Rode tarefas de
administração/gestão em
processos pontuais
Mesma base de código
Port Binding
Concurrency
Disposability
Dev/Prod Parity
Logs
Admin Processes
Codebase
Dependencies
Config
Backing Services
Build, Release, Run
Processes
The 12 factor app
Nossa experiência
Confiança
Resiliência
Agilidade
Visibilidade
Simplicidade
Referências
https://12factor.net/
Building Microservices (Sam Newman)
The Twelve Factor app: Best Practices for Java Deployment by
Joe Kutner (https://youtu.be/94PxlbuizCU)
https://www.mirantis.com/blog/how-do-you-build-12-factor-app
s-using-kubernetes/
@glendonml
@jfilipelyra
glendonml
jflipelyra

Mais conteúdo relacionado

Semelhante a 12 factor principles applied in the real world

Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Marcus Garcia
 
DevOps - melhores práticas e integração contínua
DevOps - melhores práticas e integração contínuaDevOps - melhores práticas e integração contínua
DevOps - melhores práticas e integração contínuaAmazon Web Services LATAM
 
Trabalhando com ALM na nuvem
Trabalhando com ALM na nuvemTrabalhando com ALM na nuvem
Trabalhando com ALM na nuvemAdriano Bertucci
 
Utilização de DevOps
Utilização de DevOpsUtilização de DevOps
Utilização de DevOpsCaio Candido
 
WSO2 Platform: Conectando Empresas, negócios e pessoas
WSO2 Platform: Conectando Empresas, negócios e pessoasWSO2 Platform: Conectando Empresas, negócios e pessoas
WSO2 Platform: Conectando Empresas, negócios e pessoasWSO2
 
CNA - A New Way of Designing
CNA - A New Way of DesigningCNA - A New Way of Designing
CNA - A New Way of DesigningDiego Dezembro
 
Introdução ao 12 Factors APP
Introdução ao 12 Factors APPIntrodução ao 12 Factors APP
Introdução ao 12 Factors APPDouglas Alonso
 
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
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openrukoÉverton Ribeiro
 
Apresentação de minha Monografia do curso de Sistema e Mídias Digitais
Apresentação de minha Monografia do curso de Sistema e Mídias DigitaisApresentação de minha Monografia do curso de Sistema e Mídias Digitais
Apresentação de minha Monografia do curso de Sistema e Mídias DigitaisÉdipo Souza
 
Uma visão geral da estratégia de middleware da Microsoft
Uma visão geral da estratégia de middleware da MicrosoftUma visão geral da estratégia de middleware da Microsoft
Uma visão geral da estratégia de middleware da MicrosoftOsvaldo Daibert
 
CI CD best practices for building modern applications - MAD301 - São Paulo AW...
CI CD best practices for building modern applications - MAD301 - São Paulo AW...CI CD best practices for building modern applications - MAD301 - São Paulo AW...
CI CD best practices for building modern applications - MAD301 - São Paulo AW...Amazon Web Services
 
FSI Roundtable - Cultura de Inovação com DevOps, microserviços e serverless
FSI Roundtable - Cultura de Inovação com DevOps, microserviços e serverlessFSI Roundtable - Cultura de Inovação com DevOps, microserviços e serverless
FSI Roundtable - Cultura de Inovação com DevOps, microserviços e serverlessAmazon Web Services LATAM
 
AAB301 - Rich Internet Application - wcamb
AAB301 - Rich Internet Application - wcambAAB301 - Rich Internet Application - wcamb
AAB301 - Rich Internet Application - wcambMicrosoft Brasil
 
Repensando o ESB: sua arquitetura SOA, usando APIs
Repensando o ESB: sua arquitetura SOA, usando APIsRepensando o ESB: sua arquitetura SOA, usando APIs
Repensando o ESB: sua arquitetura SOA, usando APIsFábio Rosato
 
Melhores práticas de CI/CD na construção de aplicações modernas
Melhores práticas de CI/CD na construção de aplicações modernasMelhores práticas de CI/CD na construção de aplicações modernas
Melhores práticas de CI/CD na construção de aplicações modernasAmazon Web Services LATAM
 

Semelhante a 12 factor principles applied in the real world (20)

Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
 
DevOps - melhores práticas e integração contínua
DevOps - melhores práticas e integração contínuaDevOps - melhores práticas e integração contínua
DevOps - melhores práticas e integração contínua
 
Trabalhando com ALM na nuvem
Trabalhando com ALM na nuvemTrabalhando com ALM na nuvem
Trabalhando com ALM na nuvem
 
Utilização de DevOps
Utilização de DevOpsUtilização de DevOps
Utilização de DevOps
 
WSO2 Platform: Conectando Empresas, negócios e pessoas
WSO2 Platform: Conectando Empresas, negócios e pessoasWSO2 Platform: Conectando Empresas, negócios e pessoas
WSO2 Platform: Conectando Empresas, negócios e pessoas
 
CNA - A New Way of Designing
CNA - A New Way of DesigningCNA - A New Way of Designing
CNA - A New Way of Designing
 
Workshop - Cordova e Ionic
Workshop - Cordova e IonicWorkshop - Cordova e Ionic
Workshop - Cordova e Ionic
 
Introdução ao 12 Factors APP
Introdução ao 12 Factors APPIntrodução ao 12 Factors APP
Introdução ao 12 Factors APP
 
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
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openruko
 
Apresentação de minha Monografia do curso de Sistema e Mídias Digitais
Apresentação de minha Monografia do curso de Sistema e Mídias DigitaisApresentação de minha Monografia do curso de Sistema e Mídias Digitais
Apresentação de minha Monografia do curso de Sistema e Mídias Digitais
 
Go global para Windows
Go global para WindowsGo global para Windows
Go global para Windows
 
Uma visão geral da estratégia de middleware da Microsoft
Uma visão geral da estratégia de middleware da MicrosoftUma visão geral da estratégia de middleware da Microsoft
Uma visão geral da estratégia de middleware da Microsoft
 
Front end architecture
Front end architectureFront end architecture
Front end architecture
 
CI CD best practices for building modern applications - MAD301 - São Paulo AW...
CI CD best practices for building modern applications - MAD301 - São Paulo AW...CI CD best practices for building modern applications - MAD301 - São Paulo AW...
CI CD best practices for building modern applications - MAD301 - São Paulo AW...
 
FSI Roundtable - Cultura de Inovação com DevOps, microserviços e serverless
FSI Roundtable - Cultura de Inovação com DevOps, microserviços e serverlessFSI Roundtable - Cultura de Inovação com DevOps, microserviços e serverless
FSI Roundtable - Cultura de Inovação com DevOps, microserviços e serverless
 
AAB301 - Rich Internet Application - wcamb
AAB301 - Rich Internet Application - wcambAAB301 - Rich Internet Application - wcamb
AAB301 - Rich Internet Application - wcamb
 
Repensando o ESB: sua arquitetura SOA, usando APIs
Repensando o ESB: sua arquitetura SOA, usando APIsRepensando o ESB: sua arquitetura SOA, usando APIs
Repensando o ESB: sua arquitetura SOA, usando APIs
 
Melhores práticas de CI/CD na construção de aplicações modernas
Melhores práticas de CI/CD na construção de aplicações modernasMelhores práticas de CI/CD na construção de aplicações modernas
Melhores práticas de CI/CD na construção de aplicações modernas
 

12 factor principles applied in the real world