Como facer apps fodidamente rápidas: con PHP

571 views
483 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
571
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Como facer apps fodidamente rápidas: con PHP

  1. 1. Como facer appsfodidamente rápidas: con PHP Fran Diéguez – OpenHost
  2. 2. Sobre min Este traballo ten a licenza Creative Commons Atribución 3.0.2 tt Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  3. 3. Ola, son Fran● 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)● Membro de GNOME pola GNOME Foundation● Contacto ● fran@openhost.es ● frandieguez@gnome.org 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 ● Que fai lento o meu aplicativo!! ● Consideracións que poucos saben e como atallalas ● Sistemas de plantillas: Smarty 3 (non 2) ● Sistemas de cache ● Apps na nube: Clustering, balanceo, CDN, ... 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. Que fai lento o meu aplicativo Este traballo ten a licenza Creative Commons Atribución 3.0.5 tt Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  6. 6. Bottlenecks: os inimigos ● Sistemas de ficheiros ● Conexións simultáneas ● Xestión de memoria do sistema ● Servidores de app vs servidores de apps ● 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 xestión 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● Configuración de Apache● Se temos poucas conexións (usuarios concurrentes) o noso script PHP usará menos memoria compartida● Pero 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 ● Httperf de HP, un manual moi chulo ● Ab do Proxecto Apache ● ... ● 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 ● Batalla de mínimos (pero que suman) ● Non teñen relación directa co rendemento da app. ● Pero fallos pequenos incrementan as chamadas internas do parser de PHP ● Incrementa chamadas a error handlers. ● 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 en PHP● 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, e PHP 5.4 promete un 35% de ganancia de rendemento 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: ● Parseo de XML optimizado ● Iteradores de Obxectos, Arrays, Ficheiros, Directorios ● 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 e tempos de execución 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, atallamos así ● Estáticos en servers distintos aos de app ● Gardando todo o preciso en memoria compartida ● Crear estáticos ● Balancear carga entre varios servers ● Sistemas cache distribuídas ● Ter en conta o 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. Caché e Sistemas de caché Este traballo ten a licenza Creative Commons Atribución 3.0.17 tt Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  18. 18. Tipos de caché ● Principalmente categorízanse en: ● Caché de páxina ● Caché de fragmentos ● Caché de accións 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é ● 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.19 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  20. 20. 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.20 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  21. 21. APC (Alternative PHP Cache)● 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 ou paquetería do voso SO.● Api moi sinxela: ● apc_add() ● apc_exists() ● apc_fetch() 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. Memcache● Agnóstico á lingua de programación● Sistema totalmente distribuído● Permite multiserver e multiclientes● Permite ter un banco de memoria (pares chave-valor) do tamaño que queirades, nunha máquina externa que comparte recursos a varios servers● 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.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 en PHP● Olvidádevos de Smarty 2 (cousa do pasado, 6 meses)● Características: ● Sistema de cache por grupos ● Compilación a OpCode ● Compilación a PHP optimizado ● Totalmente extensíbel ● Facilita a reutilización de partials ● Template inheritance ● Sistema bastante bo de plugins (non orientado a obxectos!!!) 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 ● 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.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 ● Tentade compilar a OpCode con servers especializados como Zend Server (aviso $$$) ● Para o caso de plantillas estáticas ● Tipico: Hola {$nome_do_usuario} ● 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 e apps na nube Este traballo ten a licenza Creative Commons Atribución 3.0.27 tt Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  28. 28. Clustering e apps na nube ● Ao final todo se reduce a: ● Externalizar recursos ● Especializar servers por uso dos mesmos – Estáticos – Memoria compartida – Sesións – Execución do app – Load balancers e proxies inversos 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. 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.29 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  30. 30. 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 ● O IMPORTANTE É EXTERNALIZAR RECURSOS ● 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.30 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  31. 31. Preguntas Este traballo ten a licenza Creative Commons Atribución 3.0.31 tt Para ver unha copia da licenza visite http://tinyurl.com/2v352h

×