SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Boas práticas na construção de serviços
1
Grazi Bonizi
Coordeno a trilha de Arquitetura .Net no The Developers Conference,
compartilho código no GitHub, escrevo no Medium e no Blog da Lambda3, e
participo de Meetups e PodCasts normalmente sobre DevOps, Azure, .Net,
Docker e DDD
Consultora DevOps na Lambda3
Este é um exemplo de
subtítulo.
https://twitter.com/GraziBonizi
https://github.com/grazibonizi
https://www.linkedin.com/in/graziella-bonizi-b14835a0/
https://www.lambda3.com.br/L3/graziella-bonizi/
2
Conteúdo
1 Origem, princípios e fatores
2 Fatores de Design
3 Fatores de Build & Release
4 Fatores de Gerenciamento
5 Próximos passos
Quais são nossas principais preocupações ao construir uma
aplicação? Que decisões valem a pena ser tomadas no início do
projeto para que a aplicação esteja "production-ready" desde as
primeiras features?
Ao longo da palestra vamos entender como os princípios da 12 Factor
Apps podem implementados para que a aplicação seja escalável,
íntegra e gerenciada adequadamente.
Porque 12 factor app?
12 Fator App é uma metodologia bem didática que reúne boas práticas para
construção de serviços, muito relacionado a desenvolvimento moderno,
containers, DevOps e plataforma em nuvem.
O objetivo hoje é mostrar como o 12 Factor App pode guiar a construção de
serviços prontos para serem publicados desde as primeiras versões.
Os fatores foram agrupados em três assuntos:
• Fatores de Design, que estão relacionados ao desenvolvimento e arquitetura da
aplicação em si,
• Fatores de Build & Release, que observam as práticas de integração e entrega
contínuas
• e Fatores de Gerenciamento, relacionados à administração e ao
monitoramento da aplicação em execução.
Para encerrar, vou outros dois fatores que talvez fizessem parte da metodologia
se ela fosse elaborada hoje, e vou demonstrar uma aplicação em .NET que
cumpre os 12 fatores.
3
12 Factor App:
Origem, Princípios e
Fatores
4
Origem
a lenta deterioração do software ao longo
do tempo que acabará por torná-lo
inutilizável. O software não decai, mas sofre
com a falta de atualização em relação à
mudança ambiente em que reside”
“Erosão de software
é
• Metodologia criada pelos colaboradores da
plataforma Heroku, em particular o co-fundador
Adam Wiggins;
• Heroku é uma plataforma PAAS poliglota;
• O time criou a metodologia com base na sua
experiência no que contribuiu para o sucesso e
resistência à erosão do Heroku.
• É destinada à construção de serviços, independente
de linguagem e plataforma
Em 2006, Adam Wiggins, fundador dos 12 fatores, criou uma aplicação web
simples e a compartilhou com alguns amigos. Ele deixou de utilizá-la, mas seus
amigos continuaram. Dois anos depois ele foi notificado que o site estava fora do
ar.
Logando no servidor com ssh, ele descobriu que:
• O processo da aplicação tinha quebrado e não reiniciou;
• A utilização do disco tinha atingido 100% por causa dos arquivos de log e
dados de sessão;
• O kernel, ssh, openssl e apache precisavam de atualizações de segurança
críticas;
• A distribuição do linux tinha sido descontinuada, e não possuía as atualizações
de segurança necessárias. Ele tentou migrar a aplicação para outra VM com
um Sistema Operacional atualizado, mas a aplicação quebrou por uma série de
motivos, como apontamentos locais que eram diferentes neste Sistema
Operacional, e mudanças em dependências externas.
Em resumo, a aplicação atingiu um estado não funcional, sem nenhuma alteração
no código que estava funcionando.
Ele tinha acabado de vivenciar um caso impactante de Erosão de Software.
5
• Usam formatos declarativos para automatizar a configuração inicial, minimizar tempo e custo
para novos desenvolvedores participarem do projeto;
• Tem um contrato claro com o sistema operacional que o suporta, oferecendo portabilidade
máxima entre ambientes que o executem;
• São adequados para implantação em modernas plataformas em nuvem, evitando a necessidade
por servidores e administração do sistema;
• Minimizam a divergência entre ambientes, como desenvolvimento e produção, permitindo a
implantação contínua para máxima agilidade;
• E podem escalar sem significativas mudanças em ferramentas, arquiteturas, ou práticas de
desenvolvimento.
É uma metodologia para construir softwares-
como-serviço que:
6
Os fatores
1 Codebase
2 Dependencies
3 Config
4 Backing services
5 Build, release, run
6 Processes
7 Port binding
8 Concurrency
9 Disposability
10 Dev/prod parity
11 Logs
12 Admin processes
7
Fatores de Design
8
Port Binding
• Self-Hosted Apps: a aplicação deve ser capaz de
inicializar e ouvir e responder a uma porta
• O HTTP Server deixa de ser um elemento externo e
passa a ser uma dependência da aplicação
Exporte os serviços via
port binding
Tradicionalmente as aplicações eram compiladas e publicadas em WebServers
externos, como IIS e Apache.
Com o desenvolvimento moderno, os webservers deixam de ser um elemento
externo e passam a fazer parte da aplicação como dependência.
O efeito é a aplicação ser auto-contida, isto é, capaz de se “hospedar” sozinha e
ser executada como um processo web vinculado a uma porta.
No ambiente de desenvolvimento, o programador acessa a URL local, como
http://localhost:5000, e no ambiente de deploy, uma URL pública é vinculada à
URL local, como http://www.12factor.net .
9
Processes and concurrency
• Não dependa de sessões ou dados armazenados no
ambiente
• Informações de sessão devem ser armazenadas numa
Store externa
• Mais de um serviço deve poder ser instanciado sem
impacto no funcionamento da aplicação
Execute a aplicação
como um ou mais
serviços sem estado
Ainda muito relacionado ao fator Port-Binding, os fatores Processes e
Concurrency permitem que a aplicação seja escalada verticalmente (várias
instâncias na mesma máquina) e horizontalmente (várias instâncias em
máquinas diferentes).
A aplicação é executada como um processo que não compartilha estado,
portanto, pode ser gerenciada isoladamente.
10
Backing Services
• Serviços devem ser configurados via um único ponto de
entrada
• O apontamento deve ser externo, como uma URL em
um arquivo de configuração
Trate o consumo de
serviços como
recursos atachados
Os serviços que a aplicação consome, como banco de dados, provedores de email
e etc devem poder ser “atachados” ou “desatachados“ facilmente por meio de um
único ponto de entrada, normalmente uma URL, com seu apontamento em um
arquivo de configuração
11
Disposability
• Os ambientes devem poder ser descartados e
escalados sempre que necessário
• A aplicação deve poder trocar de ambiente sem impacto
no funcionamento
Maximize a robustez
com startups rápidos e
“graceful shutdowns”
“Servidores não são bichinhos de estimação”
Originalmente, devido ao modelo de desenvolvimento e operações, os servidores
eram tratados com “carinho”. O custo operacional e financeiro para trocar a
aplicação de ambiente era alto.
No desenvolvimento moderno, as aplicações podem ser facilmente trocadas de
ambiente caso haja a necessidade. Utilizando infraestrutura como serviços a
velocidade para realocar aplicações saindo de um servidor com problemas para
um saudável é mínima. Com Plataforma como Serviços (PaaS) ou orquestradores
de containers, como Kubernetes, isso é feito automaticamente sem a
necessidade de intervenção manual.
Isso é possível porque ao cumprir os 12 fatores, os processos de aplicação são
descartáveis, rápidos para inicializar e “graciosos ao encerrar”. No caso de
processos web isso implica em finalizar as requisições em execução
adequadamente sem deixar processos presos, conexões abertas ou “rastros”. As
aplicações também são preparadas para lidar com interrupções súbitas.
12
Fatores de Build &
Release
13
Codebase
• Use um versionador de código (git)
• Aplicações que possuem ciclos de vida distintos devem
estar em repositórios distintos
• O que é promovido é o artefato, não o código
• Escolha uma estratégia de branches adequada
• Configure a integração contínua
Uma única base de
código rastreada em
um sistema de revisão
com múltiplos deploys
Existe sempre uma correlação um-para-um entre a base de código e a
aplicação:
• Se existem várias bases de código, isto não é uma app – é um sistema
distribuído. Cada componente do sistema é uma app, e cada uma pode
individualmente ser compatível com os 12 fatores.
• Múltiplas apps compartilhando uma base de código é uma violação dos
12 fatores. A solução aqui é dividir o código compartilhado entre
bibliotecas que podem ser incluídas através do gerenciador de
dependências.
14
Dependencies
• Deixe claro quais dependências e versões sua aplicação
utiliza
• Não utilize dependências compartilhadas entre
aplicações (GAC, Com+)
• Isole o ambiente da aplicação
Declare de forma
explícita e isole as
dependências
As dependências da aplicação e suas versões estão claramente enumeradas
(packages.json, arquivos pom, etc).
Não utilize dependências compartilhadas. Quando mais de uma aplicação utiliza a
mesma dependência no sistema operacional, a atualização de uma pode impactar
na outra.
Isso facilita o setup da aplicação na máquina de desenvolvimento, por exemplo.
Após obter o código, executar um comando simples, como nuget restore ou npm
install será o suficiente para baixar todas as dependências corretas e deixar a
aplicação pronta para ser compilada.
15
Config
• Não utilize apontamentos e varíaveis de uma forma que
seja necessária a recompilação da aplicação
• As configurações que dependem do ambiente em que a
aplicação será publicada devem ser isoladas para o
ambiente em questão
• Utilize variáveis de ambiente, arquivos ou serviços
externos de configuração
• Se você fosse abrir o código da sua aplicação hoje,
alguma informação confidencial seria comprometida?
Armazene a
configuração do
ambiente no próprio
ambiente
16
Build, Release, Run
• Release: Artefato de Build + Parâmetros, arquivos de
configuração e secrets relativos ao ambiente
Separe os estágios de
construção e execução
Uma base de código é transformada num deploy através de três estágios:
• Build: O estágio de construção é uma transformação que converte um
repositório de código em um pacote executável, ou artefato.
• Release: O estágio de entrega obtém o artefato produzida pelo estágio de
construção e o combina com a configuração atual do ambiente em que será
publicado, resultando em uma aplicação pronta para ser executada.
• Run: O estágio de execução roda o app no ambiente de execução, através do
início de alguns dos processos do app com um determinado artefato.
Com a implementação adequada de integração contínua e entrega contínua, o
artefato é rastreado facilmente à versão de código que o gerou.
17
Dev/Prod Parity
• Ambiente de desenvolvimento, testes e produção deve
ser tão compatível quanto possível
• Mesmas dependências e serviços consumidos
• Base de código deve ser semelhante à produção
(Continuous Deployment)
• Desenvolvedores devem estar próximos do deploy
Mantenha o
desenvolvimento,
homologação e
produção tão similares
quanto possível
Historicamente, houveram lacunas substanciais entre desenvolvimento (um
desenvolvedor codificando) e produção (a aplicação disponível para os usuários
finais). Essas lacunas se manifestam em três áreas:
• A lacuna do tempo: Um desenvolvedor pode trabalhar em código que demora
dias, semanas ou até meses para ir para produção.
• A lacuna de pessoal: Desenvolvedores escrevem código, engenheiros de
operação fazem o deploy dele.
• A lacuna de ferramentas: Desenvolvedores podem estar usando um conjunto
como Nginx, SQLite, e OS X, enquanto o app em produção usa Apache, MySQL,
e Linux.
Olhando as três lacunas descritas acima:
• Diminua a lacuna de tempo: um desenvolvedor pode escrever código e ter o
deploy feito em horas ou até mesmo minutos depois.
• Diminua a lacuna de pessoal: desenvolvedores que escrevem código estão
proximamente envolvidos em realizar o deploy e acompanhar seu
comportamento em produção.
• Diminua a lacuna de ferramentas: mantenha desenvolvimento e produção o
mais similares possível.
18
Fatores de
Gerenciamento
19
Logs
• Um log é um stream de eventos sequenciais produzidos por
uma aplicação em execução
• Um log não tem início, nem fim, mas é contínuo enquanto a
aplicação estiver rodando
• A aplicação não deveria se preocupar em armazenar o log
• Os logs podem ser vistos no terminal
• Um serviço externo deve ser configurado para coletar os logs e
armazená-los em um local centralizado
Trate logs como fluxo
contínuo de eventos
Tradicionalmente as aplicações salvam os logs em algum arquivo de output, e
isso traz a preocupação com armazenamento e gerenciamento de logs.
Na metodologia 12 fatores, os logs são tratados como um fluxo contínuo de
eventos sem começo ou fim, disponível no terminal, e outras aplicações são
responsáveis por coletá-los e armazená-los.
20
Admin Processes
• Tarefas administrativas devem fazer parte do deploy da
aplicação que estão relacionadas
• Exemplos: scripts de migração, monitoramento ou correções
de ambiente
Execute tarefas de
administração/gestão
como processos
pontuais
Algumas aplicações possuem tarefas administrativas, como migração de modelo
de banco de dados ou inspeção de ambiente.
Esse tipo de tarefa é tratada como parte da aplicação, desde a base de código até
a construção e entrega.
Um operador não terá que fazer alterações no ambiente de execução da aplicação
para executá-las porque elas já estarão prontas e disponíveis no ambiente.
21
Próximos passos
22
Próximos passos
• Os 12 fatores tem um objetivo claro, envolvendo portabilidade
e escalabilidade
• Podem ser utilizados como uma Checklist para o
desenvolvimento e deploy de aplicações
• Por mais que não envolva padrões de qualidade de códido, não
significa que esse assunto deva ser ignorado
• A metodologia pode ser estendida para contemplar outros
fatores que o time julgue necessário
Telemetria
Segurança
Padrões de qualidade
O que mais?
23
Excelência técnica para acelerar sua jornada digital.
w w w . l a m b d a 3 . c o m . b r
24

