técnicas para ser escalável com php
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.TRANSCRIPT
![Page 1: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/1.jpg)
07/07/2012 The Developer's Conference 1
Técnicas para ser escalável com
![Page 2: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/2.jpg)
07/07/2012 The Developer's Conference 2
Filipe La RuinaWorks @ ecompete.com.br
@filaruina
![Page 3: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/3.jpg)
07/07/2012 The Developer's Conference 3
Escalabilidade
![Page 4: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/4.jpg)
07/07/2012 The Developer's Conference 4
EscalabilidadeTécnicas não são regras!
![Page 5: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/5.jpg)
07/07/2012 The Developer's Conference 5
O que é?
![Page 6: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/6.jpg)
07/07/2012 The Developer's Conference 6
O que é?O que não é?
![Page 7: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/7.jpg)
07/07/2012 The Developer's Conference 7
O que é?O que não é?
➔ Performance
![Page 8: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/8.jpg)
07/07/2012 The Developer's Conference 8
O que é?O que não é?
➔ Performance
➔ Usar Tecnologia X
![Page 9: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/9.jpg)
07/07/2012 The Developer's Conference 9
O que é?O que não é?
➔ Performance
➔ Usar Tecnologia X
➔ Separação de Responsabilidades
![Page 10: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/10.jpg)
07/07/2012 The Developer's Conference 10
O que é?O que não é?
➔ Performance
➔ Usar Tecnologia X
➔ Separação de Responsabilidades
![Page 11: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/11.jpg)
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.
![Page 12: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/12.jpg)
07/07/2012 The Developer's Conference 12
O que é?
➔ Aguenta aumento no uso
![Page 13: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/13.jpg)
07/07/2012 The Developer's Conference 13
O que é?
➔ Aguenta aumento no uso
➔ Aguenta aumento nos dados
![Page 14: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/14.jpg)
07/07/2012 The Developer's Conference 14
O que é?
➔ Aguenta aumento no uso
➔ Aguenta aumento nos dados
➔ Fácil manutenção
![Page 15: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/15.jpg)
07/07/2012 The Developer's Conference 15
Vamos por Partes
![Page 16: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/16.jpg)
07/07/2012 The Developer's Conference 16
1º Passo Desenvolvimento
![Page 17: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/17.jpg)
07/07/2012 The Developer's Conference 17
Desenvolvimento
➔ Separação de Conceitos (OOP, Camadas, etc)
![Page 18: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/18.jpg)
07/07/2012 The Developer's Conference 18
Desenvolvimento
➔ Separação de Conceitos (OOP, Camadas, etc)
API Cliente
![Page 19: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/19.jpg)
07/07/2012 The Developer's Conference 19
Desenvolvimento
API
LB
API
API ClientDB
➔ Separação de Conceitos (OOP, Camadas, etc)
![Page 20: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/20.jpg)
07/07/2012 The Developer's Conference 20
Desenvolvimento
API
➔ Arquitetura Orientada a Serviços
Authentication
Product
Client
![Page 21: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/21.jpg)
07/07/2012 The Developer's Conference 21
Desenvolvimento
➔ Use Controle de Versão
![Page 22: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/22.jpg)
07/07/2012 The Developer's Conference 22
Desenvolvimento
➔ Use Controle de Versão
Usa esse blz?
![Page 23: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/23.jpg)
07/07/2012 The Developer's Conference 23
Desenvolvimento
➔ Integração Contínua
![Page 24: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/24.jpg)
07/07/2012 The Developer's Conference 24
Desenvolvimento
➔ Integração Contínua
➔ Build Automatizado (e rápido)
![Page 25: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/25.jpg)
07/07/2012 The Developer's Conference 25
Desenvolvimento
➔ Integração Contínua
➔ Build Automatizado (e rápido)
➔ Testes
![Page 26: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/26.jpg)
07/07/2012 The Developer's Conference 26
Desenvolvimento
➔ Integração Contínua
➔ Build Automatizado (e rápido)
➔ Testes
➔ Verifique Qualidade
http://phpqatools.org
![Page 27: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/27.jpg)
07/07/2012 The Developer's Conference 27
Desenvolvimento
➔ Atualize-se
![Page 28: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/28.jpg)
07/07/2012 The Developer's Conference 28
Desenvolvimento
➔ Atualize-se
THIS
![Page 29: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/29.jpg)
07/07/2012 The Developer's Conference 29
2º Passo Monitoramento
![Page 30: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/30.jpg)
07/07/2012 The Developer's Conference 30
Monitoramento
➔ Por que?
![Page 31: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/31.jpg)
07/07/2012 The Developer's Conference 31
Monitoramento
➔ Por que?
![Page 32: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/32.jpg)
07/07/2012 The Developer's Conference 32
Monitoramento
➔ Por que?
➔ Identificar Gargalos (+ usuários => + tempo gasto)
![Page 33: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/33.jpg)
07/07/2012 The Developer's Conference 33
Monitoramento
➔ Por que?
➔ Identificar Gargalos (+ usuários => + tempo gasto)
➔ Prevenir Problemas
![Page 34: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/34.jpg)
07/07/2012 The Developer's Conference 34
Monitoramento
➔ Por que?
➔ Identificar Gargalos (+ usuários => + tempo gasto)
➔ Prevenir Problemas
➔ Poder dormir tranquilo
![Page 35: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/35.jpg)
07/07/2012 The Developer's Conference 35
Monitoramento
➔ Ferramentas
![Page 36: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/36.jpg)
07/07/2012 The Developer's Conference 36
Monitoramento
➔ Ferramentas
➔ Top (é sério)
![Page 37: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/37.jpg)
07/07/2012 The Developer's Conference 37
Monitoramento
➔ Ferramentas
➔ Top (é sério)
Load: 1, 5, 15 minutos
![Page 38: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/38.jpg)
07/07/2012 The Developer's Conference 38
Monitoramento
➔ Ferramentas
➔ Top (é sério)
Load: 1, 5, 15 minutos
Memória e Swap
![Page 39: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/39.jpg)
07/07/2012 The Developer's Conference 39
Monitoramento
➔ Ferramentas
➔ Top (é sério)
Load: 1, 5, 15 minutos
Memória e Swap
Processos
![Page 40: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/40.jpg)
07/07/2012 The Developer's Conference 40
Monitoramento
➔ Ferramentas
➔ Profiling
![Page 41: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/41.jpg)
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
![Page 42: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/42.jpg)
07/07/2012 The Developer's Conference 42
Monitoramento
➔ Ferramentas
➔ Monitoramento de Infra
![Page 43: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/43.jpg)
07/07/2012 The Developer's Conference 43
3º Passo Crescimento
![Page 44: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/44.jpg)
07/07/2012 The Developer's Conference 44
Crescimento
➔ Formas de Crescer
![Page 45: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/45.jpg)
07/07/2012 The Developer's Conference 45
Crescimento
➔ Formas de Crescer
➔ Horizontalmente
AppServerAppServer AppServer AppServerAppServer
Client
Load Balancer
![Page 46: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/46.jpg)
07/07/2012 The Developer's Conference 46
Crescimento
➔ Formas de Crescer
➔ Horizontalmente
➔ VerticalmenteAppServer AppServer
Client
Load Balancer
![Page 47: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/47.jpg)
07/07/2012 The Developer's Conference 47
Crescimento
➔ Cache
![Page 48: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/48.jpg)
07/07/2012 The Developer's Conference 48
Crescimento
➔ Cache
➔ HTTP Cache (Diminui quantidade de requests)
![Page 49: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/49.jpg)
07/07/2012 The Developer's Conference 49
Crescimento
➔ Cache
➔ Opcode Cache (APC)
http://www.php.net/apc
![Page 50: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/50.jpg)
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
![Page 51: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/51.jpg)
07/07/2012 The Developer's Conference 51
Crescimento
➔ Replicação
➔ Master (Escritas)
➔ Slaves (Leituras)
App
MasterSlave
SlaveSlave
SlaveSlave
Read
Slave
Write
![Page 52: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/52.jpg)
07/07/2012 The Developer's Conference 52
Crescimento
➔ Índices em tabelas
![Page 53: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/53.jpg)
07/07/2012 The Developer's Conference 53
Crescimento
➔ Índices em tabelas
![Page 54: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/54.jpg)
07/07/2012 The Developer's Conference 54
Crescimento
➔ Índices em tabelas
![Page 55: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/55.jpg)
07/07/2012 The Developer's Conference 55
Crescimento
➔ Índices em tabelas
➔ Preferência a campos com baixa cardinalidade
![Page 56: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/56.jpg)
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
![Page 57: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/57.jpg)
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
![Page 58: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/58.jpg)
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
![Page 59: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/59.jpg)
07/07/2012 The Developer's Conference 59
Crescimento
➔ Distribuição de Tarefas
![Page 60: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/60.jpg)
07/07/2012 The Developer's Conference 60
Crescimento
➔ Distribuição de Tarefas
➔ Gearmanhttp://gearman.org/
http://php.net/gearman
![Page 61: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/61.jpg)
07/07/2012 The Developer's Conference 61
Crescimento
➔ Distribuição de Tarefas
➔ Gearmanhttp://gearman.org/
http://php.net/gearman
![Page 62: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/62.jpg)
07/07/2012 The Developer's Conference 62
Crescimento
➔ Distribuição de Tarefas
➔ Gearmanhttp://gearman.org/
http://php.net/gearman
![Page 63: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/63.jpg)
07/07/2012 The Developer's Conference 63
Mais Umas Coisas
![Page 64: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/64.jpg)
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
![Page 65: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/65.jpg)
07/07/2012 The Developer's Conference 65
Case – Bolsa de Mulher
by: @zanaca
![Page 66: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/66.jpg)
07/07/2012 The Developer's Conference 66
Case – Bolsa de Mulher
~ 7K Simultâneosby: @zanaca
![Page 67: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/67.jpg)
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
![Page 68: Técnicas para ser escalável com PHP](https://reader034.vdocuments.net/reader034/viewer/2022051609/54756007b4af9fbe0a8b5b80/html5/thumbnails/68.jpg)
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