escalando aplicações web: além da arquitetura
TRANSCRIPT
what the f**rancisco?!• Desenvolvedor na Globo.com
• Pythonista desde 2008
• PythonBrasil desde 2011
• Open source fanboy
• Desenvolvedor do tsuru
Escalando aplicações web
1GB 1GB1GB1GB1GB 1GB 1GB 1GB 1GB 1GB 1GB1GB1GB1GB1GB1GB
1GB 1GB1GB1GB1GB 1GB 1GB 1GB 1GB 1GB 1GB1GB1GB1GB1GB1GB
1GB 1GB1GB1GB1GB 1GB 1GB 1GB 1GB 1GB 1GB1GB1GB1GB1GB1GB
Backing services
“The code for a twelve-factor app makes no distinction between local and third party services. To the app, both are attached resources,
accessed via a URL or other locator/credentials stored in the config.”
http://12factor.net/backing-services
Backing services“The code for a twelve-factor app makes no distinction between local
and third party services. To the app, both are attached resources, accessed via a URL or other locator/credentials stored in the config.”
http://12factor.net/backing-services
Concurrency
“In the twelve-factor app, processes are a first class citizen.
…
The process model truly shines when it comes time to scale out. The share-nothing, horizontally partitionable nature of twelve-factor app
processes means that adding more concurrency is a simple and reliable operation.
http://12factor.net/concurrency
Disposability
The twelve-factor app’s processes are disposable, meaning they can be started or stopped at a moment’s notice. This
facilitates fast elastic scaling, rapid deployment of code or config changes, and robustness of production deploys.
http://12factor.net/disposability
Um conto de migração
• Uma aplicação fictícia rodava em duas máquinas gigantes
• Uma galera moda jovem decide economizar uma grana e migrar para a “cloud”
Um conto de migração
• Ao invés de 2 máquinas grandes, a aplicação passa a roda em 40 containers
• E aí alguns problemas apareceram…
Assets compartilhados
• Arquivos gravados em disco
• Mount points compartilhados entre as máquinas
• Read-only filesystem de tempos em tempos
• Forte dependência de um file server
Outros problemas
• Logs em arquivos
• Criação, abertura e gerenciamento de arquivos
• Rotacionamento de logs
Menos é mais• Foque no objetivo da aplicação
• Delegue para outras ferramentas funcionalidades importantes que não fazem parte do objeto da aplicação
• Gerenciamento do processo / daemon
• Logs
• Quanto mais simples, mais fácil de escalar
Centralize o estado
• Redis
• memcached
• [coloque seu banco de dados chave-valor aqui]
• Banco de dados relacional (muita calma nessa hora)
“By caching at every level from the browser through the cloud, your network, application servers, and even databases, one can significantly increase
one’s ability to scale”
Martin L. Abbott, Michael T. Fisher, 2011
Quanto tempo?
• O dono do dado deve dizer por quanto tempo ele é válido.
• DNS TTL
• Cache-Control
• Expiração de chaves Redis / memcached
Page Cache
• Um proxy reverso cacheia o resultado
• O dono do dado diz por quanto tempo ele é válido (Cache-Control)
Object cache• Uma página é grande demais
• Páginas podem variar por usuário
• Partes do conteúdo não
• Tempo controlado de acordo com a ferramenta escolhida
• Alternativamente, deixar a ferramenta controlar com LRU
Automatize• Faça track de mudanças de performance em
servidores de integração contínua
• Use testes automatizados para garantir certos comportamentos e previnir regressões
• Headers de cache
• Object cache: TTL, invalidação manual e automática, etc.
Escalando aplicações web
Além da arquitetura
Francisco Souza @franciscosouza slideshare.net/franciscosouza [email protected]
globo .com