Upload
filipe-la-ruina
View
865
Download
0
Embed Size (px)
DESCRIPTION
Uma visão das diversas técnicas disponíveis para melhorar a escalabilidade de uma aplicação. Exibição de ferramentas que trabalham bem com o PHP e que são muito utilizadas pela comunidade.
Citation preview
07/07/2012 The Developer's Conference 1
Técnicas para ser escalável com
07/07/2012 The Developer's Conference 2
Filipe La RuinaWorks @ ecompete.com.br
@filaruina
07/07/2012 The Developer's Conference 3
Escalabilidade
07/07/2012 The Developer's Conference 4
EscalabilidadeTécnicas não são regras!
07/07/2012 The Developer's Conference 5
O que é?
07/07/2012 The Developer's Conference 6
O que é?O que não é?
07/07/2012 The Developer's Conference 7
O que é?O que não é?
➔ Performance
07/07/2012 The Developer's Conference 8
O que é?O que não é?
➔ Performance
➔ Usar Tecnologia X
07/07/2012 The Developer's Conference 9
O que é?O que não é?
➔ Performance
➔ Usar Tecnologia X
➔ Separação de Responsabilidades
07/07/2012 The Developer's Conference 10
O que é?O que não é?
➔ Performance
➔ Usar Tecnologia X
➔ Separação de Responsabilidades
07/07/2012 The Developer's Conference 11
Escalabilidade é uma característica desejável em todo o sistema, em uma rede ou em um processo, que indica sua habilidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar preparado para crescer.
07/07/2012 The Developer's Conference 12
O que é?
➔ Aguenta aumento no uso
07/07/2012 The Developer's Conference 13
O que é?
➔ Aguenta aumento no uso
➔ Aguenta aumento nos dados
07/07/2012 The Developer's Conference 14
O que é?
➔ Aguenta aumento no uso
➔ Aguenta aumento nos dados
➔ Fácil manutenção
07/07/2012 The Developer's Conference 15
Vamos por Partes
07/07/2012 The Developer's Conference 16
1º Passo Desenvolvimento
07/07/2012 The Developer's Conference 17
Desenvolvimento
➔ Separação de Conceitos (OOP, Camadas, etc)
07/07/2012 The Developer's Conference 18
Desenvolvimento
➔ Separação de Conceitos (OOP, Camadas, etc)
API Cliente
07/07/2012 The Developer's Conference 19
Desenvolvimento
API
LB
API
API ClientDB
➔ Separação de Conceitos (OOP, Camadas, etc)
07/07/2012 The Developer's Conference 20
Desenvolvimento
API
➔ Arquitetura Orientada a Serviços
Authentication
Product
Client
07/07/2012 The Developer's Conference 21
Desenvolvimento
➔ Use Controle de Versão
07/07/2012 The Developer's Conference 22
Desenvolvimento
➔ Use Controle de Versão
Usa esse blz?
07/07/2012 The Developer's Conference 23
Desenvolvimento
➔ Integração Contínua
07/07/2012 The Developer's Conference 24
Desenvolvimento
➔ Integração Contínua
➔ Build Automatizado (e rápido)
07/07/2012 The Developer's Conference 25
Desenvolvimento
➔ Integração Contínua
➔ Build Automatizado (e rápido)
➔ Testes
07/07/2012 The Developer's Conference 26
Desenvolvimento
➔ Integração Contínua
➔ Build Automatizado (e rápido)
➔ Testes
➔ Verifique Qualidade
http://phpqatools.org
07/07/2012 The Developer's Conference 27
Desenvolvimento
➔ Atualize-se
07/07/2012 The Developer's Conference 28
Desenvolvimento
➔ Atualize-se
THIS
07/07/2012 The Developer's Conference 29
2º Passo Monitoramento
07/07/2012 The Developer's Conference 30
Monitoramento
➔ Por que?
07/07/2012 The Developer's Conference 31
Monitoramento
➔ Por que?
07/07/2012 The Developer's Conference 32
Monitoramento
➔ Por que?
➔ Identificar Gargalos (+ usuários => + tempo gasto)
07/07/2012 The Developer's Conference 33
Monitoramento
➔ Por que?
➔ Identificar Gargalos (+ usuários => + tempo gasto)
➔ Prevenir Problemas
07/07/2012 The Developer's Conference 34
Monitoramento
➔ Por que?
➔ Identificar Gargalos (+ usuários => + tempo gasto)
➔ Prevenir Problemas
➔ Poder dormir tranquilo
07/07/2012 The Developer's Conference 35
Monitoramento
➔ Ferramentas
07/07/2012 The Developer's Conference 36
Monitoramento
➔ Ferramentas
➔ Top (é sério)
07/07/2012 The Developer's Conference 37
Monitoramento
➔ Ferramentas
➔ Top (é sério)
Load: 1, 5, 15 minutos
07/07/2012 The Developer's Conference 38
Monitoramento
➔ Ferramentas
➔ Top (é sério)
Load: 1, 5, 15 minutos
Memória e Swap
07/07/2012 The Developer's Conference 39
Monitoramento
➔ Ferramentas
➔ Top (é sério)
Load: 1, 5, 15 minutos
Memória e Swap
Processos
07/07/2012 The Developer's Conference 40
Monitoramento
➔ Ferramentas
➔ Profiling
07/07/2012 The Developer's Conference 41
Monitoramento
➔ Ferramentas
➔ MySql SHOW (tem tudo lá! http://dev.mysql.com/doc/refman/5.0/en/show.html)
➔ Slow Query Log
➔ Explain Query
07/07/2012 The Developer's Conference 42
Monitoramento
➔ Ferramentas
➔ Monitoramento de Infra
07/07/2012 The Developer's Conference 43
3º Passo Crescimento
07/07/2012 The Developer's Conference 44
Crescimento
➔ Formas de Crescer
07/07/2012 The Developer's Conference 45
Crescimento
➔ Formas de Crescer
➔ Horizontalmente
AppServerAppServer AppServer AppServerAppServer
Client
Load Balancer
07/07/2012 The Developer's Conference 46
Crescimento
➔ Formas de Crescer
➔ Horizontalmente
➔ VerticalmenteAppServer AppServer
Client
Load Balancer
07/07/2012 The Developer's Conference 47
Crescimento
➔ Cache
07/07/2012 The Developer's Conference 48
Crescimento
➔ Cache
➔ HTTP Cache (Diminui quantidade de requests)
07/07/2012 The Developer's Conference 49
Crescimento
➔ Cache
➔ Opcode Cache (APC)
http://www.php.net/apc
07/07/2012 The Developer's Conference 50
Crescimento
➔ Cache
➔ Memory Cache (memcached)
https://github.com/php-memcached-dev/php-memcachedhttp://pecl.php.net/package/memcached
AppDB Memcached
07/07/2012 The Developer's Conference 51
Crescimento
➔ Replicação
➔ Master (Escritas)
➔ Slaves (Leituras)
App
MasterSlave
SlaveSlave
SlaveSlave
Read
Slave
Write
07/07/2012 The Developer's Conference 52
Crescimento
➔ Índices em tabelas
07/07/2012 The Developer's Conference 53
Crescimento
➔ Índices em tabelas
07/07/2012 The Developer's Conference 54
Crescimento
➔ Índices em tabelas
07/07/2012 The Developer's Conference 55
Crescimento
➔ Índices em tabelas
➔ Preferência a campos com baixa cardinalidade
07/07/2012 The Developer's Conference 56
Crescimento
➔ Índices em tabelas
➔ Preferência a campos com baixa cardinalidade
➔ Ocupam mais espaço em disco
07/07/2012 The Developer's Conference 57
Crescimento
➔ Índices em tabelas
➔ Preferência a campos com baixa cardinalidade
➔ Ocupam mais espaço em disco
➔ Índices são agrupamentos
07/07/2012 The Developer's Conference 58
Crescimento
➔ Índices em tabelas
➔ Preferência a campos com baixa cardinalidade
➔ Ocupam mais espaço em disco
➔ Índices são agrupamentos
➔ Diminuem o tempo de escrita
07/07/2012 The Developer's Conference 59
Crescimento
➔ Distribuição de Tarefas
07/07/2012 The Developer's Conference 60
Crescimento
➔ Distribuição de Tarefas
➔ Gearmanhttp://gearman.org/
http://php.net/gearman
07/07/2012 The Developer's Conference 61
Crescimento
➔ Distribuição de Tarefas
➔ Gearmanhttp://gearman.org/
http://php.net/gearman
07/07/2012 The Developer's Conference 62
Crescimento
➔ Distribuição de Tarefas
➔ Gearmanhttp://gearman.org/
http://php.net/gearman
07/07/2012 The Developer's Conference 63
Mais Umas Coisas
07/07/2012 The Developer's Conference 64
Mais Umas Coisas
➔ Entenda o que está acontecendo
➔ Análise os custos antes de tomar uma decisão
➔ Use um proxy reverso (nginx, squid, Varnish)
➔ Lado cliente é importante
07/07/2012 The Developer's Conference 65
Case – Bolsa de Mulher
by: @zanaca
07/07/2012 The Developer's Conference 66
Case – Bolsa de Mulher
~ 7K Simultâneosby: @zanaca
07/07/2012 The Developer's Conference 67
ReferênciasCases interessantes
Tumblr: http://bit.ly/z4cdCG
YouPorn: http://bit.ly/Hhz0PV (Sério!)
Facebook: http://b.qr.ae/gB5C6b
Digg: http://bit.ly/Xp4NW
Flickr: http://bit.ly/1Jywk1
Livros
http://oreil.ly/N7LH6b http://oreil.ly/pnKqJG http://oreil.ly/LwjPXd
07/07/2012 The Developer's Conference 68
Obrigado!Agradecimentos:● @alganet e @duodraco pela oportunidade● @searleoliveira pela ajuda com MySql● @zanaca pela lembrança da arquitetura do Bolsa de Mulher● @igorpsantos pela ajuda com a Infra
@filaruina