77
Acelerando sitios webs con Memcached CØsar D. Rodas [email protected] http://cesar.la/talks/ Latinoware 2008, Foz do Iguau, Brasil 1

Optimizando Sitios webs con Memcached

  • Upload
    rodasc

  • View
    1.331

  • Download
    2

Embed Size (px)

DESCRIPTION

Esta presentacion habla sobre Memcached y alternativas para sitios pequenhos.

Citation preview

Page 1: Optimizando Sitios webs con Memcached

Acelerando sitios webs conMemcached

César D. [email protected]

http://cesar.la/talks/

Latinoware 2008, Foz do Iguaçu, Brasil

1

Page 2: Optimizando Sitios webs con Memcached

Quién les habla?

� Participante Google Summer of Code 2008

• Plug-in para WordPress

Page 3: Optimizando Sitios webs con Memcached

Quién les habla?

� Participante Google Summer of Code 2008

• Plug-in para WordPress

� Ganador del PHP Innovation award 2007

Page 4: Optimizando Sitios webs con Memcached

Quién les habla?

� Participante Google Summer of Code 2008

• Plug-in para WordPress

� Ganador del PHP Innovation award 2007

� Centro Nacional de Computacion

Page 5: Optimizando Sitios webs con Memcached

Quién les habla?

� Participante Google Summer of Code 2008

• Plug-in para WordPress

� Ganador del PHP Innovation award 2007

� Centro Nacional de Computacion

� www.CesaRodas.com

Page 6: Optimizando Sitios webs con Memcached

Quién les habla?

� Participante Google Summer of Code 2008

• Plug-in para WordPress

� Ganador del PHP Innovation award 2007

� Centro Nacional de Computacion

� www.CesaRodas.com

Cesar D. Rodas - http://cesar.la/ - LATEX 2

Page 7: Optimizando Sitios webs con Memcached

Qué es Cache?

� Datos duplicados, almacenados en un médio más rápido.

Page 8: Optimizando Sitios webs con Memcached

Qué es Cache?

� Datos duplicados, almacenados en un médio más rápido.

� Mejor solución para el cuello de botella.

Page 9: Optimizando Sitios webs con Memcached

Qué es Cache?

� Datos duplicados, almacenados en un médio más rápido.

� Mejor solución para el cuello de botella.

� Cuello de botella de la web (la base de datos).

Page 10: Optimizando Sitios webs con Memcached

Qué es Cache?

� Datos duplicados, almacenados en un médio más rápido.

� Mejor solución para el cuello de botella.

� Cuello de botella de la web (la base de datos).

• Autenticación.

Page 11: Optimizando Sitios webs con Memcached

Qué es Cache?

� Datos duplicados, almacenados en un médio más rápido.

� Mejor solución para el cuello de botella.

� Cuello de botella de la web (la base de datos).

• Autenticación.

• SQL.

Page 12: Optimizando Sitios webs con Memcached

Qué es Cache?

� Datos duplicados, almacenados en un médio más rápido.

� Mejor solución para el cuello de botella.

� Cuello de botella de la web (la base de datos).

• Autenticación.

• SQL.

. Compilación.

Page 13: Optimizando Sitios webs con Memcached

Qué es Cache?

� Datos duplicados, almacenados en un médio más rápido.

� Mejor solución para el cuello de botella.

� Cuello de botella de la web (la base de datos).

• Autenticación.

• SQL.

. Compilación.

. Ejecución del código.

Page 14: Optimizando Sitios webs con Memcached

Qué es Cache?

� Datos duplicados, almacenados en un médio más rápido.

� Mejor solución para el cuello de botella.

� Cuello de botella de la web (la base de datos).

• Autenticación.

• SQL.

. Compilación.

. Ejecución del código.

. Bloqueo de IO.

Page 15: Optimizando Sitios webs con Memcached

Qué es Cache?

� Datos duplicados, almacenados en un médio más rápido.

� Mejor solución para el cuello de botella.

� Cuello de botella de la web (la base de datos).

• Autenticación.

• SQL.

. Compilación.

. Ejecución del código.

. Bloqueo de IO.

. Acceso al disco.

Page 16: Optimizando Sitios webs con Memcached

Qué es Cache?

� Datos duplicados, almacenados en un médio más rápido.

� Mejor solución para el cuello de botella.

� Cuello de botella de la web (la base de datos).

• Autenticación.

• SQL.

. Compilación.

. Ejecución del código.

