SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
Optmización de aplicaciones PHP
         (server side)

           por Oriol Jiménez
Optmización de aplicaciones PHP (server side)




               ¿Qué es?

• Optimizar es el proceso de modificar un
  sistema para que este sea más eficaz.
• En aplicaciones web en concreto perseguimos
  el objetivo de:
 • Disminuir el consumo de recursos.
 • Aumentar la velocidad de ejecución.
Optmización de aplicaciones PHP (server side)



        quot;La Web no va!quot;
• Normalmente nadie se preocupa por el
  rendimiento hasta que se convierte en un
  problema, como por la seguridad.
• PHP es un lenguaje perfecto para montar
  startups 2.0 en pocos minutos... pero ¿qué
  pasa si estas startups acaban funcionando?
• Desarrollar sistemas eficientes debería ser una
  premisa ante un desarrollo no una solución a
  un problema.
Optmización de aplicaciones PHP (server side)




    El lado del servidor


• Software servidor
• Sistemas de caché
• Optmizaciones de código (*)
Optmización de aplicaciones PHP (server side)




  Software servidor
“Lo más simple posible”
Optmización de aplicaciones PHP (server side)




Configuración Apache I/II
• Desactivar HostnameLookups y usar siempre
  IPs en Allow y Deny.
• Desactivar .htaccess con quot;AllowOverride
  Nonequot;.
• Options FollowSymLinks.
• Usar un DirectoryIndex lo más corto posible
  sin wildcards.
• Desactivar ExtendedStatus (mod_status).
Optmización de aplicaciones PHP (server side)




Configuración Apache II/II

• ¿Keepalive or not Keepalive? en todo caso con
  un timeout bajo (5 segundos).
• Desactivar los logs (mod_log_config) si no los
  usamos, que se encargue el cliente (Google
  Analytics).
• Desactivar todos los módulos que no usamos.
Optmización de aplicaciones PHP (server side)




 Configuración PHP I/II

• Relacionadas con los recursos del sistema:
 • max_execution_time
 • max_input_time
 • memory_limit
 • output_buffering
Optmización de aplicaciones PHP (server side)




Configuración PHP II/II
• Para aumentar el rendimiento desactivar:
 • register_globals
 • magic_quotes_*
 • expose_php
 • register_argc_argv
 • always_populate_raw_post_data
• Desactivar el log de errores en producción.
Optmización de aplicaciones PHP (server side)




 Contenido estático I/II

• La combinación Apache+mod_php es una de
  las mejores y más rápidas para servir
  contenido dinámico.
• Para servir contenido estático existen otras
  opciones mucho más ligeras:
  • Lighhtpd, Boa, Tux, Thttpd, LiteSpeed, ...
Optmización de aplicaciones PHP (server side)




Contenido estático II/II
• De todos ellos Tux y Lighttpd son ahora
  mismo los ganadores en velocidad.
• Lighttpd es la mejor opción por posibilidades
  de configuración, portabilidad, etc. (incluso
  para ejecutar PHP vía FastCGI).
• Aunque no se tengan varios servidores es una
  opción igualmente recomendable.
Optmización de aplicaciones PHP (server side)




Separar el contenido I/II
• Usando directorios (/images, /css, etc.):
 • Es lo más común y también lo más costoso
    de separar.
 • Podemos hacerlo con mod_rewrite:
     RewriteRule ^/(.*.(png|gif|jpg))
       http://static/$1 [NC,P,L]
     RewriteRule ^/(.*)
       http://dynamic/$1 [P,L]
Optmización de aplicaciones PHP (server side)




 Separar contenido II/II

• Usando subdominios:
 • Lo más fácil y eficaz.
 • Al subdominio se le asigna la IP del servidor
    de contenido estático.
  • Se puede usar un mismo servidor con varias
    tarjetas de red o usando un firewall.
Optmización de aplicaciones PHP (server side)




    Comprimir la salida
• Ventajas:
 • Reduce el tráfico de red (ancho de banda).
 • Reduce el tiempo de carga de la página para
    los usuarios. La página se reduce hasta 8
    veces.
• Desventajas:
 • Aumenta el consumo de CPU dependiendo
    del nivel de compresión. El nivel 1 ofrece 4X
    y un consumo aceptable.
Optmización de aplicaciones PHP (server side)




    ¿Cómo comprimir?
• Usando el módulo mod_deflate del Apache:
   AddOutputFilterByType DEFLATE text/
   html text/plain text/xml

