SlideShare a Scribd company logo
1 of 41
Download to read offline
Advogados do diabo
Como a arquitetura emergente da sua aplicação
pode jogar contra a entrega contínua
Gleicon Moraes
https://github.com/gleicon
https://twitter.com/gleicon
http://opamp.io
Renato Lucindo
https://github.com/lucindo
https://twitter.com/rlucindo
http://opamp.io
https://intelie.com
Continuous Delivery
Continuous Delivery
Mudança incremental (check-in/push):
● Build ✅
● Testes unitários ✅
● Testes de integração ✅
● Testes de aceitação ✅
● Testes de interface ✅
● Deploy ✅
Tudo Automágico!
Desvios de percepção
"Please, don’t drive a school bus blindfolded." - Nassim Nicholas Taleb
"(...) there are known knowns; there are things we know we know. We also
know there are known unknowns; that is to say we know there are some things
we do not know. But there are also unknown unknowns -- the ones we don't
know we don't know. (...) it is the latter category that tend to be the
difficult ones." - Donald Rumsfeld
Sua aplicação começa assim
e
cresce
mais
ou
menos
desse
jeito
Por que as coisas dão errado ?
Lit. Popular: Falácias de Sistemas
(distribuídos)
"Essentially everyone, when they first build a distributed application, makes the
following eight assumptions. All prove to be false in the long run and all cause
big trouble and painful learning experiences." -- L Peter Deutsch (1994)
1. The network is reliable.
2. Latency is zero.
3. Bandwidth is infinite.
4. The network is secure.
5. Topology doesn't change.
6. There is one administrator.
7. Transport cost is zero.
8. The network is homogeneous.
Lit. Popular: Algumas regras para
Engenharia
1. A melhor solução para um problema é não tê-lo
2. Hacks são permanentes (principalmente os feios)
3. Não existe infraestrutura em stand-by: existe o que você usa e o
que não vai funcionar quando você precisar
4. A primeira falácia de automação é fazer máquinas executar
passos de um processo manual humano
5. Não são features (não são negociáveis): Segurança,
Disponibilidade e Performance.
(http://blog.b3k.us/2012/01/24/some-rules.html)
Lit. Popular: Leis da interweb
● Lei de Parkinson: O trabalho se expande até preencher todo o tempo
disponível.
● W. Edwards Demming: Não é suficiente fazer o seu melhor; Você precisa
saber o que fazer, e então fazer o seu melhor.
● Cisne Negro (Black swan): Um evento que é uma surpresa para o observador, tem
um efeito enorme e posteriormente é racionalizado como algo esperado.
● Lei de Conway: Organizações que projetam sistemas (...) são limitadas a
produzir sistemas que são cópias das estruturas de comunicação destas
organizações.
Por que as coisas dão errado ?
● Saber o que fazer: Desenvolvimento baseado em features
● Black Swan: Quais as chances de situações ruins acontecerem ?
● Lei de Parkinson: Quais são os deadlines. O que vamos deixar de fazer e aprender para
alcança-los ?
● Lei de Parkinson: ReReReReReReReRepriorizações
● Lei de Parkinson: Impressão de nunca terminar nada após entender o problema.
● Black Swan: Excesso de confiança em ferramentas e racionalização de problemas.
Soluções quebra galho acumuladas.
● Black Swan: Inocência ao abordar uma feature ou problema
● Saber o que fazer: Inexperiência do time trabalhando ou das pessoas
● Black Swans: Empolgação
Parkinson's law: work expands to fill the time available
It is not enough to do your best; you must know what to do, and then do your best. W. Edwards Demming
Black swan: An event that is a surprise to the observer, has a major effect and afterwards is rationalized in hindsight as it could have been expected
Desmistificando o PaaS genérico
Indice complicometrico de mudanças
[(legado + sistemas novos incompletos + reescritas) * idade ] ^ urgência do
negócio
______________________________________________________________
número de desenvolvedores + número de sysadmins
Componentes importantes dos sistemas de sua empresa: auth, serviço interno
de ordens, backoffice de clientes, logistica. Qual o custo adicional de criar um
PaaS genérico e depois o seu PaaS™ ?
E agora ?
Casos e Sugestões
Métricas, métricas everywhere
(a soma das partes
equivale ao timeout
do todo)
Trabalhar com requisitos não funcionais
● Logs normalizados
○ com contexto (user, host, operation, ...)
● Reload automatico (configs, templates, ...)
● Ferramentas administrativas
○ quanto mais melhor, não são features
● Contadores e estatísticas
● Gráficos e dashboards
● Requisitos também vem da operação
Trabalhar com requisitos não funcionais
● Logs normalizados
○ com contexto (user, host, operation, ...)
● Reload automatico (configs, templates, ...)
● Ferramentas administrativas
○ quanto mais melhor, não são features
● Contadores e estatísticas
● Gráficos e dashboards
● Requisitos também vem da operação
Lit. Popular: Algumas regras para
Engenharia
1. A melhor solução para um problema é não tê-lo
2. Hacks são permanentes (principalmente os feios)
3. Não existe infraestrutura em stand-by: existe o que você usa e o
que não vai funcionar quando você precisar
4. A primeira falácia de automação é fazer máquinas executar
passos de um processo manual humano
5. Não são features (não são negociáveis): Segurança,
Disponibilidade e Performance.
(http://blog.b3k.us/2012/01/24/some-rules.html)
Testes que importam
● Teste funcional totalmente automatizado
● CI: Sem mocks
● Log replay
● Teste de concorrência/carga
● Bullet-proof tests
○ Kill -STOP test
○ Load test (iozone, gcc test)
○ Kill VM/Proc test (chaos monkey)
● Quanto custa um restart quando as sessões estão amarradas a
servidores ou entradas em cache sustentam seu dia a dia
Caso drama: Cade meu cache? Cade meu I/O?
Cache (memcached, db, fs cache, app cache)
Read 1 MB sequentially from memory: 0.25 ms
Read 1 MB sequentially from SSD*: 1ms (4X memory)
Disk seek: 10ms 40x memory, 10x SSD
Read 1 MB sequentially from disk: 20ms 80x memory, 20x SSD
1GB em cache -> 1024 * 0.25ms = 256ms
1GB em SSD -> 1024 * 1ms = 1024ms = 1.24s
1GB em disco -> 1024 * 20ms = 20.480ms = 20.48s
+ Roundtrip de rede
+ Timeouts
(fonte: http://chu.pe/4sd)
Mudanças de schema de banco de dados
1. Conheça seu ORM e seu problema de
impedância
2. Não conte com suas otimizações no banco
3. Alterações incrementais de esquema (db
schema)
4. Faça um teste de restaurar seu esquema +
dados de produção com carga sintética
5. Lembre do I/O e da concorrência entre
mudanças no banco e produção/clientes
Caso drama: Migrations na minha tabela gigante
Como introduzir uma nova feature
● On/Off switch
● Testes de regressão (banco de dados)
● Testes funcionais completos
● Teste do Upgrade (versões intermediárias)
● Teste do Downgrade (rollback)
Blue-green Deployment e Loadbalancer
Blue-green deployment (sem variações) *
* http://martinfowler.com/bliki/BlueGreenDeployment.html
Blue-green Deployment e Loadbalancer
The Distributed Developer Stack Field Guide
● The cloud is the default platform.
● The codebase is in git.
● The environment is automated in the code.
● Tests done in code, not by a QA department.
● Realtime chat and chatbots.
● CI servers deploy code, not ops.
● The application runs locally on development.
● The monitoring infrastructure is critical.
● Containers are the default deployment target.
Bibliografia sugerida
Bib: Distributed Developer Stack Field Guide
Uma introdução para o desenvolvedor de sistemas distribuidos (basicamente
todos)
http://sites.oreilly.com/odewahn/dds-field-guide/
Bib: Stability Patterns
● Use Timeouts
● Circuit Breaker
● Bulkheads
● Steady State
● Fail Fast
● Handshaking
● Test Harness
● Decoupling Middleware
Bibliografia extra
Julho/2015
Editora Casa do Código
Gleicon Moraes
Perguntas ?
obg dnad

More Related Content

What's hot

MEAN Full Stack JavaScript - TaSafoConf 2015
MEAN Full Stack JavaScript - TaSafoConf 2015MEAN Full Stack JavaScript - TaSafoConf 2015
MEAN Full Stack JavaScript - TaSafoConf 2015Kaio Valente
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com HudsonLuis Reis
 
Introdução ao Node.js - FATEC SP
Introdução ao Node.js - FATEC SPIntrodução ao Node.js - FATEC SP
Introdução ao Node.js - FATEC SPArthur Fücher
 
Sim, existe vida além do FTP!
Sim, existe vida além do FTP!Sim, existe vida além do FTP!
Sim, existe vida além do FTP!Gustavo Pereira
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasRodrigo Branas
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarBetter Developer
 
Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJSGiovanni Bassi
 
Conhecendo o Nodejs
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o NodejsCaio Cutrim
 
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensDrupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensPaulino Michelazzo
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.Filipe Morelli
 
Joomla! do desktop ao datacenter
Joomla! do desktop ao datacenterJoomla! do desktop ao datacenter
Joomla! do desktop ao datacenterPaulino Michelazzo
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04Carlos Santos
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funcionaRodrigo Serradura
 
Ir para cloud com arquitetura de microservices resolverá o meu problema?
Ir para cloud com arquitetura de microservices resolverá o meu problema?Ir para cloud com arquitetura de microservices resolverá o meu problema?
Ir para cloud com arquitetura de microservices resolverá o meu problema?Better Developer
 

What's hot (20)

MEAN Full Stack JavaScript - TaSafoConf 2015
MEAN Full Stack JavaScript - TaSafoConf 2015MEAN Full Stack JavaScript - TaSafoConf 2015
MEAN Full Stack JavaScript - TaSafoConf 2015
 
Node js - Javascript Server Side
Node js - Javascript Server SideNode js - Javascript Server Side
Node js - Javascript Server Side
 
PostgreSQL Rock Star
PostgreSQL Rock StarPostgreSQL Rock Star
PostgreSQL Rock Star
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com Hudson
 
Introdução ao Node.js - FATEC SP
Introdução ao Node.js - FATEC SPIntrodução ao Node.js - FATEC SP
Introdução ao Node.js - FATEC SP
 
Sim, existe vida além do FTP!
Sim, existe vida além do FTP!Sim, existe vida além do FTP!
Sim, existe vida além do FTP!
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudar
 
Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJS
 
Conhecendo o Nodejs
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o Nodejs
 
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensDrupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
Joomla! do desktop ao datacenter
Joomla! do desktop ao datacenterJoomla! do desktop ao datacenter
Joomla! do desktop ao datacenter
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
 
Pragmatismo e Simplicidade
Pragmatismo e SimplicidadePragmatismo e Simplicidade
Pragmatismo e Simplicidade
 
Web debugging proxies
Web debugging proxiesWeb debugging proxies
Web debugging proxies
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funciona
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 
Ir para cloud com arquitetura de microservices resolverá o meu problema?
Ir para cloud com arquitetura de microservices resolverá o meu problema?Ir para cloud com arquitetura de microservices resolverá o meu problema?
Ir para cloud com arquitetura de microservices resolverá o meu problema?
 

Similar to DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra a entrega contínua.

Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo RealLeandro Silva
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Leandro Silva
 
Planejamento de Capacidade Técnicas e Ferramentas
Planejamento de Capacidade Técnicas e FerramentasPlanejamento de Capacidade Técnicas e Ferramentas
Planejamento de Capacidade Técnicas e Ferramentasluanrjesus
 
OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014Marcio Marchini
 
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringTDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringFelipe Klerk Signorini
 
Armadilhas no Desenvolvimento de Software
Armadilhas no Desenvolvimento de SoftwareArmadilhas no Desenvolvimento de Software
Armadilhas no Desenvolvimento de Softwarejamersonlima
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?tdc-globalcode
 
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceEncontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceCarolina Karklis
 
As Falácias e os Desenganos no Desenvolvimento de Software (TechDays 2005)
As Falácias e os Desenganos no Desenvolvimento de Software (TechDays 2005)As Falácias e os Desenganos no Desenvolvimento de Software (TechDays 2005)
As Falácias e os Desenganos no Desenvolvimento de Software (TechDays 2005)Bruno Camara
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosAlex Hübner
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaHenrique Lima
 
Tunning PostgreSQL em modo OGRO - 13º Latinoware
Tunning PostgreSQL em modo OGRO - 13º LatinowareTunning PostgreSQL em modo OGRO - 13º Latinoware
Tunning PostgreSQL em modo OGRO - 13º LatinowareGerdan Santos
 
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchXen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchBernardo Donadio
 
curso-228532-aula-10-20e2-completo 1..pdf
curso-228532-aula-10-20e2-completo  1..pdfcurso-228532-aula-10-20e2-completo  1..pdf
curso-228532-aula-10-20e2-completo 1..pdfkassiocarlos
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
Estratégias de escablabilidade para serviços online
Estratégias de escablabilidade para serviços onlineEstratégias de escablabilidade para serviços online
Estratégias de escablabilidade para serviços onlineGuto Xavier
 

Similar to DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra a entrega contínua. (20)

Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo Real
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012
 
Novas Fronteiras
Novas FronteirasNovas Fronteiras
Novas Fronteiras
 
Planejamento de Capacidade Técnicas e Ferramentas
Planejamento de Capacidade Técnicas e FerramentasPlanejamento de Capacidade Técnicas e Ferramentas
Planejamento de Capacidade Técnicas e Ferramentas
 
OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014
 
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringTDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
 
Armadilhas no Desenvolvimento de Software
Armadilhas no Desenvolvimento de SoftwareArmadilhas no Desenvolvimento de Software
Armadilhas no Desenvolvimento de Software
 
Introdução ao XP
Introdução ao XPIntrodução ao XP
Introdução ao XP
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresceEncontrando equilíbrio do DDD enquanto sua aplicação cresce
Encontrando equilíbrio do DDD enquanto sua aplicação cresce
 
As Falácias e os Desenganos no Desenvolvimento de Software (TechDays 2005)
As Falácias e os Desenganos no Desenvolvimento de Software (TechDays 2005)As Falácias e os Desenganos no Desenvolvimento de Software (TechDays 2005)
As Falácias e os Desenganos no Desenvolvimento de Software (TechDays 2005)
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
 
Times plataforma-tdc2020
Times plataforma-tdc2020Times plataforma-tdc2020
Times plataforma-tdc2020
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 
Tunning PostgreSQL em modo OGRO - 13º Latinoware
Tunning PostgreSQL em modo OGRO - 13º LatinowareTunning PostgreSQL em modo OGRO - 13º Latinoware
Tunning PostgreSQL em modo OGRO - 13º Latinoware
 
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchXen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
 
curso-228532-aula-10-20e2-completo 1..pdf
curso-228532-aula-10-20e2-completo  1..pdfcurso-228532-aula-10-20e2-completo  1..pdf
curso-228532-aula-10-20e2-completo 1..pdf
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
Estratégias de escablabilidade para serviços online
Estratégias de escablabilidade para serviços onlineEstratégias de escablabilidade para serviços online
Estratégias de escablabilidade para serviços online
 

More from Gleicon Moraes

Como arquiteturas de dados quebram
Como arquiteturas de dados quebramComo arquiteturas de dados quebram
Como arquiteturas de dados quebramGleicon Moraes
 
Por trás da infraestrutura do Cloud - Campus Party 2014
Por trás da infraestrutura do Cloud - Campus Party 2014Por trás da infraestrutura do Cloud - Campus Party 2014
Por trás da infraestrutura do Cloud - Campus Party 2014Gleicon Moraes
 
A closer look to locaweb IaaS
A closer look to locaweb IaaSA closer look to locaweb IaaS
A closer look to locaweb IaaSGleicon Moraes
 
Semi Automatic Sentiment Analysis
Semi Automatic Sentiment AnalysisSemi Automatic Sentiment Analysis
Semi Automatic Sentiment AnalysisGleicon Moraes
 
OSCon - Performance vs Scalability
OSCon - Performance vs ScalabilityOSCon - Performance vs Scalability
OSCon - Performance vs ScalabilityGleicon Moraes
 
Architectural Anti Patterns - Notes on Data Distribution and Handling Failures
Architectural Anti Patterns - Notes on Data Distribution and Handling FailuresArchitectural Anti Patterns - Notes on Data Distribution and Handling Failures
Architectural Anti Patterns - Notes on Data Distribution and Handling FailuresGleicon Moraes
 
Architecture by Accident
Architecture by AccidentArchitecture by Accident
Architecture by AccidentGleicon Moraes
 
Dlsecyx pgroammr (Dyslexic Programmer - cool stuff for scaling)
Dlsecyx pgroammr (Dyslexic Programmer - cool stuff for scaling)Dlsecyx pgroammr (Dyslexic Programmer - cool stuff for scaling)
Dlsecyx pgroammr (Dyslexic Programmer - cool stuff for scaling)Gleicon Moraes
 
Architectural anti-patterns for data handling
Architectural anti-patterns for data handlingArchitectural anti-patterns for data handling
Architectural anti-patterns for data handlingGleicon Moraes
 
Architectural anti patterns_for_data_handling
Architectural anti patterns_for_data_handlingArchitectural anti patterns_for_data_handling
Architectural anti patterns_for_data_handlingGleicon Moraes
 
RestMQ - HTTP/Redis based Message Queue
RestMQ - HTTP/Redis based Message QueueRestMQ - HTTP/Redis based Message Queue
RestMQ - HTTP/Redis based Message QueueGleicon Moraes
 
NoSQL and SQL Anti Patterns
NoSQL and SQL Anti PatternsNoSQL and SQL Anti Patterns
NoSQL and SQL Anti PatternsGleicon Moraes
 

More from Gleicon Moraes (17)

Como arquiteturas de dados quebram
Como arquiteturas de dados quebramComo arquiteturas de dados quebram
Como arquiteturas de dados quebram
 
API Gateway report
API Gateway reportAPI Gateway report
API Gateway report
 
Por trás da infraestrutura do Cloud - Campus Party 2014
Por trás da infraestrutura do Cloud - Campus Party 2014Por trás da infraestrutura do Cloud - Campus Party 2014
Por trás da infraestrutura do Cloud - Campus Party 2014
 
Locaweb cloud and sdn
Locaweb cloud and sdnLocaweb cloud and sdn
Locaweb cloud and sdn
 
A closer look to locaweb IaaS
A closer look to locaweb IaaSA closer look to locaweb IaaS
A closer look to locaweb IaaS
 
Semi Automatic Sentiment Analysis
Semi Automatic Sentiment AnalysisSemi Automatic Sentiment Analysis
Semi Automatic Sentiment Analysis
 
OSCon - Performance vs Scalability
OSCon - Performance vs ScalabilityOSCon - Performance vs Scalability
OSCon - Performance vs Scalability
 
Architectural Anti Patterns - Notes on Data Distribution and Handling Failures
Architectural Anti Patterns - Notes on Data Distribution and Handling FailuresArchitectural Anti Patterns - Notes on Data Distribution and Handling Failures
Architectural Anti Patterns - Notes on Data Distribution and Handling Failures
 
Architecture by Accident
Architecture by AccidentArchitecture by Accident
Architecture by Accident
 
Patterns of fail
Patterns of failPatterns of fail
Patterns of fail
 
Dlsecyx pgroammr (Dyslexic Programmer - cool stuff for scaling)
Dlsecyx pgroammr (Dyslexic Programmer - cool stuff for scaling)Dlsecyx pgroammr (Dyslexic Programmer - cool stuff for scaling)
Dlsecyx pgroammr (Dyslexic Programmer - cool stuff for scaling)
 
Architectural anti-patterns for data handling
Architectural anti-patterns for data handlingArchitectural anti-patterns for data handling
Architectural anti-patterns for data handling
 
Architectural anti patterns_for_data_handling
Architectural anti patterns_for_data_handlingArchitectural anti patterns_for_data_handling
Architectural anti patterns_for_data_handling
 
RestMQ - HTTP/Redis based Message Queue
RestMQ - HTTP/Redis based Message QueueRestMQ - HTTP/Redis based Message Queue
RestMQ - HTTP/Redis based Message Queue
 
NoSQL and SQL Anti Patterns
NoSQL and SQL Anti PatternsNoSQL and SQL Anti Patterns
NoSQL and SQL Anti Patterns
 
Redis
RedisRedis
Redis
 
NoSql Introduction
NoSql IntroductionNoSql Introduction
NoSql Introduction
 

DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra a entrega contínua.

  • 1. Advogados do diabo Como a arquitetura emergente da sua aplicação pode jogar contra a entrega contínua
  • 5. Continuous Delivery Mudança incremental (check-in/push): ● Build ✅ ● Testes unitários ✅ ● Testes de integração ✅ ● Testes de aceitação ✅ ● Testes de interface ✅ ● Deploy ✅
  • 7. Desvios de percepção "Please, don’t drive a school bus blindfolded." - Nassim Nicholas Taleb "(...) there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns -- the ones we don't know we don't know. (...) it is the latter category that tend to be the difficult ones." - Donald Rumsfeld
  • 9. e
  • 11. mais
  • 12. ou
  • 13. menos
  • 14. desse
  • 15. jeito
  • 16. Por que as coisas dão errado ?
  • 17. Lit. Popular: Falácias de Sistemas (distribuídos) "Essentially everyone, when they first build a distributed application, makes the following eight assumptions. All prove to be false in the long run and all cause big trouble and painful learning experiences." -- L Peter Deutsch (1994) 1. The network is reliable. 2. Latency is zero. 3. Bandwidth is infinite. 4. The network is secure. 5. Topology doesn't change. 6. There is one administrator. 7. Transport cost is zero. 8. The network is homogeneous.
  • 18. Lit. Popular: Algumas regras para Engenharia 1. A melhor solução para um problema é não tê-lo 2. Hacks são permanentes (principalmente os feios) 3. Não existe infraestrutura em stand-by: existe o que você usa e o que não vai funcionar quando você precisar 4. A primeira falácia de automação é fazer máquinas executar passos de um processo manual humano 5. Não são features (não são negociáveis): Segurança, Disponibilidade e Performance. (http://blog.b3k.us/2012/01/24/some-rules.html)
  • 19. Lit. Popular: Leis da interweb ● Lei de Parkinson: O trabalho se expande até preencher todo o tempo disponível. ● W. Edwards Demming: Não é suficiente fazer o seu melhor; Você precisa saber o que fazer, e então fazer o seu melhor. ● Cisne Negro (Black swan): Um evento que é uma surpresa para o observador, tem um efeito enorme e posteriormente é racionalizado como algo esperado. ● Lei de Conway: Organizações que projetam sistemas (...) são limitadas a produzir sistemas que são cópias das estruturas de comunicação destas organizações.
  • 20. Por que as coisas dão errado ? ● Saber o que fazer: Desenvolvimento baseado em features ● Black Swan: Quais as chances de situações ruins acontecerem ? ● Lei de Parkinson: Quais são os deadlines. O que vamos deixar de fazer e aprender para alcança-los ? ● Lei de Parkinson: ReReReReReReReRepriorizações ● Lei de Parkinson: Impressão de nunca terminar nada após entender o problema. ● Black Swan: Excesso de confiança em ferramentas e racionalização de problemas. Soluções quebra galho acumuladas. ● Black Swan: Inocência ao abordar uma feature ou problema ● Saber o que fazer: Inexperiência do time trabalhando ou das pessoas ● Black Swans: Empolgação Parkinson's law: work expands to fill the time available It is not enough to do your best; you must know what to do, and then do your best. W. Edwards Demming Black swan: An event that is a surprise to the observer, has a major effect and afterwards is rationalized in hindsight as it could have been expected
  • 21. Desmistificando o PaaS genérico Indice complicometrico de mudanças [(legado + sistemas novos incompletos + reescritas) * idade ] ^ urgência do negócio ______________________________________________________________ número de desenvolvedores + número de sysadmins Componentes importantes dos sistemas de sua empresa: auth, serviço interno de ordens, backoffice de clientes, logistica. Qual o custo adicional de criar um PaaS genérico e depois o seu PaaS™ ?
  • 22. E agora ? Casos e Sugestões
  • 23. Métricas, métricas everywhere (a soma das partes equivale ao timeout do todo)
  • 24. Trabalhar com requisitos não funcionais ● Logs normalizados ○ com contexto (user, host, operation, ...) ● Reload automatico (configs, templates, ...) ● Ferramentas administrativas ○ quanto mais melhor, não são features ● Contadores e estatísticas ● Gráficos e dashboards ● Requisitos também vem da operação
  • 25. Trabalhar com requisitos não funcionais ● Logs normalizados ○ com contexto (user, host, operation, ...) ● Reload automatico (configs, templates, ...) ● Ferramentas administrativas ○ quanto mais melhor, não são features ● Contadores e estatísticas ● Gráficos e dashboards ● Requisitos também vem da operação
  • 26. Lit. Popular: Algumas regras para Engenharia 1. A melhor solução para um problema é não tê-lo 2. Hacks são permanentes (principalmente os feios) 3. Não existe infraestrutura em stand-by: existe o que você usa e o que não vai funcionar quando você precisar 4. A primeira falácia de automação é fazer máquinas executar passos de um processo manual humano 5. Não são features (não são negociáveis): Segurança, Disponibilidade e Performance. (http://blog.b3k.us/2012/01/24/some-rules.html)
  • 27. Testes que importam ● Teste funcional totalmente automatizado ● CI: Sem mocks ● Log replay ● Teste de concorrência/carga ● Bullet-proof tests ○ Kill -STOP test ○ Load test (iozone, gcc test) ○ Kill VM/Proc test (chaos monkey) ● Quanto custa um restart quando as sessões estão amarradas a servidores ou entradas em cache sustentam seu dia a dia
  • 28. Caso drama: Cade meu cache? Cade meu I/O? Cache (memcached, db, fs cache, app cache) Read 1 MB sequentially from memory: 0.25 ms Read 1 MB sequentially from SSD*: 1ms (4X memory) Disk seek: 10ms 40x memory, 10x SSD Read 1 MB sequentially from disk: 20ms 80x memory, 20x SSD 1GB em cache -> 1024 * 0.25ms = 256ms 1GB em SSD -> 1024 * 1ms = 1024ms = 1.24s 1GB em disco -> 1024 * 20ms = 20.480ms = 20.48s + Roundtrip de rede + Timeouts (fonte: http://chu.pe/4sd)
  • 29. Mudanças de schema de banco de dados 1. Conheça seu ORM e seu problema de impedância 2. Não conte com suas otimizações no banco 3. Alterações incrementais de esquema (db schema) 4. Faça um teste de restaurar seu esquema + dados de produção com carga sintética 5. Lembre do I/O e da concorrência entre mudanças no banco e produção/clientes
  • 30. Caso drama: Migrations na minha tabela gigante
  • 31. Como introduzir uma nova feature ● On/Off switch ● Testes de regressão (banco de dados) ● Testes funcionais completos ● Teste do Upgrade (versões intermediárias) ● Teste do Downgrade (rollback)
  • 32. Blue-green Deployment e Loadbalancer Blue-green deployment (sem variações) * * http://martinfowler.com/bliki/BlueGreenDeployment.html
  • 33. Blue-green Deployment e Loadbalancer
  • 34. The Distributed Developer Stack Field Guide ● The cloud is the default platform. ● The codebase is in git. ● The environment is automated in the code. ● Tests done in code, not by a QA department. ● Realtime chat and chatbots. ● CI servers deploy code, not ops. ● The application runs locally on development. ● The monitoring infrastructure is critical. ● Containers are the default deployment target.
  • 36. Bib: Distributed Developer Stack Field Guide Uma introdução para o desenvolvedor de sistemas distribuidos (basicamente todos) http://sites.oreilly.com/odewahn/dds-field-guide/
  • 37. Bib: Stability Patterns ● Use Timeouts ● Circuit Breaker ● Bulkheads ● Steady State ● Fail Fast ● Handshaking ● Test Harness ● Decoupling Middleware
  • 39. Julho/2015 Editora Casa do Código Gleicon Moraes
  • 40.