. Bloqueo de IO.

. Acceso al disco.

Cesar D. Rodas - http://cesar.la/ - LATEX 3

Page 17: Optimizando Sitios webs con Memcached

Que no es Memcached!

� Base de datos.

Page 18: Optimizando Sitios webs con Memcached

Que no es Memcached!

� Base de datos.

� El único médio de cacheo.

Page 19: Optimizando Sitios webs con Memcached

Que no es Memcached!

� Base de datos.

� El único médio de cacheo.

� La mejor alternativa para sitios pequeños-medianos.

Page 20: Optimizando Sitios webs con Memcached

Que no es Memcached!

� Base de datos.

� El único médio de cacheo.

� La mejor alternativa para sitios pequeños-medianos.

� Solución económica.

Page 21: Optimizando Sitios webs con Memcached

Que no es Memcached!

� Base de datos.

� El único médio de cacheo.

� La mejor alternativa para sitios pequeños-medianos.

� Solución económica.

� Complicada de implementar.

Page 22: Optimizando Sitios webs con Memcached

Que no es Memcached!

� Base de datos.

� El único médio de cacheo.

� La mejor alternativa para sitios pequeños-medianos.

� Solución económica.

� Complicada de implementar.

� Seguro.

Page 23: Optimizando Sitios webs con Memcached

Que no es Memcached!

� Base de datos.

� El único médio de cacheo.

� La mejor alternativa para sitios pequeños-medianos.

� Solución económica.

� Complicada de implementar.

� Seguro.

Cesar D. Rodas - http://cesar.la/ - LATEX 4

Page 24: Optimizando Sitios webs con Memcached

Que es Memcached!

� Cache distribuido en memoria RAM.

Page 25: Optimizando Sitios webs con Memcached

Que es Memcached!

� Cache distribuido en memoria RAM.

� Creado por y para LiveJournal.

Page 26: Optimizando Sitios webs con Memcached

Que es Memcached!

� Cache distribuido en memoria RAM.

� Creado por y para LiveJournal.

� Escalable.

Page 27: Optimizando Sitios webs con Memcached

Que es Memcached!

� Cache distribuido en memoria RAM.

� Creado por y para LiveJournal.

� Escalable.

� Utilizado por los grandes.• LiveJournal.

• Wikipedia.

• Slashdot.

• SourceForge.

• ...

Cesar D. Rodas - http://cesar.la/ - LATEX 5

Page 28: Optimizando Sitios webs con Memcached

El servidor

� Óptima administración de memoria (Slab Allocation).

Page 29: Optimizando Sitios webs con Memcached

El servidor

� Óptima administración de memoria (Slab Allocation).

� Utiliza libevent.

Page 30: Optimizando Sitios webs con Memcached

El servidor

� Óptima administración de memoria (Slab Allocation).

� Utiliza libevent.

� Protocolo simple y sencillo.

• Nada de XML ni nada complicado de parsear.

Page 31: Optimizando Sitios webs con Memcached

El servidor

� Óptima administración de memoria (Slab Allocation).

� Utiliza libevent.

� Protocolo simple y sencillo.

• Nada de XML ni nada complicado de parsear.

� No existen bloqueos de IO.

Page 32: Optimizando Sitios webs con Memcached

El servidor

� Óptima administración de memoria (Slab Allocation).

� Utiliza libevent.

� Protocolo simple y sencillo.

• Nada de XML ni nada complicado de parsear.

� No existen bloqueos de IO.

� Cada servidor es totalmente independiente.• No se comparten datos.

• No hay un punto centralizado.

• Sencillo, efectivo y rápido.

Page 33: Optimizando Sitios webs con Memcached

El servidor

� Óptima administración de memoria (Slab Allocation).

� Utiliza libevent.

� Protocolo simple y sencillo.

• Nada de XML ni nada complicado de parsear.

� No existen bloqueos de IO.

� Cada servidor es totalmente independiente.• No se comparten datos.

• No hay un punto centralizado.

• Sencillo, efectivo y rápido.

� Cuenta con hash interno.

Cesar D. Rodas - http://cesar.la/ - LATEX 6

Page 34: Optimizando Sitios webs con Memcached

El cliente

� Elige a que servidor conectarse.

Page 35: Optimizando Sitios webs con Memcached

El cliente

� Elige a que servidor conectarse.

� Serializa los objetos del lenguaje.

Page 36: Optimizando Sitios webs con Memcached

El cliente

