Como facer PHP fodidamente rápido
-
Upload
fran-dieguez -
Category
Documents
-
view
581 -
download
5
Transcript of Como facer PHP fodidamente rápido
![Page 1: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/1.jpg)
Como facer PHP fodidamente rápido
Fran Diéguez – OpenHost && Mabishu
![Page 2: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/2.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
2
Sobre min
![Page 3: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/3.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
3
Fran Diéguez
● Traballo en OpenHost e na OSL da USC
● Desenvolvedor web de aplicativos con altas taxas de usuarios
● Traballei durante 3 anos con Ruby on Rails● Agora mesmo estou traballando nunha plataforma
editorial dixital para periódicos desenvolvida con PHP (Zend, Smarty, Doctrine)
● Estou perxudicado (as festas pérdenme)
![Page 4: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/4.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
4
Que imos ver?
● Consideracións que poucos saben e como atallalas
● Sistemas de cache
● Sistemas de plantillas: Smarty 3 (non 2)
● Clustering
![Page 5: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/5.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
5
Consideracións que poucos sabene como atallalas
![Page 6: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/6.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
6
Principais lugares de bottlenecks
● Sistemas de ficheiros
● Conexións simultáneas
● Memoria compartida
● Xestión de procesos do sistema
● Conexión a outros servidores
![Page 7: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/7.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
7
Sistemas de ficheiros
● Se usades Linux nos vosos servers tedes que ter en conta as restricións dos FS:
● Sempre son problemas derivados do sistema de nodos-i
● Normalmente os sistemas de ficheiros funcionan ben até os 1024 elementos dentro dun mesmo nodo-i
● Polo que sempre tentade que dentro dun cartafol haxa como máximo 1024 elementos– Se vos pasades empregade aniñado de cartafoles.
![Page 8: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/8.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
8
![Page 9: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/9.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
9
Problema de conexións simultáneas● Se temos poucas conexións
(usuarios concurrentes) o noso script PHP usará menos memoria compartida
● Se temos moitas conexións simultáneas PHP non xestiona nada ben a memoria compartida e pode ocasionar perdas de rendemento incríbeis
● SOLUCIÓN:
● Usar sistemas de memoria compartida externa
● Cachear a estáticos ou OpCode
● Utilizar métodos de abstracción para usar servizos de terceiros
![Page 10: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/10.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
10
Como simulamos altas taxas de usuarios?
● Hai moitas ferramentas
● Ab do Proxecto Apache● Httperf de HP, un manual moi chulo● ...
● PROBLEMA:
● Non representan de forma fidedigna as accións de usuarios (useflow completo do usuario)
![Page 11: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/11.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
11
Servidores de aplicativo vs servidores de estáticos● É moi importante ter ben diferenciados os
servidores que serven ficheiros logo dun procesado (aplicativo) dos que son servidores de estáticos
● Eu recomendo que estean en distintas máquinas cando o proxecto creza dabondo
● Podedes empregar o que queirades pero:– Apache: como server de aplicacións co módulo
mod_php– Nginx: como server de estáticos
![Page 12: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/12.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
12
Coding Standards
● Non teñen relación directa co rendemento da app
● Pero fallos pequenos poden incrementar as chamadas internas do parser de PHP
● Exemplo:
● Eliminando os ?> dos controladores e modelos obrigas a PHP a non pechar os streams de código o cal implica un incremento de rendemento dun 0,4 % do script final.
![Page 13: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/13.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
13
Máis exemplos
● Uso das funcións de expresións regulares de Perl
● Preg_replace● Preg_match● Etc.
● Uso de include vs require (*once)
● Outro exemplo chorra:
– Impresión de texto con:● Print e non echo● Usade a nomenclatura “{$nome_do_usuario}” e non “$nome_do_usuario”
● O mito de que o uso de Orientación a obxectos é máis lento xa non se cumpre
● A partires de PHP 5.3 isto mellorou moitísimo
![Page 14: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/14.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
14
Standard Public Library
● Se queredes facer que PHP vaia máis rápido
● POR FAVOR USADE O SPL DE PHP● Son APIs escritas en C e compiladas en lingua máquina polo que
vai ir moi rápido
● Ten API para moitas das tarefas comúns cando queremos acceder a elementos do sistema a baixo nivel:
● Iteradores de Obxectos, Arrays, Ficheiros, Directorios● Parseo de XML optimizado● Sistema de excepcións máis extenso que o incluído no core.
● Vantaxe: todo orientado a obxectos
![Page 15: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/15.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
15
Usade proffiling
● O proffiling é analizar as chamadas internas da linguaxe e o uso de memoria de cada unha delas
● Para PHP usade Xdebug, basicamente porque non hai outro
● Permite proffiling e debugging de forma moi cómoda
● Para consultar os resultados empregade Kcachegrind ou webgrind.
● Se sabedes interpretar de forma correcta os resultados podedes saber onde están os bottlenecks nos vosos apps.
![Page 16: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/16.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
16
En resumo, atacamos así
● Gardando todo en memoria compartida
● Crear estáticos
● Balancear carga entre varios servers
● Sistemas cache distribuídas● Problema de conexións simultáneas
![Page 17: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/17.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
17
Sistemas de caché
![Page 18: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/18.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
18
Sistemas de caché
● Hai dous tipos
● Sistemas de caché interna● Sistemas de caché externa
● Para cada un salientamos
● Interna: APC● Externa: Memcache
![Page 19: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/19.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
19
Sistemas de caché e II
● O realmente interesante é ter unha infraestrutura escalonada de sistema de Cache
● Zend Framework fornece un sistema de varias capas onde podes aniñar distintos sistemas de caché segundo a súa velocidade: Zend_Cache– APC– Memcache– Base de datos– Cache de sistema de ficheiros– Personalizadas
![Page 20: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/20.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
20
APC (Alternative PHP Caché)
● A partir de PHP 5.4 será incluído no paquete base de PHP polo que podedes empregalo sen instalación algunha
● Para todo lo demás: usade pecl
● Api moi sinxela:
● apc_exists()● apc_add()● apc_fetch()
![Page 21: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/21.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
21
Memcache
● Agnóstico á lingua de programación
● Sistema totalmente distribuído
● Permite ter un banco de memoria (pares chave-valor) do tamaño que queirades nunha máquina externa que comparte recursos a varios servers
● Permite multiserver e multiclientes
● Api moi sinxela:
● Memcache::connect, conexión inicial ao porto 11211● Memcache::set● Memcache::get
![Page 22: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/22.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
22
Sistemas de plantillas
![Page 23: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/23.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
23
Sistemas de plantillas
● Hai moita controversia co sistema de plantillas
● Moitas persoas prefiren empregar PHP misturado con HTML
● Outras moitas empregan un sistema de plantillas● Todo depende das vosas necesidades porén eu
prefiro empregar un sistema de plantillas
● Vantaxes: sistemas de caching e compilación a opcode das plantillas, etc, etc, etc
● Desvantaxes: obrigan a aprender unha nova sintaxe e distintas API.
![Page 24: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/24.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
24
Smarty 3
● Para min e a unha solución definitiva
● Baixo as miñas probas
● Incremento de rendemento do 30% fronte a Smarty 2
● Incremento de rendemento do 15% fronte a uso de PHP embembed – Logo de que Smarty compile as vistas a PHP
● Incremento de rendemento do 40% fronte a uso de PHP Embembed– Logo que Smarty compile as vistas a OpCode
![Page 25: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/25.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
25
Smarty 3 características
● Olvidádevos de Smarty 2 (cousa do pasado, 3 meses)
● Características:
● Template inheritance● Sistema de cache por grupos● Compilación a OpCode● Compilación a PHP optimizado● Totalmente extensíbel● Facilita a reutilización de partials● Sistema bastante bo de plugins (non orientado a obxectos!!!)
![Page 26: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/26.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
26
Caché, caché, caché
● Para o caso das plantillas con partes dinámicas
● Tipico: Hola {$nome_do_usuario}● Tentade compilar a OpCode con servers
especializados como Zend Server (aviso $$$)● Para o caso de plantillas estáticas
● Compilade todo a html estático escribindo en filesystem ou memcache
● Incluso podedes empregar este sistema para cachear fragmentos (partials)
![Page 27: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/27.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
27
Clustering
![Page 28: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/28.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
28
Sistemas de clustering
● Sodes desenvolvedores, non perdades tempo en administración de sistemas
● O mellor é empregar sistemas que poidan autoescalar
● Eu recomendo EC2 combinado con S3 de Amazon● E se o presuposto o permite empregade Akamai.
![Page 29: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/29.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
29
Apps na nube
● Como fago que o meu App poida empregar clustering ou poida correr na nube?
● Realmente non cambia moito da infraestrutura que tes sempre que empregues as anteriores suxestións– Caches distribuídas– Conversión a estáticos e Opcode– Diferencia de servidores de aplicativos
vs servidores de estáticos
![Page 30: Como facer PHP fodidamente rápido](https://reader031.fdocument.pub/reader031/viewer/2022013118/559703051a28ab624f8b4675/html5/thumbnails/30.jpg)
Este traballo ten a licenza Creative Commons Atribución 3.0.Para ver unha copia da licenza visite http://tinyurl.com/2v352h
30
Preguntas