performance en drupal 7

37
Drupal Performance Karim Boudjema Fernando Paredes

Upload: karim-boudjema

Post on 12-Dec-2014

3.398 views

Category:

Technology


5 download

DESCRIPTION

Conferencia sobre Performance en Drupal 7 en el Drupal Camp Foz 2011, Brasil - Karim Boudjema - Fernando Paredes

TRANSCRIPT

Page 1: Performance en Drupal 7

Drupal Performance

Karim Boudjema

Fernando Paredes

Page 2: Performance en Drupal 7

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

Page 3: Performance en Drupal 7

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

Page 4: Performance en Drupal 7

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

Page 5: Performance en Drupal 7

¿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.

Page 6: Performance en Drupal 7

40% de los usuarios deciden abandonar una página web si la carga supera los 3 segundos

SatisfechoInsatisfecho

Page 7: Performance en Drupal 7

73% de los usuarios de dispositivos móviles consideran que su experiencia es todavía muy lenta

SatisfechoInsatisfecho

Page 8: Performance en Drupal 7

79% de los usuarios insatisfechos con el rendimiento de una tienda on-line prefieren comprar en otro lado la próxima vez

SatisfechoInsatisfecho

Page 9: Performance en Drupal 7

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)

Page 10: Performance en Drupal 7

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

Page 11: Performance en Drupal 7

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

Page 12: Performance en Drupal 7

La Memoria Caché

Page 13: Performance en Drupal 7

¿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

Page 14: Performance en Drupal 7

¿Cómo se usa la memoria caché en Drupal?

Cachévacía

Cachéllena

Page 15: Performance en Drupal 7

PHPAPACHE

LINUX

Browser

CacheCDN Revers

e proxy

MODExpiresDeflate

OpCodeCache

Cache engine

QueryCache

MySQLSQL Queries

Boost

Stack Cache

Page 16: Performance en Drupal 7

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

Page 17: Performance en Drupal 7

◦ 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)

Page 18: Performance en Drupal 7

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)

Page 19: Performance en Drupal 7

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)

Page 20: Performance en Drupal 7

Buenas Prácticas para aprovechar la memoria caché

Page 21: Performance en Drupal 7

¿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

Page 22: Performance en Drupal 7

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

Page 23: Performance en Drupal 7

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; }?>

Page 24: Performance en Drupal 7

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; }?>

Page 25: Performance en Drupal 7

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;?>

Page 26: Performance en Drupal 7

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

Page 27: Performance en Drupal 7

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

Page 28: Performance en Drupal 7

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

Page 29: Performance en Drupal 7

Motores de Memoria Caché

Page 30: Performance en Drupal 7

APC (memoria de usuario)

http://drupal.org/project/apc

PHP 256mb

APC64MB

PHP 256mb

APC64MB

Page 31: Performance en Drupal 7

Memcache

http://drupal.org/project/memcache

PHP 256mb

Memcacheserver

64MB

PHP 256mb

Memcacheserver

64MB}

Page 32: Performance en Drupal 7

File

http://drupal.org/project/filecache

PHP 256mb

Filesystem1 GB

PHP 256mb

Filesystem1 GB

Page 33: Performance en Drupal 7

File + APC + Memcache

PHP 256mb

Filesystem1 GB

Memcacheserver

64MBAPC64MB

PHP 256mb

Filesystem1 GB

Memcacheserver

64MBAPC64MB

Page 34: Performance en Drupal 7

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.

Page 35: Performance en Drupal 7

DEMO Time !!!

Page 36: Performance en Drupal 7

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…

Page 37: Performance en Drupal 7

Gracias

PREGUNTAS?