• Usando PHP:
 • Vía PHP.ini:
     zlib.output_compression=1

 • Cambiando el handler del output buffer:
     ob_start(‘ob_gzhandler’);
Optmización de aplicaciones PHP (server side)




Cambiar el sesión handler
• El manejador de sesiones de PHP por defecto
  trabaja con disco. Alternativas más rápidas:
 • RAM disk del SO.
 • Memoria compartida:
  • mm
  • apc
  • memcache
Optmización de aplicaciones PHP (server side)




        Caché
quot;¿Porqué hacer lo mismo
   más de una vez?quot;
Optmización de aplicaciones PHP (server side)




    Concepto de caché
• Una caché son datos duplicados de otros
  originales donde los datos originales son
  costosos de acceder en tiempo y/o recursos.
• Las estrellas invitadas:
 • APC
 • Memcache
 • Squid
Optmización de aplicaciones PHP (server side)




      Usos de la caché
• En el desarrollo en PHP normalmente nos
  interesará guardar en la caché:
 • Una página completa para no volver a
    generarla.
 • Trozos estáticos de webs semi-dinámicas.
 • Resultados de consultas a BBDD u otros
    datos.
 • El código ya compilado para no volver a
    procesarlo. (*)
Optmización de aplicaciones PHP (server side)




¿Dónde guardar la caché?


• Bases de datos (BBDD)
• Disco duro (HD)
• Memoria compartida (SHM)
Optmización de aplicaciones PHP (server side)




  Memoria compartida

• Memoria accesible por varios procesos
  simultáneamente con el objetivo de
  comunicarse.
• En nuestro caso permite que varios procesos
  del Apache accedan a los mismos datos.
Optmización de aplicaciones PHP (server side)




 Configurar la memoria
• Para usar correctamente la memoria
  compartida necesitamos ajustar el SO:
 • FreeBSD:
     # sysctl kern.ipc.shmmax
     # sysctl kern.ipc.shmall

 • Linux:
     # cat /proc/sys/kernel/shmmax
     # cat /proc/sys/kernel/shmall
Optmización de aplicaciones PHP (server side)




                  APC
• Caché de opcode para PHP: No tener que
  procesar el código PHP en cada petición:
 • Ahorra accesos a disco al leer de memoria
    el código quot;compiladoquot;.
 • Ahorra la memoria usada en el procesado
    del código.
 • Reduce hasta un 400% el tiempo de
    respuesta.
• Ofrece una API para trabajar con SHM.
Optmización de aplicaciones PHP (server side)




Configuración del APC I/II
 • Activación de la extensión:
     extension=apc.so

 • Directivas destacables del APC:
     apc.enabled=1
     apc.shm_segments=1
     apc.shm_size=128
Optmización de aplicaciones PHP (server side)




Configuración del APC II/II

 • Para controlar que archivos guardamos
   compilados:
    apc.cache_by_default=On
    apc.filters=quot;quot;
    apc.max_file_size=1M
    apc.stat=1
Optmización de aplicaciones PHP (server side)




 Usando la API de APC
• Guardar un dato:
   apc_store('key',serialize($obj),
   3600);

• Recuperar un dato:
   $result = unserialize(apc_fetch
   ('key'));

• Borrar un dato:
   apc_delete('key');
Optmización de aplicaciones PHP (server side)




   Administrar APC I/II

• Tenemos algunas funciones para consultar
  información del APC:
 • apc_cache_info()
 • acp_sma_info()
• También dispone de una fantástica
  administración vía web
Optmización de aplicaciones PHP (server side)




Administrar APC II/II
Optmización de aplicaciones PHP (server side)




           Memcached
• Es un sistema de caché de objetos en
  memoria distribuida.
• Pensado originalmente para reducir la carga de
  BBDD de LiveJournal.
• La cache es accesible desde distintos
  servidores.
• Sigue una estructura LRU con el añadido de
  tiempos de expiración.
• (Opcional) Tugela: lo mismo pero contra disco.
Optmización de aplicaciones PHP (server side)




Instalación de Memcached

 • Iniciamos el servidor:
     # memcached -d -m 512 -l 127.0.0.1
     -p 11211 -u www

 • Cargamos la extensión PECL:
     extension=memcache.so
Optmización de aplicaciones PHP (server side)




