• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Como facer PHP fodidamente rápido
 

Como facer PHP fodidamente rápido

on

  • 686 views

 

Statistics

Views

Total Views
686
Views on SlideShare
685
Embed Views
1

Actions

Likes
0
Downloads
3
Comments
0

1 Embed 1

http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Como facer PHP fodidamente rápido Como facer PHP fodidamente rápido Presentation Transcript

    • 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 http://tinyurl.com/2v352h
    • 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
    • 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
    • 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
    • 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
    • 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
    • Este traballo ten a licenza Creative Commons Atribución 3.0.8 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • Clustering Este traballo ten a licenza Creative Commons Atribución 3.0.27 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
    • 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
    • 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
    • Preguntas Este traballo ten a licenza Creative Commons Atribución 3.0.30 Para ver unha copia da licenza visite http://tinyurl.com/2v352h