Mais conteúdo relacionado

Mais procurados

Boas práticas na configuração de jobs no Kubernetes
Boas práticas na configuração de jobs no KubernetesBoas práticas na configuração de jobs no Kubernetes
Boas práticas na configuração de jobs no KubernetesGraziella Bonizi
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks phpIgor Moura
 
Gerenciamento de Projetos com o Redmine
Gerenciamento de Projetos com o RedmineGerenciamento de Projetos com o Redmine
Gerenciamento de Projetos com o RedminePatrick Kaminski
 
Uaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - IntroduçãoUaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - IntroduçãoRogerio Fontes
 
Melhores práticas de deployment do IBM Connections
Melhores práticas de deployment do IBM ConnectionsMelhores práticas de deployment do IBM Connections
Melhores práticas de deployment do IBM Connectionsrodrigoareis
 
IBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticasIBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticasrodrigoareis
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETRenato Groff
 
Web Tools Pt B R
Web Tools Pt  B RWeb Tools Pt  B R
Web Tools Pt B Rguestb9d145
 
Gestão de Projetos com Redmine
Gestão de Projetos com RedmineGestão de Projetos com Redmine
Gestão de Projetos com Redmineferedestech
 
GCS - Aula 07 - Sistemas de Controle de Versões
GCS - Aula 07 - Sistemas de Controle de VersõesGCS - Aula 07 - Sistemas de Controle de Versões
GCS - Aula 07 - Sistemas de Controle de VersõesMisael Santos
 
Automatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsAutomatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsFelipe Santos
 
Academia do Arquiteto - Introdução a ALM e Redmine
Academia do Arquiteto - Introdução a ALM e RedmineAcademia do Arquiteto - Introdução a ALM e Redmine
Academia do Arquiteto - Introdução a ALM e RedmineGlobalcode
 
Introdução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open SourceIntrodução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open SourceGlobalcode
 
DevOps & Docker com a stack Microsoft
DevOps & Docker com a stack MicrosoftDevOps & Docker com a stack Microsoft
DevOps & Docker com a stack MicrosoftGraziella Bonizi
 
Explicando DevOps
Explicando DevOpsExplicando DevOps
Explicando DevOpss4nx
 
Visual basic apostila up vb6 para vbnet
Visual basic   apostila up vb6 para vbnetVisual basic   apostila up vb6 para vbnet
Visual basic apostila up vb6 para vbnetrobinhoct
 

Mais procurados (20)

Boas práticas na configuração de jobs no Kubernetes
Boas práticas na configuração de jobs no KubernetesBoas práticas na configuração de jobs no Kubernetes
Boas práticas na configuração de jobs no Kubernetes
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks php
 
Gerenciamento de Projetos com o Redmine
Gerenciamento de Projetos com o RedmineGerenciamento de Projetos com o Redmine
Gerenciamento de Projetos com o Redmine
 
Uaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - IntroduçãoUaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - Introdução
 
Melhores práticas de deployment do IBM Connections
Melhores práticas de deployment do IBM ConnectionsMelhores práticas de deployment do IBM Connections
Melhores práticas de deployment do IBM Connections
 
Git hub and Laravel
Git hub and Laravel Git hub and Laravel
Git hub and Laravel
 
IBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticasIBM Web Content Management - Melhores práticas
IBM Web Content Management - Melhores práticas
 
Mastering Laravel
Mastering LaravelMastering Laravel
Mastering Laravel
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
 
ASP.NET 5, MVC 6 e além
ASP.NET 5, MVC 6 e alémASP.NET 5, MVC 6 e além
ASP.NET 5, MVC 6 e além
 
Web Tools Pt B R
Web Tools Pt  B RWeb Tools Pt  B R
Web Tools Pt B R
 
Gestão de Projetos com Redmine
Gestão de Projetos com RedmineGestão de Projetos com Redmine
Gestão de Projetos com Redmine
 
GCS - Aula 07 - Sistemas de Controle de Versões
GCS - Aula 07 - Sistemas de Controle de VersõesGCS - Aula 07 - Sistemas de Controle de Versões
GCS - Aula 07 - Sistemas de Controle de Versões
 
Automatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsAutomatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com Jenkins
 
Academia do Arquiteto - Introdução a ALM e Redmine
Academia do Arquiteto - Introdução a ALM e RedmineAcademia do Arquiteto - Introdução a ALM e Redmine
Academia do Arquiteto - Introdução a ALM e Redmine
 
Introdução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open SourceIntrodução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open Source
 
O Futuro do ASP.NET
O Futuro do ASP.NETO Futuro do ASP.NET
O Futuro do ASP.NET
 
DevOps & Docker com a stack Microsoft
DevOps & Docker com a stack MicrosoftDevOps & Docker com a stack Microsoft
DevOps & Docker com a stack Microsoft
 
