SlideShare a Scribd company logo
1 of 31
Download to read offline
Como facer apps
fodidamente rápidas: con PHP
     Fran Diéguez – OpenHost
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
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
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
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
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
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
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óns
simultá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
Como simulamos altas taxas de
usuarios?
 ●
     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
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
          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
 ●   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
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
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
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
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
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
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
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
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
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
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
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 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
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
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
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
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
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
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
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

More Related Content

Similar to Como facer apps fodidamente rápidas: con PHP

Estado da tradución ao galego do proxecto GNOME
Estado da tradución ao galego do proxecto GNOMEEstado da tradución ao galego do proxecto GNOME
Estado da tradución ao galego do proxecto GNOMEFran Diéguez
 
Estado da tradución ao galego do proxecto XFCE
Estado da tradución ao galego do proxecto XFCEEstado da tradución ao galego do proxecto XFCE
Estado da tradución ao galego do proxecto XFCEFran Diéguez
 
Estado da tradución ao galego do proxecto opensuse
Estado da tradución ao galego do proxecto opensuseEstado da tradución ao galego do proxecto opensuse
Estado da tradución ao galego do proxecto opensuseFran Diéguez
 
O software libre na sociedade actual
O software libre na sociedade actualO software libre na sociedade actual
O software libre na sociedade actualousli07
 
Entendendo Internet
Entendendo InternetEntendendo Internet
Entendendo InternetMaría L
 
Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015Alberto Permuy Leal
 
Presentación de redes
Presentación de redesPresentación de redes
Presentación de redesBorja1235
 
Primeiros Pasos Para O Manexo Do Software Libre
Primeiros Pasos Para O Manexo Do Software LibrePrimeiros Pasos Para O Manexo Do Software Libre
Primeiros Pasos Para O Manexo Do Software LibreAmador Loureiro Blanco
 
Dev con Joomla componentes modulos plugins
Dev con Joomla componentes modulos pluginsDev con Joomla componentes modulos plugins
Dev con Joomla componentes modulos pluginsousli07
 
Tradución de Aplicacións Software Ceibe
Tradución de Aplicacións Software CeibeTradución de Aplicacións Software Ceibe
Tradución de Aplicacións Software CeibeFran Diéguez
 
Gnu linux1
Gnu linux1Gnu linux1
Gnu linux1aurelio
 

Similar to Como facer apps fodidamente rápidas: con PHP (20)

WPCompostela
WPCompostelaWPCompostela
WPCompostela
 
131119 almacenamento nube_owncloud
131119 almacenamento nube_owncloud131119 almacenamento nube_owncloud
131119 almacenamento nube_owncloud
 
Estado da tradución ao galego do proxecto GNOME
Estado da tradución ao galego do proxecto GNOMEEstado da tradución ao galego do proxecto GNOME
Estado da tradución ao galego do proxecto GNOME
 
Estado da tradución ao galego do proxecto XFCE
Estado da tradución ao galego do proxecto XFCEEstado da tradución ao galego do proxecto XFCE
Estado da tradución ao galego do proxecto XFCE
 
Estado da tradución ao galego do proxecto opensuse
Estado da tradución ao galego do proxecto opensuseEstado da tradución ao galego do proxecto opensuse
Estado da tradución ao galego do proxecto opensuse
 
Software libre
Software libreSoftware libre
Software libre
 
O software libre na sociedade actual
O software libre na sociedade actualO software libre na sociedade actual
O software libre na sociedade actual
 
As tic na aula
As tic na aulaAs tic na aula
As tic na aula
 
Entendendo Internet
Entendendo InternetEntendendo Internet
Entendendo Internet
 
Sistemas operativos 2
Sistemas operativos 2Sistemas operativos 2
Sistemas operativos 2
 
Traballo
Traballo Traballo
Traballo
 
Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015Obradoiro Drupal de 0 a 100 - Vigo 2015
Obradoiro Drupal de 0 a 100 - Vigo 2015
 
Presentación de redes
Presentación de redesPresentación de redes
Presentación de redes
 
Primeiros Pasos Para O Manexo Do Software Libre
Primeiros Pasos Para O Manexo Do Software LibrePrimeiros Pasos Para O Manexo Do Software Libre
Primeiros Pasos Para O Manexo Do Software Libre
 
Sistemas Operativos 2
Sistemas Operativos 2Sistemas Operativos 2
Sistemas Operativos 2
 
Dev con Joomla componentes modulos plugins
Dev con Joomla componentes modulos pluginsDev con Joomla componentes modulos plugins
Dev con Joomla componentes modulos plugins
 
Drupal2
Drupal2Drupal2
Drupal2
 
Tradución de Aplicacións Software Ceibe
Tradución de Aplicacións Software CeibeTradución de Aplicacións Software Ceibe
Tradución de Aplicacións Software Ceibe
 
Gnu linux1
Gnu linux1Gnu linux1
Gnu linux1
 
Ponencia Drupal
Ponencia DrupalPonencia Drupal
Ponencia Drupal
 

Como facer apps fodidamente rápidas: con PHP

  • 1. Como facer apps fodidamente rápidas: con PHP Fran Diéguez – OpenHost
  • 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. 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. 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. 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. 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. 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. Este traballo ten a licenza Creative Commons Atribución 3.0. 8 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 9. Problema de conexións simultá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. Como simulamos altas taxas de usuarios? ● 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. 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 Este traballo ten a licenza Creative Commons Atribución 3.0. 11 Para ver unha copia da licenza visite http://tinyurl.com/2v352h
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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