Como facer PHP  fodidamente rápidoFran Diéguez – OpenHost && Mabishu
Sobre min      Este traballo ten a licenza Creative Commons Atribución 3.0.2     Para ver unha copia da licenza visite htt...
Fran Diéguez    ●        Traballo en OpenHost e na OSL da USC    ●        Desenvolvedor web de aplicativos con altas      ...
Que imos ver?    ●        Consideracións que poucos saben e como        atallalas    ●        Sistemas de cache    ●      ...
Consideracións que poucos saben    e como atallalas      Este traballo ten a licenza Creative Commons Atribución 3.0.5    ...
Principais lugares de bottlenecks    ●        Sistemas de ficheiros    ●        Conexións simultáneas    ●        Memoria ...
Sistemas de ficheiros    ●        Se usades Linux nos vosos servers tedes que        ter en conta as restricións dos FS:  ...
Este traballo ten a licenza Creative Commons Atribución 3.0.8   Para ver unha copia da licenza visite http://tinyurl.com/2...
Problema de conexiónssimultáneas●   Se temos poucas conexións    (usuarios concurrentes) o noso    script PHP usará menos ...
Como simulamos altas taxas deusuarios? ●     Hai moitas ferramentas     ●         Ab do Proxecto Apache     ●         Http...
Servidores de aplicativo vsservidores de estáticos ●     É moi importante ter ben diferenciados os     servidores que serv...
Coding Standards ●     Non teñen relación directa co rendemento da     app     ●         Pero fallos pequenos poden increm...
Máis exemplos●    Uso das funcións de expresións regulares de Perl     ●   Preg_replace     ●   Preg_match     ●   Etc.●  ...
Standard Public Library●    Se queredes facer que PHP vaia máis rápido     ●   POR FAVOR USADE O SPL DE PHP     ●   Son AP...
Usade proffiling●    O proffiling é analizar as chamadas internas da linguaxe e o uso de     memoria de cada unha delas●  ...
En resumo, atacamos así ●     Gardando todo en memoria compartida ●     Crear estáticos ●     Balancear carga entre varios...
Sistemas de caché       Este traballo ten a licenza Creative Commons Atribución 3.0.17     Para ver unha copia da licenza ...
Sistemas de caché ●     Hai dous tipos     ●         Sistemas de caché interna     ●         Sistemas de caché externa ●  ...
Sistemas de caché e II ●     O realmente interesante é ter unha     infraestrutura escalonada de sistema de Cache     ●   ...
APC (Alternative PHP Caché) ●   A partir de PHP 5.4 será     incluído no paquete     base de PHP polo que     podedes empr...
Memcache●    Agnóstico á lingua de programación●    Sistema totalmente distribuído●    Permite ter un banco de memoria (pa...
Sistemas de plantillas       Este traballo ten a licenza Creative Commons Atribución 3.0.22     Para ver unha copia da lic...
Sistemas de plantillas ●     Hai moita controversia co sistema de plantillas     ●         Moitas persoas prefiren emprega...
Smarty 3 ●     Para min e a unha solución definitiva ●     Baixo as miñas probas     ●         Incremento de rendemento do...
Smarty 3 características●    Olvidádevos de Smarty 2 (cousa do pasado, 3 meses)●    Características:     ●   Template inhe...
Caché, caché, caché ●     Para o caso das plantillas con partes dinámicas     ●         Tipico: Hola {$nome_do_usuario}   ...
Clustering      Este traballo ten a licenza Creative Commons Atribución 3.0.27    Para ver unha copia da licenza visite ht...
Sistemas de clustering ●     Sodes desenvolvedores, non perdades tempo     en administración de sistemas ●     O mellor é ...
Apps na nube ●     Como fago que o meu App poida empregar     clustering ou poida correr na nube?     ●         Realmente ...
Preguntas       Este traballo ten a licenza Creative Commons Atribución 3.0.30     Para ver unha copia da licenza visite h...
Upcoming SlideShare
Loading in …5
×

Como facer PHP fodidamente rápido

576
-1

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
576
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Como facer PHP fodidamente rápido

  1. 1. Como facer PHP fodidamente rápidoFran Diéguez – OpenHost && Mabishu
  2. 2. Sobre min Este traballo ten a licenza Creative Commons Atribución 3.0.2 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  3. 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) Este traballo ten a licenza Creative Commons Atribución 3.0.3 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  4. 4. Que imos ver? ● Consideracións que poucos saben e como atallalas ● Sistemas de cache ● Sistemas de plantillas: Smarty 3 (non 2) ● Clustering Este traballo ten a licenza Creative Commons Atribución 3.0.4 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  5. 5. Consideracións que poucos saben e como atallalas Este traballo ten a licenza Creative Commons Atribución 3.0.5 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  6. 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 Este traballo ten a licenza Creative Commons Atribución 3.0.6 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  7. 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. Este traballo ten a licenza Creative Commons Atribución 3.0.7 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  8. 8. Este traballo ten a licenza Creative Commons Atribución 3.0.8 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  9. 9. Problema de conexiónssimultá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 Este traballo ten a licenza Creative Commons Atribución 3.0.9 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  10. 10. Como simulamos altas taxas deusuarios? ● 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) Este traballo ten a licenza Creative Commons Atribución 3.0.10 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  11. 11. Servidores de aplicativo vsservidores 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 Este traballo ten a licenza Creative Commons Atribución 3.0.11 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  12. 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. Este traballo ten a licenza Creative Commons Atribución 3.0.12 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  13. 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 Este traballo ten a licenza Creative Commons Atribución 3.0.13 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  14. 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 Este traballo ten a licenza Creative Commons Atribución 3.0.14 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  15. 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. Este traballo ten a licenza Creative Commons Atribución 3.0.15 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  16. 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 Este traballo ten a licenza Creative Commons Atribución 3.0.16 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  17. 17. Sistemas de caché Este traballo ten a licenza Creative Commons Atribución 3.0.17 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  18. 18. Sistemas de caché ● Hai dous tipos ● Sistemas de caché interna ● Sistemas de caché externa ● Para cada un salientamos ● Interna: APC ● Externa: Memcache Este traballo ten a licenza Creative Commons Atribución 3.0.18 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  19. 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 Este traballo ten a licenza Creative Commons Atribución 3.0.19 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  20. 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() Este traballo ten a licenza Creative Commons Atribución 3.0.20 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  21. 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 Este traballo ten a licenza Creative Commons Atribución 3.0.21 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  22. 22. Sistemas de plantillas Este traballo ten a licenza Creative Commons Atribución 3.0.22 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  23. 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. Este traballo ten a licenza Creative Commons Atribución 3.0.23 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  24. 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 Este traballo ten a licenza Creative Commons Atribución 3.0.24 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  25. 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!!!) Este traballo ten a licenza Creative Commons Atribución 3.0.25 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  26. 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) Este traballo ten a licenza Creative Commons Atribución 3.0.26 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  27. 27. Clustering Este traballo ten a licenza Creative Commons Atribución 3.0.27 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  28. 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. Este traballo ten a licenza Creative Commons Atribución 3.0.28 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  29. 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 Este traballo ten a licenza Creative Commons Atribución 3.0.29 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  30. 30. Preguntas Este traballo ten a licenza Creative Commons Atribución 3.0.30 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×