� Elige a que servidor conectarse.

� Serializa los objetos del lenguaje.

� Comprimir datos.

Cesar D. Rodas - http://cesar.la/ - LATEX 7

Page 37: Optimizando Sitios webs con Memcached

8

Page 38: Optimizando Sitios webs con Memcached

Otras utilidades de Memcached

� Compartir información entre servidores.

• Sesiones.

• Informacion utilizada frecuentemente.

• ..

Cesar D. Rodas - http://cesar.la/ - LATEX 9

Page 39: Optimizando Sitios webs con Memcached

Monitoreando Memcached

� Cacti

• http://dealnews.com/developers/cacti/memcached.html

� Ganglia

• http://ganglia.wiki.sourceforge.net/

� ...

Cesar D. Rodas - http://cesar.la/ - LATEX 10

Page 40: Optimizando Sitios webs con Memcached

11

Page 41: Optimizando Sitios webs con Memcached

Alternativas

� MySQL query cache.

• Útil si la tabla no varía frecuentemente.

Page 42: Optimizando Sitios webs con Memcached

Alternativas

� MySQL query cache.

• Útil si la tabla no varía frecuentemente.

� Bases de datos replicadas.

• Se pueden desentralizar las lecturas pero no las escrituras.

Page 43: Optimizando Sitios webs con Memcached

Alternativas

� MySQL query cache.

• Útil si la tabla no varía frecuentemente.

� Bases de datos replicadas.

• Se pueden desentralizar las lecturas pero no las escrituras.

• Las escrituras bloquean las lecturas.

Page 44: Optimizando Sitios webs con Memcached

Alternativas

� MySQL query cache.

• Útil si la tabla no varía frecuentemente.

� Bases de datos replicadas.

• Se pueden desentralizar las lecturas pero no las escrituras.

• Las escrituras bloquean las lecturas.

� Memoria Compartida.

• El cache no puede ser distribuido.

Page 45: Optimizando Sitios webs con Memcached

Alternativas

� MySQL query cache.

• Útil si la tabla no varía frecuentemente.

� Bases de datos replicadas.

• Se pueden desentralizar las lecturas pero no las escrituras.

• Las escrituras bloquean las lecturas.

� Memoria Compartida.

• El cache no puede ser distribuido.

• Muy costoso gracias a los bloqueos.

Page 46: Optimizando Sitios webs con Memcached

Alternativas

� MySQL query cache.

• Útil si la tabla no varía frecuentemente.

� Bases de datos replicadas.

• Se pueden desentralizar las lecturas pero no las escrituras.

• Las escrituras bloquean las lecturas.

� Memoria Compartida.

• El cache no puede ser distribuido.

• Muy costoso gracias a los bloqueos.

� File cache.

• El cache no puede ser distribuido.

Page 47: Optimizando Sitios webs con Memcached

Alternativas

� MySQL query cache.

• Útil si la tabla no varía frecuentemente.

� Bases de datos replicadas.

• Se pueden desentralizar las lecturas pero no las escrituras.

• Las escrituras bloquean las lecturas.

� Memoria Compartida.

• El cache no puede ser distribuido.

• Muy costoso gracias a los bloqueos.

� File cache.

• El cache no puede ser distribuido.

• Mejor cache para sitios pequeños (< 70000 hits por dia).

Page 48: Optimizando Sitios webs con Memcached

Alternativas

� MySQL query cache.

• Útil si la tabla no varía frecuentemente.

� Bases de datos replicadas.

• Se pueden desentralizar las lecturas pero no las escrituras.

• Las escrituras bloquean las lecturas.

� Memoria Compartida.

• El cache no puede ser distribuido.

• Muy costoso gracias a los bloqueos.

� File cache.

• El cache no puede ser distribuido.

• Mejor cache para sitios pequeños (< 70000 hits por dia).

Cesar D. Rodas - http://cesar.la/ - LATEX 12

Page 49: Optimizando Sitios webs con Memcached

Alternativas

� File cache en "disco RAM".

Page 50: Optimizando Sitios webs con Memcached

Alternativas

� File cache en "disco RAM".

• Alternativa muy rápida y costosa.

Page 51: Optimizando Sitios webs con Memcached

Alternativas

� File cache en "disco RAM".

• Alternativa muy rápida y costosa.

• GNU/Linux:/sbin/mke2fs -q -m 0 /dev/ram0/bin/mount /dev/ram0 /mnt/cache/bin/chown httpd:root /mnt/cache/bin/chmod 0750 /mnt/cache