Usando memcached I/II
• Conectarse al servidor de caché:
   memcache = new Memcache;

   $memcache->connect('localhost', 11211) or die
   (quot;No se pudo conectarquot;);

• Guardar un objeto en la caché:
   $memcache->set('key', $obj, false, 10) or die
   (quot;Fallo al guardarquot;);

• Recuperar el objeto:
   $result = $memcache->get('key');
Optmización de aplicaciones PHP (server side)




Usando memcached II/II

• Las keys como máximo son de 250 carácteres
  y un dato guardado no puede ocupar más de 1
  MB.
• Para distribuir la caché entre distintos
  servidores se ha de implementar un sistema
  propio.
Optmización de aplicaciones PHP (server side)




      Caché de usuario
• Ventajas:
 • Reduce el tráfico de red. No se envía nada al
    cliente
 • No consume recursos de servidor de
    ningún tipo
 • Reduce la latencia. El navegador responde
    directamente
• La desventaja es que no la controlamos.
Optmización de aplicaciones PHP (server side)




     Headers de caché

• Fijar el tiempo de caché deseado:
 • HTTP 1.0
      header('Expires: '.date());

  • HTTP 1.1
      hedaer('Cache-Control: max-
      age=3600, must-revalidate');
Optmización de aplicaciones PHP (server side)




 Caché web vía headers
• Utilizar URLs únicas. Una URL siempre sirve el
  mismo contenido.
• Utilizar librerías comunes de imágenes, css, js,
  etc.
• Minimizar el uso de SSL.
• Hacer fácilmente variables los enlaces a
  elementos:
    <script src=quot;http://phpbsd.net/js/
    func.js?v=123quot;></script>
Optmización de aplicaciones PHP (server side)




       Acelerador web
• Se instalan delante de los servidores web.
• Cachean las peticiones de los usuarios
  siguiendo las headers HTTP.
• Es una de las caches más cómodas para un
  programador pero también muy peligrosa.
• Tenemos varias opciones: Squid, Apache,
  Lighttpd,Varnish.
• Squid es el más anciano y también el más
  usado (flickr, wikipedia, etc.).
Optmización de aplicaciones PHP (server side)




Caché con handler de 404
 • Se trata de generar archivos .html bajo
   demanda:
   • En el HTML siempre enlazamos archivos
     con la extensión .html.
   • El servidor web ha de ejecutar un script en
     el caso de no encontrar un archivo (404).
   • Ese script genera el contenido solicitado.
   • Las siguientes peticiones accederán
     directamente al .html.
Optmización de aplicaciones PHP (server side)




Usar la caché con 404 I/II

• Configuramos el Apache:
ErrorDocument 404 genera_pagina.php

• Mantenimiento de la caché:
# find /web -mtime +1h -print0 | xargs
-0 rm -f
Optmización de aplicaciones PHP (server side)




Usar la caché con 404 II/II

 • Añadir el código necesario:
 $pagina = array_pop(explode('/',$_SERVER
 ['REQUEST_URI']));

 ob_start();

 echo 'hola';$contenido = ob_get_contents();

 file_put_contents($pagina,$contenido);

 ob_end_flush();
Optmización de aplicaciones PHP (server side)




Otras opciones de caché
• Pre-genración de páginas.
• Directamente desde PHP guardar a disco, bd,
  o shm (shmop):
 • Mediante el output buffer páginas completas
    o trozos de ellas.
 • Variables serializadas con cualquier dato.
• PEAR Cache_Lite: serializando a disco
  cómodamente.
Optmización de aplicaciones PHP (server side)




Optimizaciones de código
      continuará...
Optmización de aplicaciones PHP (server side)




              Gracias!!

• Presentada por Oriol Jiménez.
• Todo el material en http://phpbarcelona.org
• Patrocinadores:

Más contenido relacionado

La actualidad más candente

La actualidad más candente (12)

Tuning Lamp
Tuning LampTuning Lamp
Tuning Lamp
 
Optimización Servidor Web
Optimización Servidor WebOptimización Servidor Web
Optimización Servidor Web
 
Taller de samba
Taller de sambaTaller de samba
Taller de samba
 
Error en el tsm debido a falta de espacio en la base de datos
Error en el tsm debido a falta de espacio en la base de datosError en el tsm debido a falta de espacio en la base de datos
Error en el tsm debido a falta de espacio en la base de datos
 
Scalability Code Camp 2011
Scalability Code Camp 2011Scalability Code Camp 2011
Scalability Code Camp 2011
 
[Run Reloaded] IIS 7.5 - El webserver todo terreno (Juan Ladetto + José Luis ...
[Run Reloaded] IIS 7.5 - El webserver todo terreno (Juan Ladetto + José Luis ...[Run Reloaded] IIS 7.5 - El webserver todo terreno (Juan Ladetto + José Luis ...
[Run Reloaded] IIS 7.5 - El webserver todo terreno (Juan Ladetto + José Luis ...
 
0 entorno php
0 entorno php0 entorno php
0 entorno php
 
Entorno PHP
Entorno PHPEntorno PHP
Entorno PHP
 
Configurando un servidor para Moodle
Configurando un servidor para MoodleConfigurando un servidor para Moodle
Configurando un servidor para Moodle
 
Cassandra y php para desarrolladores sql
Cassandra y php para desarrolladores sqlCassandra y php para desarrolladores sql
Cassandra y php para desarrolladores sql
 
Servidor web ironwall
Servidor web ironwallServidor web ironwall
Servidor web ironwall
 
Que es php
Que es phpQue es php
Que es php
 

Destacado

Varnish para meros mortales
Varnish para meros mortalesVarnish para meros mortales
Varnish para meros mortalesMartín .
 
Aplicaciones PHP para empresas (PHPBarcelona en Lancelona)
Aplicaciones PHP para empresas (PHPBarcelona en Lancelona)Aplicaciones PHP para empresas (PHPBarcelona en Lancelona)
Aplicaciones PHP para empresas (PHPBarcelona en Lancelona)Oriol Jiménez
 
Curso PHP Academia Usero
Curso PHP Academia UseroCurso PHP Academia Usero
Curso PHP Academia UseroIES Kursaal
 
IDEs PHP (PHPBarcelona en Lancelona)
IDEs PHP (PHPBarcelona en Lancelona)IDEs PHP (PHPBarcelona en Lancelona)
IDEs PHP (PHPBarcelona en Lancelona)Oriol Jiménez
 
Php basico y avanzado
Php basico y avanzadoPhp basico y avanzado
Php basico y avanzadodrakatiadiaz
 
PHP Avanzado: Características avanzadas de PHP
PHP Avanzado: Características avanzadas de PHPPHP Avanzado: Características avanzadas de PHP
PHP Avanzado: Características avanzadas de PHPRightster
 
PHP Avanzado: Seguridad Web
PHP Avanzado: Seguridad WebPHP Avanzado: Seguridad Web
PHP Avanzado: Seguridad WebRightster
 
PHP Avanzado: Patrones de diseño
PHP Avanzado: Patrones de diseñoPHP Avanzado: Patrones de diseño
PHP Avanzado: Patrones de diseñoRightster
 
Cuaderno de-ejercicios-y-practicas-php
Cuaderno de-ejercicios-y-practicas-phpCuaderno de-ejercicios-y-practicas-php
Cuaderno de-ejercicios-y-practicas-phplgcj1989
 
Users - Desarrollo PHP + MySQL
Users - Desarrollo PHP + MySQLUsers - Desarrollo PHP + MySQL
Users - Desarrollo PHP + MySQLAndrés Pizarro
 
Buenas Prácticas de Programación en PHP
Buenas Prácticas de Programación en PHPBuenas Prácticas de Programación en PHP
Buenas Prácticas de Programación en PHPJesus Castagnetto
 

Destacado (13)

Varnish para meros mortales
Varnish para meros mortalesVarnish para meros mortales
Varnish para meros mortales
 
Aplicaciones PHP para empresas (PHPBarcelona en Lancelona)
Aplicaciones PHP para empresas (PHPBarcelona en Lancelona)Aplicaciones PHP para empresas (PHPBarcelona en Lancelona)
Aplicaciones PHP para empresas (PHPBarcelona en Lancelona)
 
Curso PHP Academia Usero
Curso PHP Academia UseroCurso PHP Academia Usero
Curso PHP Academia Usero
 
IDEs PHP (PHPBarcelona en Lancelona)
IDEs PHP (PHPBarcelona en Lancelona)IDEs PHP (PHPBarcelona en Lancelona)
IDEs PHP (PHPBarcelona en Lancelona)
 
Php basico y avanzado
Php basico y avanzadoPhp basico y avanzado
Php basico y avanzado
 
PHP Avanzado: Características avanzadas de PHP
PHP Avanzado: Características avanzadas de PHPPHP Avanzado: Características avanzadas de PHP
PHP Avanzado: Características avanzadas de PHP
 
PHP Avanzado: Seguridad Web
PHP Avanzado: Seguridad WebPHP Avanzado: Seguridad Web
PHP Avanzado: Seguridad Web
 
Curso Php
Curso PhpCurso Php
Curso Php
 
Php desde cero
Php desde ceroPhp desde cero
Php desde cero
 
PHP Avanzado: Patrones de diseño
PHP Avanzado: Patrones de diseñoPHP Avanzado: Patrones de diseño
PHP Avanzado: Patrones de diseño
 
Cuaderno de-ejercicios-y-practicas-php
Cuaderno de-ejercicios-y-practicas-phpCuaderno de-ejercicios-y-practicas-php
Cuaderno de-ejercicios-y-practicas-php
 
Users - Desarrollo PHP + MySQL
Users - Desarrollo PHP + MySQLUsers - Desarrollo PHP + MySQL
Users - Desarrollo PHP + MySQL
 
Buenas Prácticas de Programación en PHP
Buenas Prácticas de Programación en PHPBuenas Prácticas de Programación en PHP
Buenas Prácticas de Programación en PHP
 

Similar a Optimización de aplicaciones PHP (server side)

Construcción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónConstrucción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónLoja Valle de Tecnología
 
Rendimiento y velocidad en WordPress
Rendimiento y velocidad en WordPress Rendimiento y velocidad en WordPress
Rendimiento y velocidad en WordPress Dani Reguera Bakhache
 
Aceleradores Php Final - Programador PHP
Aceleradores Php Final - Programador PHPAceleradores Php Final - Programador PHP
Aceleradores Php Final - Programador PHPJuan Belón Pérez
 
Aceleradores PHP Final - Programador PHP
Aceleradores PHP Final - Programador PHPAceleradores PHP Final - Programador PHP
Aceleradores PHP Final - Programador PHPJuan Belón Pérez
 
Aceleradores Php Final - Programador PHP
Aceleradores Php Final - Programador PHPAceleradores Php Final - Programador PHP
Aceleradores Php Final - Programador PHPJuan Belón Pérez
 
Rails Against The Machine
Rails Against The MachineRails Against The Machine
Rails Against The Machineguestae6a05
 
Entonamiento y perfilado de Drupal
Entonamiento y perfilado de DrupalEntonamiento y perfilado de Drupal
Entonamiento y perfilado de Drupalcamposer
 
Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magentoOnestic
 
High performance Web Sites
High performance Web SitesHigh performance Web Sites
High performance Web SitesopenfinanceDev
 
Drupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidadDrupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidadIván Campaña Naranjo
 
Charla web performance optimization
Charla   web performance optimizationCharla   web performance optimization
Charla web performance optimizationEsteban Tundidor
 
Introdución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTMLIntrodución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTMLJoaquín Salvachúa
 
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...Luis Bosque
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryGonzalo Chacaltana
 
Taller de optimizacion de servidores web tipo LAMP
Taller de optimizacion de servidores web tipo LAMPTaller de optimizacion de servidores web tipo LAMP
Taller de optimizacion de servidores web tipo LAMPYannick Warnier
 
Sitios web de alto rendimiento y alta disponibilidad
Sitios web de alto rendimiento y alta disponibilidadSitios web de alto rendimiento y alta disponibilidad
Sitios web de alto rendimiento y alta disponibilidadIván Campaña Naranjo
 

Similar a Optimización de aplicaciones PHP (server side) (20)

Performance en Drupal 7
Performance en Drupal 7Performance en Drupal 7
Performance en Drupal 7
 
Construcción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónConstrucción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-Distribución
 
Rendimiento extremo en php
Rendimiento extremo en phpRendimiento extremo en php
Rendimiento extremo en php
 
Rendimiento y velocidad en WordPress
Rendimiento y velocidad en WordPress Rendimiento y velocidad en WordPress
Rendimiento y velocidad en WordPress
 
Aceleradores Php Final - Programador PHP
Aceleradores Php Final - Programador PHPAceleradores Php Final - Programador PHP
Aceleradores Php Final - Programador PHP
 
Aceleradores PHP Final - Programador PHP
Aceleradores PHP Final - Programador PHPAceleradores PHP Final - Programador PHP
Aceleradores PHP Final - Programador PHP
 
Aceleradores Php Final - Programador PHP
Aceleradores Php Final - Programador PHPAceleradores Php Final - Programador PHP
Aceleradores Php Final - Programador PHP
 
Rails Against The Machine
Rails Against The MachineRails Against The Machine
Rails Against The Machine
 
Entonamiento y perfilado de Drupal
Entonamiento y perfilado de DrupalEntonamiento y perfilado de Drupal
Entonamiento y perfilado de Drupal
 
Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magento
 
High performance Web Sites
High performance Web SitesHigh performance Web Sites
High performance Web Sites
 
Drupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidadDrupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidad
 
Charla web performance optimization
Charla   web performance optimizationCharla   web performance optimization
Charla web performance optimization
 
Introdución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTMLIntrodución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTML
 
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluc...
 
Actividad 7
Actividad 7Actividad 7
Actividad 7
 
Curso de php
Curso de phpCurso de php
Curso de php
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-Memory
 
Taller de optimizacion de servidores web tipo LAMP
Taller de optimizacion de servidores web tipo LAMPTaller de optimizacion de servidores web tipo LAMP
Taller de optimizacion de servidores web tipo LAMP
 
Sitios web de alto rendimiento y alta disponibilidad
Sitios web de alto rendimiento y alta disponibilidadSitios web de alto rendimiento y alta disponibilidad
Sitios web de alto rendimiento y alta disponibilidad
 

Último

ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 

Último (19)

ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 

Optimización de aplicaciones PHP (server side)

  • 1. Optmización de aplicaciones PHP (server side) por Oriol Jiménez
  • 2. Optmización de aplicaciones PHP (server side) ¿Qué es? • Optimizar es el proceso de modificar un sistema para que este sea más eficaz. • En aplicaciones web en concreto perseguimos el objetivo de: • Disminuir el consumo de recursos. • Aumentar la velocidad de ejecución.
  • 3. Optmización de aplicaciones PHP (server side) quot;La Web no va!quot; • Normalmente nadie se preocupa por el rendimiento hasta que se convierte en un problema, como por la seguridad. • PHP es un lenguaje perfecto para montar startups 2.0 en pocos minutos... pero ¿qué pasa si estas startups acaban funcionando? • Desarrollar sistemas eficientes debería ser una premisa ante un desarrollo no una solución a un problema.
  • 4. Optmización de aplicaciones PHP (server side) El lado del servidor • Software servidor • Sistemas de caché • Optmizaciones de código (*)
  • 5. Optmización de aplicaciones PHP (server side) Software servidor “Lo más simple posible”
  • 6. Optmización de aplicaciones PHP (server side) Configuración Apache I/II • Desactivar HostnameLookups y usar siempre IPs en Allow y Deny. • Desactivar .htaccess con quot;AllowOverride Nonequot;. • Options FollowSymLinks. • Usar un DirectoryIndex lo más corto posible sin wildcards. • Desactivar ExtendedStatus (mod_status).
  • 7. Optmización de aplicaciones PHP (server side) Configuración Apache II/II • ¿Keepalive or not Keepalive? en todo caso con un timeout bajo (5 segundos). • Desactivar los logs (mod_log_config) si no los usamos, que se encargue el cliente (Google Analytics). • Desactivar todos los módulos que no usamos.
  • 8. Optmización de aplicaciones PHP (server side) Configuración PHP I/II • Relacionadas con los recursos del sistema: • max_execution_time • max_input_time • memory_limit • output_buffering
  • 9. Optmización de aplicaciones PHP (server side) Configuración PHP II/II • Para aumentar el rendimiento desactivar: • register_globals • magic_quotes_* • expose_php • register_argc_argv • always_populate_raw_post_data • Desactivar el log de errores en producción.
  • 10. Optmización de aplicaciones PHP (server side) Contenido estático I/II • La combinación Apache+mod_php es una de las mejores y más rápidas para servir contenido dinámico. • Para servir contenido estático existen otras opciones mucho más ligeras: • Lighhtpd, Boa, Tux, Thttpd, LiteSpeed, ...
  • 11. Optmización de aplicaciones PHP (server side) Contenido estático II/II • De todos ellos Tux y Lighttpd son ahora mismo los ganadores en velocidad. • Lighttpd es la mejor opción por posibilidades de configuración, portabilidad, etc. (incluso para ejecutar PHP vía FastCGI). • Aunque no se tengan varios servidores es una opción igualmente recomendable.
  • 12. Optmización de aplicaciones PHP (server side) Separar el contenido I/II • Usando directorios (/images, /css, etc.): • Es lo más común y también lo más costoso de separar. • Podemos hacerlo con mod_rewrite: RewriteRule ^/(.*.(png|gif|jpg)) http://static/$1 [NC,P,L] RewriteRule ^/(.*) http://dynamic/$1 [P,L]
  • 13. Optmización de aplicaciones PHP (server side) Separar contenido II/II • Usando subdominios: • Lo más fácil y eficaz. • Al subdominio se le asigna la IP del servidor de contenido estático. • Se puede usar un mismo servidor con varias tarjetas de red o usando un firewall.
  • 14. Optmización de aplicaciones PHP (server side) Comprimir la salida • Ventajas: • Reduce el tráfico de red (ancho de banda). • Reduce el tiempo de carga de la página para los usuarios. La página se reduce hasta 8 veces. • Desventajas: • Aumenta el consumo de CPU dependiendo del nivel de compresión. El nivel 1 ofrece 4X y un consumo aceptable.
  • 15. Optmización de aplicaciones PHP (server side) ¿Cómo comprimir? • Usando el módulo mod_deflate del Apache: AddOutputFilterByType DEFLATE text/ html text/plain text/xml • Usando PHP: • Vía PHP.ini: zlib.output_compression=1 • Cambiando el handler del output buffer: ob_start(‘ob_gzhandler’);
  • 16. Optmización de aplicaciones PHP (server side) Cambiar el sesión handler • El manejador de sesiones de PHP por defecto trabaja con disco. Alternativas más rápidas: • RAM disk del SO. • Memoria compartida: • mm • apc • memcache
  • 17. Optmización de aplicaciones PHP (server side) Caché quot;¿Porqué hacer lo mismo más de una vez?quot;
  • 18. Optmización de aplicaciones PHP (server side) Concepto de caché • Una caché son datos duplicados de otros originales donde los datos originales son costosos de acceder en tiempo y/o recursos. • Las estrellas invitadas: • APC • Memcache • Squid
  • 19. Optmización de aplicaciones PHP (server side) Usos de la caché • En el desarrollo en PHP normalmente nos interesará guardar en la caché: • Una página completa para no volver a generarla. • Trozos estáticos de webs semi-dinámicas. • Resultados de consultas a BBDD u otros datos. • El código ya compilado para no volver a procesarlo. (*)
  • 20. Optmización de aplicaciones PHP (server side) ¿Dónde guardar la caché? • Bases de datos (BBDD) • Disco duro (HD) • Memoria compartida (SHM)
  • 21. Optmización de aplicaciones PHP (server side) Memoria compartida • Memoria accesible por varios procesos simultáneamente con el objetivo de comunicarse. • En nuestro caso permite que varios procesos del Apache accedan a los mismos datos.
  • 22. Optmización de aplicaciones PHP (server side) Configurar la memoria • Para usar correctamente la memoria compartida necesitamos ajustar el SO: • FreeBSD: # sysctl kern.ipc.shmmax # sysctl kern.ipc.shmall • Linux: # cat /proc/sys/kernel/shmmax # cat /proc/sys/kernel/shmall
  • 23. Optmización de aplicaciones PHP (server side) APC • Caché de opcode para PHP: No tener que procesar el código PHP en cada petición: • Ahorra accesos a disco al leer de memoria el código quot;compiladoquot;. • Ahorra la memoria usada en el procesado del código. • Reduce hasta un 400% el tiempo de respuesta. • Ofrece una API para trabajar con SHM.
  • 24. Optmización de aplicaciones PHP (server side) Configuración del APC I/II • Activación de la extensión: extension=apc.so • Directivas destacables del APC: apc.enabled=1 apc.shm_segments=1 apc.shm_size=128
  • 25. Optmización de aplicaciones PHP (server side) Configuración del APC II/II • Para controlar que archivos guardamos compilados: apc.cache_by_default=On apc.filters=quot;quot; apc.max_file_size=1M apc.stat=1
  • 26. Optmización de aplicaciones PHP (server side) Usando la API de APC • Guardar un dato: apc_store('key',serialize($obj), 3600); • Recuperar un dato: $result = unserialize(apc_fetch ('key')); • Borrar un dato: apc_delete('key');
  • 27. Optmización de aplicaciones PHP (server side) Administrar APC I/II • Tenemos algunas funciones para consultar información del APC: • apc_cache_info() • acp_sma_info() • También dispone de una fantástica administración vía web
  • 28. Optmización de aplicaciones PHP (server side) Administrar APC II/II
  • 29. Optmización de aplicaciones PHP (server side) Memcached • Es un sistema de caché de objetos en memoria distribuida. • Pensado originalmente para reducir la carga de BBDD de LiveJournal. • La cache es accesible desde distintos servidores. • Sigue una estructura LRU con el añadido de tiempos de expiración. • (Opcional) Tugela: lo mismo pero contra disco.
  • 30. Optmización de aplicaciones PHP (server side) Instalación de Memcached • Iniciamos el servidor: # memcached -d -m 512 -l 127.0.0.1 -p 11211 -u www • Cargamos la extensión PECL: extension=memcache.so
  • 31. Optmización de aplicaciones PHP (server side) Usando memcached I/II • Conectarse al servidor de caché: memcache = new Memcache; $memcache->connect('localhost', 11211) or die (quot;No se pudo conectarquot;); • Guardar un objeto en la caché: $memcache->set('key', $obj, false, 10) or die (quot;Fallo al guardarquot;); • Recuperar el objeto: $result = $memcache->get('key');
  • 32. Optmización de aplicaciones PHP (server side) Usando memcached II/II • Las keys como máximo son de 250 carácteres y un dato guardado no puede ocupar más de 1 MB. • Para distribuir la caché entre distintos servidores se ha de implementar un sistema propio.
  • 33. Optmización de aplicaciones PHP (server side) Caché de usuario • Ventajas: • Reduce el tráfico de red. No se envía nada al cliente • No consume recursos de servidor de ningún tipo • Reduce la latencia. El navegador responde directamente • La desventaja es que no la controlamos.
  • 34. Optmización de aplicaciones PHP (server side) Headers de caché • Fijar el tiempo de caché deseado: • HTTP 1.0 header('Expires: '.date()); • HTTP 1.1 hedaer('Cache-Control: max- age=3600, must-revalidate');
  • 35. Optmización de aplicaciones PHP (server side) Caché web vía headers • Utilizar URLs únicas. Una URL siempre sirve el mismo contenido. • Utilizar librerías comunes de imágenes, css, js, etc. • Minimizar el uso de SSL. • Hacer fácilmente variables los enlaces a elementos: <script src=quot;http://phpbsd.net/js/ func.js?v=123quot;></script>
  • 36. Optmización de aplicaciones PHP (server side) Acelerador web • Se instalan delante de los servidores web. • Cachean las peticiones de los usuarios siguiendo las headers HTTP. • Es una de las caches más cómodas para un programador pero también muy peligrosa. • Tenemos varias opciones: Squid, Apache, Lighttpd,Varnish. • Squid es el más anciano y también el más usado (flickr, wikipedia, etc.).
  • 37. Optmización de aplicaciones PHP (server side) Caché con handler de 404 • Se trata de generar archivos .html bajo demanda: • En el HTML siempre enlazamos archivos con la extensión .html. • El servidor web ha de ejecutar un script en el caso de no encontrar un archivo (404). • Ese script genera el contenido solicitado. • Las siguientes peticiones accederán directamente al .html.
  • 38. Optmización de aplicaciones PHP (server side) Usar la caché con 404 I/II • Configuramos el Apache: ErrorDocument 404 genera_pagina.php • Mantenimiento de la caché: # find /web -mtime +1h -print0 | xargs -0 rm -f
  • 39. Optmización de aplicaciones PHP (server side) Usar la caché con 404 II/II • Añadir el código necesario: $pagina = array_pop(explode('/',$_SERVER ['REQUEST_URI'])); ob_start(); echo 'hola';$contenido = ob_get_contents(); file_put_contents($pagina,$contenido); ob_end_flush();
  • 40. Optmización de aplicaciones PHP (server side) Otras opciones de caché • Pre-genración de páginas. • Directamente desde PHP guardar a disco, bd, o shm (shmop): • Mediante el output buffer páginas completas o trozos de ellas. • Variables serializadas con cualquier dato. • PEAR Cache_Lite: serializando a disco cómodamente.
  • 41. Optmización de aplicaciones PHP (server side) Optimizaciones de código continuará...
  • 42. Optmización de aplicaciones PHP (server side) Gracias!! • Presentada por Oriol Jiménez. • Todo el material en http://phpbarcelona.org • Patrocinadores: