Drupal Performance
Karim Boudjema
Fernando Paredes
1. Importancia del rendimiento (Fer) 2. Rendimiento - Escalabilidad (K) 3. Caching (Fer) 4. Tipos de memoria caché: Servidor Web, PHP, Drupal y
Base de datos (K) 6. Testing JM Meter - XHProf- AB - Devel (K) 7. Optimizar el código PHP (APC+buenas praticas) (Fer) 8. Core Cache De Drupal (tablas + configuración) (K) 9. APC, Memcache, File (Fer) 10. Boost (K) 11. Demo y Conclusiones (K)
Indice
Karim Boudjema (KarimB)
Drupal themer and developer
Con Drupal desde 2008
Miembro activo de Drupal Bolivia y Drupal Belgium
Especialidades: Text Mining (NLP), Periódicos online
Drupal Blog:
http://www.webenstock.com
Acerca de Fernando Paredes García
Trabajo
Technical Leader
ComunidadFundador de Drupal Perú
http://drupal.org/user/125473
@develCuyFacebook, Twitter, Identi.ca
http://develcuy.com
¿Por qué és importante el rendimiento en Drupal?
1. Afecta la experiencia del usuario
2. SEO, los buscadores han comenzado a despriorizar las páginas web lentas
3. La arquitectura puede verse muy afectada con tal de conseguir mejor rendimiento.
40% de los usuarios deciden abandonar una página web si la carga supera los 3 segundos
SatisfechoInsatisfecho
73% de los usuarios de dispositivos móviles consideran que su experiencia es todavía muy lenta
SatisfechoInsatisfecho
79% de los usuarios insatisfechos con el rendimiento de una tienda on-line prefieren comprar en otro lado la próxima vez
SatisfechoInsatisfecho
Conclusión
No importa cuan asombrosa sea una página web, si es lenta entonces el usuario
insatisfecho ni alcanzará a verla o nunca más volverá, incluido el usuario “indexador web”.
El desafío és proveer contenidos, formatos y funcionalidades sin afectar el rendimiento.
El rendmiento está dirigido por la arquitectura (architecture driven)
Escalabilidad◦El sistema puede acomodarse al incremento
de su uso su volumen de datos
Rendimiento ◦ Tiempo de respuesta del servidor + tiempo de
carga de la página ‘Que tan rápido se carga la página?’
Performance Vs Escalabilidad
Front End Vs Back EndDel Top 50 de los sitios de AL, todos
los sitios toman menos del 14% del
tiempo de carga total, para obtener el
documento HTML.
El 86% restante es para obtener los
documentos vinculados al documento
HTML como CSS, JS, imágenes.
Una clave de la performance se
encuentra en la optimización del
Front End.
elcomercio.pe - HTML = 622ms (3%) – Documents: 19852 ms
La Memoria Caché
¿Qué és la memoria caché?
"Es un conjunto de datos duplicados de otros originales, con la propiedad de que los datos originales son costosos de acceder, normalmente en tiempo, respecto a la copia en la caché.
Cuando se accede por primera vez a un dato, se hace una copia en el caché; los accesos siguientes
se realizan a dicha copia, haciendo que el tiempo de acceso [...] al dato sea menor."- Wikipedia
¿Cómo se usa la memoria caché en Drupal?
Cachévacía
Cachéllena
PHPAPACHE
LINUX
Browser
CacheCDN Revers
e proxy
MODExpiresDeflate
OpCodeCache
Cache engine
QueryCache
MySQLSQL Queries
Boost
Stack Cache
No podemos implementar políticas de rendimiento sin una evaluación.
Apache Bench (AB) Devel Jmeter XHProf (Ahora integrado a devel)
On line tools:◦ Load Storm: http://loadstorm.com/◦ Monitis: http://portal.monitis.com/
Here comes your footer Page 16
Como evaluar nuestro rendimiento
◦ Fácil, simple y todos lo tenemos instalado
◦ ab -c 1 -n 100 http://example.dev/◦ ab -c 1 -n 100 –C PHPSESSID=<sessid> http://example.dev/
◦ Donde -c = concurrencia de los requerimientos -n = total de requerimientos a la pagina
◦ En este caso haremos 100 requermientos a la página http://example.dev/
◦ Un solo indicador: ‘Requests per second’
◦ Evaluaremos nuestras distintas políticas de caché con este indicador
Evaluar: Apache Bench (AB)
Permite evaluar para una página:◦ Mysql
# total de consultas Tiempos total para todas las consultas en ms Ver las consultas más lentas Para cada consulta
Tiempo de realización en ms # de veces que la consulta ha sido realizada Ver EXPLAIN
◦ Página Tiempo total de carga de la página en ms
◦ Hacer la diferencia entre la performance de Mysql y del resto de la página
◦ Uso de la Memoria Para configurar
◦ Configuation >Development > Devel Settings
Evaluar: Devel (1)
Performance Logging◦ Ya no es parte del módulo devel desde 07/2011◦ Será parte del módulo Performance:
http://drupal.org/project/performance ◦ Podemos utilizar Profiling
http://drupal.org/project/profiling
Evaluar: Devel (2)
Buenas Prácticas para aprovechar la memoria caché
¿Qué és una buena práctica?“¿És lo que la gente usualmente
considera la forma apropiada de hacer algo?
¿Hay una forma "usual", es decir, una forma generalmente aceptada?
¿Se endiente como la forma “apropiada”? Si podemos responder esto afirmativamente, entonces tenemos una Buena Práctica.” (traducido)- The IT Skeptic
Práctica #1: Asegúrate que tu equipo entienda acerca de la caché
En el código fuente de Drupal, la caché se guarda en dos lugares diferentes:
- La memoria estática de PHP- La caché de Drupal
Práctica #2: Usa la memoria estática de PHP para guardar la caché<?php
function phpmemory_set() { static $value; if (!isset($value)) { $value = "gran cantidad de datos"; } return $value; }?>
Práctica #3: Usa la cache de Drupal<?phpfunction drupalmemory_set() { $cache = cache_get('value'); if (empty($cache->data)) { $value = "gran cantidad de datos"; cache_set($value, 'value'); } else { $value = $cache->data; } return $value; }?>
Práctica #4: Combinar cachés: Cache+Cache = Mejor rendimiento<?php static $value; if (!isset($value)) { $cache = cache_get('value'); if (empty($cache->data)) { $value = "gran cantidad de datos"; cache_set($value, 'value'); } else { $value = $cache->data; } } return $value;?>
Evita múltiples consultas a la base de datos
Sirve sobre todo para los usuarios anónimos
Conocer cada tabla nos permitirá elegir los bins con los distintos cache engine (memcache, file, apc)
Nos permite ganar 500% a 700% de performance para usuarios no autenticados
En D7 tenemos nuevas tablas
El cache del core de Drupal
El sistema de caché de Drupal almacena sus datos en las siguientes tablas de la base de datos:
El cache del core de Drupal
Por defecto
1. cache – Conf. de los modules, schemas, themes ect.2. cache_bootstrap – variables y información durante el
bootstrap3. cache_field – fields de las entidades4. cache_images – imágenes procesadas5. cache_path – URL alias6. cache_menu – registra una copia de los menús y de
las URLs asociadas a estos menús7. cache_filter – registra una copia del contenido de
nuestros nodos filtrados8. cache_form – registra una copia de los formularios del
sitio 9. cache_update – registra los updates disponibles
Configurable
1. cache_page – registra una copia completa de del código html de las paginas pero solo para usuarios no autenticados.
2. cache_block – registra una copia de los bloques
Vamos en Configuration > Development > Performance Caché de páginas
◦ Mínimo de permanencia en cache de Drupal◦ Máximo de permanencia en cache externo◦ Compresión de páginas: siempre mejor con Apache
Para ver si nuestro server ya realiza la compresión: http://www.whatsmyip.org/http_compression/
Caché de bloques◦ No lo necesitamos para usuarios no autenticados
Optimizaciones del ancho de banda◦ Optimizar archivos CSS: Activado (solo en producción)◦ Optimizar archivos JavaScript: Activado (solo en prod.)
El cache del core de Drupal
Motores de Memoria Caché
APC (memoria de usuario)
http://drupal.org/project/apc
PHP 256mb
APC64MB
PHP 256mb
APC64MB
Memcache
http://drupal.org/project/memcache
PHP 256mb
Memcacheserver
64MB
PHP 256mb
Memcacheserver
64MB}
File
http://drupal.org/project/filecache
PHP 256mb
Filesystem1 GB
PHP 256mb
Filesystem1 GB
File + APC + Memcache
PHP 256mb
Filesystem1 GB
Memcacheserver
64MBAPC64MB
PHP 256mb
Filesystem1 GB
Memcacheserver
64MBAPC64MB
Boost: Adios al cache…
• Boost crea un archivo .html para todas las páginas visitadas por los usuarios anónimos.
• El próximo usuario anónimo leerá este archivo .html en vez de ir al index.php y la BD.
• Es un excelente caché por archivos estáticos que se ejecuta desde el .htaccess gracias a mod_rewrite.
DEMO Time !!!
Pensar en performance desde el principio Performance es un diseño ligero Pocos módulos (process) APC Opcode Consultas Mysql optimizadas (Explain) y Query Cache Robot.txt (Crawl-Delay: 10) Usuarios anónimos
◦ Cache del core (solo páginas)◦ Boost◦ Varnish◦ Cache actions (mantenimiento)
Usuarios autenticados◦ Cache engine APC para Bins importantes y con mucha actualización◦ Cache engine memcache si cantidad grande de datos◦ Cache file si no cambia mucho en el tiempo
Conclusiones - Recetas
Testing, testing, testing…
Gracias
PREGUNTAS?