Page 52: Optimizando Sitios webs con Memcached

Alternativas

� File cache en "disco RAM".

• Alternativa muy rápida y costosa.

• GNU/Linux:/sbin/mke2fs -q -m 0 /dev/ram0/bin/mount /dev/ram0 /mnt/cache/bin/chown httpd:root /mnt/cache/bin/chmod 0750 /mnt/cache

• FreeBSD (y posiblemente *BSD):/sbin/mdconfig -a -t malloc -s 256M -u 10/sbin/newfs -U /dev/md10/sbin/mount /dev/md10 /mnt/cache

Cesar D. Rodas - http://cesar.la/ - LATEX 13

Page 53: Optimizando Sitios webs con Memcached

Otros tips utiles

� Eliminar los whitespaces.

• Si "ahorramos" 30 bytes por página, en 10,000,000 visitas serían ∼286MB.

Page 54: Optimizando Sitios webs con Memcached

Otros tips utiles

� Eliminar los whitespaces.

• Si "ahorramos" 30 bytes por página, en 10,000,000 visitas serían ∼286MB.

� Paginas comprimidas.

• On the fly ( ob start("ob gzhandler") )

• Cacheado.

• mod gzip.

• ...

Page 55: Optimizando Sitios webs con Memcached

Otros tips utiles

� Eliminar los whitespaces.

• Si "ahorramos" 30 bytes por página, en 10,000,000 visitas serían ∼286MB.

� Paginas comprimidas.

• On the fly ( ob start("ob gzhandler") )

• Cacheado.

• mod gzip.

• ...

� Contenido estático... al servidor multi-threded.

Page 56: Optimizando Sitios webs con Memcached

Otros tips utiles

� Eliminar los whitespaces.

• Si "ahorramos" 30 bytes por página, en 10,000,000 visitas serían ∼286MB.

� Paginas comprimidas.

• On the fly ( ob start("ob gzhandler") )

• Cacheado.

• mod gzip.

• ...

� Contenido estático... al servidor multi-threded.

� APC.

Page 57: Optimizando Sitios webs con Memcached

Otros tips utiles

� Eliminar los whitespaces.

• Si "ahorramos" 30 bytes por página, en 10,000,000 visitas serían ∼286MB.

� Paginas comprimidas.

• On the fly ( ob start("ob gzhandler") )

• Cacheado.

• mod gzip.

• ...

� Contenido estático... al servidor multi-threded.

� APC.

� Squid Reverse proxy.

Cesar D. Rodas - http://cesar.la/ - LATEX 14

Page 58: Optimizando Sitios webs con Memcached

Talk is cheapshow me the code!

15

Page 59: Optimizando Sitios webs con Memcached

PHPCached vs. PHP Memcached

� PHPCached es un poco más lento.

Page 60: Optimizando Sitios webs con Memcached

PHPCached vs. PHP Memcached

� PHPCached es un poco más lento.

• Si pensamos así deberíamos programar en C.

Page 61: Optimizando Sitios webs con Memcached

PHPCached vs. PHP Memcached

� PHPCached es un poco más lento.

• Si pensamos así deberíamos programar en C.

• Se puede solucionar con APC.

Page 62: Optimizando Sitios webs con Memcached

PHPCached vs. PHP Memcached

� PHPCached es un poco más lento.

• Si pensamos así deberíamos programar en C.

• Se puede solucionar con APC.

� PHPCached puede ser modificado fácilmente.

Page 63: Optimizando Sitios webs con Memcached

PHPCached vs. PHP Memcached

� PHPCached es un poco más lento.

• Si pensamos así deberíamos programar en C.

• Se puede solucionar con APC.

� PHPCached puede ser modificado fácilmente.

� En PHPCached se puede registrar un "callback" para el balanceo.

Page 64: Optimizando Sitios webs con Memcached

PHPCached vs. PHP Memcached

� PHPCached es un poco más lento.

• Si pensamos así deberíamos programar en C.

• Se puede solucionar con APC.

� PHPCached puede ser modificado fácilmente.

� En PHPCached se puede registrar un "callback" para el balanceo.

� PHPCached tiene cacheo en archivos con la misma API.

• Para sitios pequeños-medianos.

• Ayuda a la transición (del file-based a memcached).

16

Page 65: Optimizando Sitios webs con Memcached