Explicando DevOps
Explicando DevOpsExplicando DevOps
Explicando DevOps
 
Visual basic apostila up vb6 para vbnet
Visual basic   apostila up vb6 para vbnetVisual basic   apostila up vb6 para vbnet
Visual basic apostila up vb6 para vbnet
 

Semelhante a Boas práticas na construção de serviços

Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Renato Groffe
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021Renato Groffe
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Renato Groff
 
IBM Domino 9 cluster - zero to hero
IBM Domino 9 cluster - zero to heroIBM Domino 9 cluster - zero to hero
IBM Domino 9 cluster - zero to heroAndré Luís Cardoso
 
TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...
TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...
TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...tdc-globalcode
 
Introdução ao 12 Factors APP
Introdução ao 12 Factors APPIntrodução ao 12 Factors APP
Introdução ao 12 Factors APPDouglas Alonso
 
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
 
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
 
Construindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoConstruindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoAlvaro Viebrantz
 
Projeto e Desenvolvimento de Software
Projeto e Desenvolvimento de SoftwareProjeto e Desenvolvimento de Software
Projeto e Desenvolvimento de SoftwareAragon Vieira
 
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
 

Semelhante a Boas práticas na construção de serviços (20)

12 factor app
12 factor app12 factor app
12 factor app
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Go global para Windows
Go global para WindowsGo global para Windows
Go global para Windows
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App - Março-2021
 
Ai ad-tp3-g3
Ai ad-tp3-g3Ai ad-tp3-g3
Ai ad-tp3-g3
 
Apprenda 12.2015
Apprenda 12.2015Apprenda 12.2015
Apprenda 12.2015
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
 
IBM Domino 9 cluster - zero to hero
IBM Domino 9 cluster - zero to heroIBM Domino 9 cluster - zero to hero
IBM Domino 9 cluster - zero to hero
 
TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...
TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...
TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...
 
Introdução ao 12 Factors APP
Introdução ao 12 Factors APPIntrodução ao 12 Factors APP
Introdução ao 12 Factors APP
 
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
 
12 Factor Apps
12 Factor Apps12 Factor Apps
12 Factor Apps
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlab
 
Construindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoConstruindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em Go
 
Projeto e Desenvolvimento de Software
Projeto e Desenvolvimento de SoftwareProjeto e Desenvolvimento de Software
Projeto e Desenvolvimento de Software
 
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
 
Fundamentos em Containers
Fundamentos em ContainersFundamentos em Containers
Fundamentos em Containers
 

Mais de tdc-globalcode

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadetdc-globalcode
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...tdc-globalcode
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucessotdc-globalcode
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPAtdc-globalcode
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinotdc-globalcode
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...tdc-globalcode
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicestdc-globalcode
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publicatdc-globalcode
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#tdc-globalcode
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocustdc-globalcode
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?tdc-globalcode
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golangtdc-globalcode
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QAtdc-globalcode
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciatdc-globalcode
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Servicetdc-globalcode
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETtdc-globalcode
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8tdc-globalcode
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...tdc-globalcode
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#tdc-globalcode
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Coretdc-globalcode
 

Mais de tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 

Último

activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADOcarolinacespedes23
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISVitor Vieira Vasconcelos
 
FCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirFCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirIedaGoethe
 
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfO Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfPastor Robson Colaço
 
02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdfJorge Andrade
 
A experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptxA experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptxfabiolalopesmartins1
 
Caixa jogo da onça. para imprimir e jogar
Caixa jogo da onça. para imprimir e jogarCaixa jogo da onça. para imprimir e jogar
Caixa jogo da onça. para imprimir e jogarIedaGoethe
 
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxAula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxBiancaNogueira42
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 
Aula 1, 2 Bacterias Características e Morfologia.pptx
Aula 1, 2  Bacterias Características e Morfologia.pptxAula 1, 2  Bacterias Características e Morfologia.pptx
Aula 1, 2 Bacterias Características e Morfologia.pptxpamelacastro71
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxOsnilReis1
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaaulasgege
 
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveAula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveaulasgege
 
Simulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfSimulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfEditoraEnovus
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANO
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANOInvestimentos. EDUCAÇÃO FINANCEIRA 8º ANO
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANOMarcosViniciusLemesL
 

Último (20)

activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGIS
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
FCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirFCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimir
 
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfO Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
 
02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf02. Informática - Windows 10 apostila completa.pdf
02. Informática - Windows 10 apostila completa.pdf
 
A experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptxA experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptx
 
Caixa jogo da onça. para imprimir e jogar
Caixa jogo da onça. para imprimir e jogarCaixa jogo da onça. para imprimir e jogar
Caixa jogo da onça. para imprimir e jogar
 
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxAula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 
Aula 1, 2 Bacterias Características e Morfologia.pptx
Aula 1, 2  Bacterias Características e Morfologia.pptxAula 1, 2  Bacterias Características e Morfologia.pptx
Aula 1, 2 Bacterias Características e Morfologia.pptx
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
 
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveAula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
 
Simulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfSimulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdf
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANO
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANOInvestimentos. EDUCAÇÃO FINANCEIRA 8º ANO
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANO
 

Boas práticas na construção de serviços

  • 1. Boas práticas na construção de serviços 1
  • 2. Grazi Bonizi Coordeno a trilha de Arquitetura .Net no The Developers Conference, compartilho código no GitHub, escrevo no Medium e no Blog da Lambda3, e participo de Meetups e PodCasts normalmente sobre DevOps, Azure, .Net, Docker e DDD Consultora DevOps na Lambda3 Este é um exemplo de subtítulo. https://twitter.com/GraziBonizi https://github.com/grazibonizi https://www.linkedin.com/in/graziella-bonizi-b14835a0/ https://www.lambda3.com.br/L3/graziella-bonizi/ 2
  • 3. Conteúdo 1 Origem, princípios e fatores 2 Fatores de Design 3 Fatores de Build & Release 4 Fatores de Gerenciamento 5 Próximos passos Quais são nossas principais preocupações ao construir uma aplicação? Que decisões valem a pena ser tomadas no início do projeto para que a aplicação esteja "production-ready" desde as primeiras features? Ao longo da palestra vamos entender como os princípios da 12 Factor Apps podem implementados para que a aplicação seja escalável, íntegra e gerenciada adequadamente. Porque 12 factor app? 12 Fator App é uma metodologia bem didática que reúne boas práticas para construção de serviços, muito relacionado a desenvolvimento moderno, containers, DevOps e plataforma em nuvem. O objetivo hoje é mostrar como o 12 Factor App pode guiar a construção de serviços prontos para serem publicados desde as primeiras versões. Os fatores foram agrupados em três assuntos: • Fatores de Design, que estão relacionados ao desenvolvimento e arquitetura da aplicação em si, • Fatores de Build & Release, que observam as práticas de integração e entrega contínuas • e Fatores de Gerenciamento, relacionados à administração e ao monitoramento da aplicação em execução. Para encerrar, vou outros dois fatores que talvez fizessem parte da metodologia se ela fosse elaborada hoje, e vou demonstrar uma aplicação em .NET que cumpre os 12 fatores. 3
  • 4. 12 Factor App: Origem, Princípios e Fatores 4
  • 5. Origem a lenta deterioração do software ao longo do tempo que acabará por torná-lo inutilizável. O software não decai, mas sofre com a falta de atualização em relação à mudança ambiente em que reside” “Erosão de software é • Metodologia criada pelos colaboradores da plataforma Heroku, em particular o co-fundador Adam Wiggins; • Heroku é uma plataforma PAAS poliglota; • O time criou a metodologia com base na sua experiência no que contribuiu para o sucesso e resistência à erosão do Heroku. • É destinada à construção de serviços, independente de linguagem e plataforma Em 2006, Adam Wiggins, fundador dos 12 fatores, criou uma aplicação web simples e a compartilhou com alguns amigos. Ele deixou de utilizá-la, mas seus amigos continuaram. Dois anos depois ele foi notificado que o site estava fora do ar. Logando no servidor com ssh, ele descobriu que: • O processo da aplicação tinha quebrado e não reiniciou; • A utilização do disco tinha atingido 100% por causa dos arquivos de log e dados de sessão; • O kernel, ssh, openssl e apache precisavam de atualizações de segurança críticas; • A distribuição do linux tinha sido descontinuada, e não possuía as atualizações de segurança necessárias. Ele tentou migrar a aplicação para outra VM com um Sistema Operacional atualizado, mas a aplicação quebrou por uma série de motivos, como apontamentos locais que eram diferentes neste Sistema Operacional, e mudanças em dependências externas. Em resumo, a aplicação atingiu um estado não funcional, sem nenhuma alteração no código que estava funcionando. Ele tinha acabado de vivenciar um caso impactante de Erosão de Software. 5
  • 6. • Usam formatos declarativos para automatizar a configuração inicial, minimizar tempo e custo para novos desenvolvedores participarem do projeto; • Tem um contrato claro com o sistema operacional que o suporta, oferecendo portabilidade máxima entre ambientes que o executem; • São adequados para implantação em modernas plataformas em nuvem, evitando a necessidade por servidores e administração do sistema; • Minimizam a divergência entre ambientes, como desenvolvimento e produção, permitindo a implantação contínua para máxima agilidade; • E podem escalar sem significativas mudanças em ferramentas, arquiteturas, ou práticas de desenvolvimento. É uma metodologia para construir softwares- como-serviço que: 6
  • 7. Os fatores 1 Codebase 2 Dependencies 3 Config 4 Backing services 5 Build, release, run 6 Processes 7 Port binding 8 Concurrency 9 Disposability 10 Dev/prod parity 11 Logs 12 Admin processes 7
  • 9. Port Binding • Self-Hosted Apps: a aplicação deve ser capaz de inicializar e ouvir e responder a uma porta • O HTTP Server deixa de ser um elemento externo e passa a ser uma dependência da aplicação Exporte os serviços via port binding Tradicionalmente as aplicações eram compiladas e publicadas em WebServers externos, como IIS e Apache. Com o desenvolvimento moderno, os webservers deixam de ser um elemento externo e passam a fazer parte da aplicação como dependência. O efeito é a aplicação ser auto-contida, isto é, capaz de se “hospedar” sozinha e ser executada como um processo web vinculado a uma porta. No ambiente de desenvolvimento, o programador acessa a URL local, como http://localhost:5000, e no ambiente de deploy, uma URL pública é vinculada à URL local, como http://www.12factor.net . 9
  • 10. Processes and concurrency • Não dependa de sessões ou dados armazenados no ambiente • Informações de sessão devem ser armazenadas numa Store externa • Mais de um serviço deve poder ser instanciado sem impacto no funcionamento da aplicação Execute a aplicação como um ou mais serviços sem estado Ainda muito relacionado ao fator Port-Binding, os fatores Processes e Concurrency permitem que a aplicação seja escalada verticalmente (várias instâncias na mesma máquina) e horizontalmente (várias instâncias em máquinas diferentes). A aplicação é executada como um processo que não compartilha estado, portanto, pode ser gerenciada isoladamente. 10
  • 11. Backing Services • Serviços devem ser configurados via um único ponto de entrada • O apontamento deve ser externo, como uma URL em um arquivo de configuração Trate o consumo de serviços como recursos atachados Os serviços que a aplicação consome, como banco de dados, provedores de email e etc devem poder ser “atachados” ou “desatachados“ facilmente por meio de um único ponto de entrada, normalmente uma URL, com seu apontamento em um arquivo de configuração 11
  • 12. Disposability • Os ambientes devem poder ser descartados e escalados sempre que necessário • A aplicação deve poder trocar de ambiente sem impacto no funcionamento Maximize a robustez com startups rápidos e “graceful shutdowns” “Servidores não são bichinhos de estimação” Originalmente, devido ao modelo de desenvolvimento e operações, os servidores eram tratados com “carinho”. O custo operacional e financeiro para trocar a aplicação de ambiente era alto. No desenvolvimento moderno, as aplicações podem ser facilmente trocadas de ambiente caso haja a necessidade. Utilizando infraestrutura como serviços a velocidade para realocar aplicações saindo de um servidor com problemas para um saudável é mínima. Com Plataforma como Serviços (PaaS) ou orquestradores de containers, como Kubernetes, isso é feito automaticamente sem a necessidade de intervenção manual. Isso é possível porque ao cumprir os 12 fatores, os processos de aplicação são descartáveis, rápidos para inicializar e “graciosos ao encerrar”. No caso de processos web isso implica em finalizar as requisições em execução adequadamente sem deixar processos presos, conexões abertas ou “rastros”. As aplicações também são preparadas para lidar com interrupções súbitas. 12
  • 13. Fatores de Build & Release 13
  • 14. Codebase • Use um versionador de código (git) • Aplicações que possuem ciclos de vida distintos devem estar em repositórios distintos • O que é promovido é o artefato, não o código • Escolha uma estratégia de branches adequada • Configure a integração contínua Uma única base de código rastreada em um sistema de revisão com múltiplos deploys Existe sempre uma correlação um-para-um entre a base de código e a aplicação: • Se existem várias bases de código, isto não é uma app – é um sistema distribuído. Cada componente do sistema é uma app, e cada uma pode individualmente ser compatível com os 12 fatores. • Múltiplas apps compartilhando uma base de código é uma violação dos 12 fatores. A solução aqui é dividir o código compartilhado entre bibliotecas que podem ser incluídas através do gerenciador de dependências. 14
  • 15. Dependencies • Deixe claro quais dependências e versões sua aplicação utiliza • Não utilize dependências compartilhadas entre aplicações (GAC, Com+) • Isole o ambiente da aplicação Declare de forma explícita e isole as dependências As dependências da aplicação e suas versões estão claramente enumeradas (packages.json, arquivos pom, etc). Não utilize dependências compartilhadas. Quando mais de uma aplicação utiliza a mesma dependência no sistema operacional, a atualização de uma pode impactar na outra. Isso facilita o setup da aplicação na máquina de desenvolvimento, por exemplo. Após obter o código, executar um comando simples, como nuget restore ou npm install será o suficiente para baixar todas as dependências corretas e deixar a aplicação pronta para ser compilada. 15
  • 16. Config • Não utilize apontamentos e varíaveis de uma forma que seja necessária a recompilação da aplicação • As configurações que dependem do ambiente em que a aplicação será publicada devem ser isoladas para o ambiente em questão • Utilize variáveis de ambiente, arquivos ou serviços externos de configuração • Se você fosse abrir o código da sua aplicação hoje, alguma informação confidencial seria comprometida? Armazene a configuração do ambiente no próprio ambiente 16
  • 17. Build, Release, Run • Release: Artefato de Build + Parâmetros, arquivos de configuração e secrets relativos ao ambiente Separe os estágios de construção e execução Uma base de código é transformada num deploy através de três estágios: • Build: O estágio de construção é uma transformação que converte um repositório de código em um pacote executável, ou artefato. • Release: O estágio de entrega obtém o artefato produzida pelo estágio de construção e o combina com a configuração atual do ambiente em que será publicado, resultando em uma aplicação pronta para ser executada. • Run: O estágio de execução roda o app no ambiente de execução, através do início de alguns dos processos do app com um determinado artefato. Com a implementação adequada de integração contínua e entrega contínua, o artefato é rastreado facilmente à versão de código que o gerou. 17
  • 18. Dev/Prod Parity • Ambiente de desenvolvimento, testes e produção deve ser tão compatível quanto possível • Mesmas dependências e serviços consumidos • Base de código deve ser semelhante à produção (Continuous Deployment) • Desenvolvedores devem estar próximos do deploy Mantenha o desenvolvimento, homologação e produção tão similares quanto possível Historicamente, houveram lacunas substanciais entre desenvolvimento (um desenvolvedor codificando) e produção (a aplicação disponível para os usuários finais). Essas lacunas se manifestam em três áreas: • A lacuna do tempo: Um desenvolvedor pode trabalhar em código que demora dias, semanas ou até meses para ir para produção. • A lacuna de pessoal: Desenvolvedores escrevem código, engenheiros de operação fazem o deploy dele. • A lacuna de ferramentas: Desenvolvedores podem estar usando um conjunto como Nginx, SQLite, e OS X, enquanto o app em produção usa Apache, MySQL, e Linux. Olhando as três lacunas descritas acima: • Diminua a lacuna de tempo: um desenvolvedor pode escrever código e ter o deploy feito em horas ou até mesmo minutos depois. • Diminua a lacuna de pessoal: desenvolvedores que escrevem código estão proximamente envolvidos em realizar o deploy e acompanhar seu comportamento em produção. • Diminua a lacuna de ferramentas: mantenha desenvolvimento e produção o mais similares possível. 18
  • 20. Logs • Um log é um stream de eventos sequenciais produzidos por uma aplicação em execução • Um log não tem início, nem fim, mas é contínuo enquanto a aplicação estiver rodando • A aplicação não deveria se preocupar em armazenar o log • Os logs podem ser vistos no terminal • Um serviço externo deve ser configurado para coletar os logs e armazená-los em um local centralizado Trate logs como fluxo contínuo de eventos Tradicionalmente as aplicações salvam os logs em algum arquivo de output, e isso traz a preocupação com armazenamento e gerenciamento de logs. Na metodologia 12 fatores, os logs são tratados como um fluxo contínuo de eventos sem começo ou fim, disponível no terminal, e outras aplicações são responsáveis por coletá-los e armazená-los. 20
  • 21. Admin Processes • Tarefas administrativas devem fazer parte do deploy da aplicação que estão relacionadas • Exemplos: scripts de migração, monitoramento ou correções de ambiente Execute tarefas de administração/gestão como processos pontuais Algumas aplicações possuem tarefas administrativas, como migração de modelo de banco de dados ou inspeção de ambiente. Esse tipo de tarefa é tratada como parte da aplicação, desde a base de código até a construção e entrega. Um operador não terá que fazer alterações no ambiente de execução da aplicação para executá-las porque elas já estarão prontas e disponíveis no ambiente. 21
  • 23. Próximos passos • Os 12 fatores tem um objetivo claro, envolvendo portabilidade e escalabilidade • Podem ser utilizados como uma Checklist para o desenvolvimento e deploy de aplicações • Por mais que não envolva padrões de qualidade de códido, não significa que esse assunto deva ser ignorado • A metodologia pode ser estendida para contemplar outros fatores que o time julgue necessário Telemetria Segurança Padrões de qualidade O que mais? 23
  • 24. Excelência técnica para acelerar sua jornada digital. w w w . l a m b d a 3 . c o m . b r 24