API sencilla, similar a DBA<?php/* Objeto phpcached */$cache = new phpcached;

Page 66: Optimizando Sitios webs con Memcached

API sencilla, similar a DBA<?php/* Objeto phpcached */$cache = new phpcached;/* Agregar la lista de servidores */$cache->addServer("10.1.1.1",3128);$cache->addServer("10.1.1.1",3129);$cache->addServer("10.1.1.2",3128);

Page 67: Optimizando Sitios webs con Memcached

API sencilla, similar a DBA<?php/* Objeto phpcached */$cache = new phpcached;/* Agregar la lista de servidores */$cache->addServer("10.1.1.1",3128);$cache->addServer("10.1.1.1",3129);$cache->addServer("10.1.1.2",3128);/*** A utilizar Phpcached** La funcion "do long process()" sólo será** ejecutada cada 10 minutos*/if (($value=$cache->get("key")) === false) {

$value = do long process();$cache->set("key",$value,600);

}return $value;?>

Cesar D. Rodas - http://cesar.la/ - LATEX 17

Page 68: Optimizando Sitios webs con Memcached

Y si usas PHP5<?php/* definimos la lista de servidores */define(’PHPCACHED SERVER1’,’10.1.1.1:3128’);define(’PHPCACHED SERVER2’,’10.1.1.1:3129’);define(’PHPCACHED SERVER3’,’10.1.1.2:3128’);

$cache = new arraycached(600);if (!isset($cache[$key])) {

$cache[$key] = do long process();}return $cache[$key];?>

Cesar D. Rodas - http://cesar.la/ - LATEX 18

Page 69: Optimizando Sitios webs con Memcached

Jugando con PHPCached<?php$cache = new phpcached;$cache->addServer("10.1.1.1",3128);$cache->addServer("10.1.1.1",3129);$cache->addServer("10.1.1.2",3128);

Page 70: Optimizando Sitios webs con Memcached

Jugando con PHPCached<?php$cache = new phpcached;$cache->addServer("10.1.1.1",3128);$cache->addServer("10.1.1.1",3129);$cache->addServer("10.1.1.2",3128);/*** Definimos una funcion PHP que** selecionara que Memcached utilizar** basado en la longitud del Key.*/function balancer($iServer,$zKey) {return strlen($zKey)%$iServer;}

Page 71: Optimizando Sitios webs con Memcached

Jugando con PHPCached<?php$cache = new phpcached;$cache->addServer("10.1.1.1",3128);$cache->addServer("10.1.1.1",3129);$cache->addServer("10.1.1.2",3128);/*** Definimos una funcion PHP que** selecionara que Memcached utilizar** basado en la longitud del Key.*/function balancer($iServer,$zKey) {return strlen($zKey)%$iServer;}/*** Ahora agregamos nuestra funcion** como balancer./$cache->setBalancer("balancer");?>

Cesar D. Rodas - http://cesar.la/ - LATEX 19

Page 72: Optimizando Sitios webs con Memcached

Alternativas para sitios pequeños<?php/* Objeto phpcached */$cache = new phpcached;

Page 73: Optimizando Sitios webs con Memcached

Alternativas para sitios pequeños<?php/* Objeto phpcached */$cache = new phpcached;/* Agregar directorio de destino */$cache->addFolder("/var/tmp/cached");

Page 74: Optimizando Sitios webs con Memcached

Alternativas para sitios pequeños<?php/* Objeto phpcached */$cache = new phpcached;/* Agregar directorio de destino */$cache->addFolder("/var/tmp/cached");/* A utilizar Phpcached *//* La funcion "do long process()" sólo será *//* ejecutada cada 10 minutos */if (($value=$cache->get("key")) === false) {

$value = do long process();$cache->set("key",$value,600);

}return $value;?>

Cesar D. Rodas - http://cesar.la/ - LATEX 20

Page 75: Optimizando Sitios webs con Memcached

Muchas gracias! Preguntas?Cesar [email protected]://cesarodas.com/

Mi blog.http://cesar.la/

21

Page 76: Optimizando Sitios webs con Memcached

Resources

� Memcached• http://www.danga.com/memcached

• http://tangent.org/552/libmemcached.html

� Mamcached Mail list.• http://lists.danga.com/mailman/listinfo/memcached

� PHPCached• http://www.phpclasses.org/phpcached

22

Page 77: Optimizando Sitios webs con Memcached

Powered by...

Cesar D. Rodas - http://cesar.la/ - LATEX 23