Optimizando Sitios webs con Memcached

1,573 views

Published on

Esta presentacion habla sobre Memcached y alternativas para sitios pequenhos.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,573
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
24
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Optimizando Sitios webs con Memcached

  1. 1. Acelerando sitios webs con Memcached César D. Rodas crodas@member.fsf.org http://cesar.la/talks/ Latinoware 2008, Foz do Iguaçu, Brasil 1
  2. 2. Quién les habla? Participante Google Summer of Code 2008 • Plug-in para WordPress
  3. 3. Quién les habla? Participante Google Summer of Code 2008 • Plug-in para WordPress Ganador del PHP Innovation award 2007
  4. 4. Quién les habla? Participante Google Summer of Code 2008 • Plug-in para WordPress Ganador del PHP Innovation award 2007 Centro Nacional de Computacion
  5. 5. 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
  6. 6. 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/ - L EX AT 2
  7. 7. Qué es Cache? Datos duplicados, almacenados en un médio más rápido.
  8. 8. Qué es Cache? Datos duplicados, almacenados en un médio más rápido. Mejor solución para el cuello de botella.
  9. 9. 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).
  10. 10. 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.
  11. 11. 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.
  12. 12. 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.
  13. 13. 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.
  14. 14. 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.
  15. 15. 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.
  16. 16. 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/ - L EX AT 3
  17. 17. Que no es Memcached! Base de datos.
  18. 18. Que no es Memcached! Base de datos. El único médio de cacheo.
  19. 19. Que no es Memcached! Base de datos. El único médio de cacheo. La mejor alternativa para sitios pequeños-medianos.
  20. 20. 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.
  21. 21. 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.
  22. 22. 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.
  23. 23. 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/ - L EX AT 4
  24. 24. Que es Memcached! Cache distribuido en memoria RAM.
  25. 25. Que es Memcached! Cache distribuido en memoria RAM. Creado por y para LiveJournal.
  26. 26. Que es Memcached! Cache distribuido en memoria RAM. Creado por y para LiveJournal. Escalable.
  27. 27. 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/ - L EX AT 5
  28. 28. El servidor Óptima administración de memoria (Slab Allocation).
  29. 29. El servidor Óptima administración de memoria (Slab Allocation). Utiliza libevent.
  30. 30. El servidor Óptima administración de memoria (Slab Allocation). Utiliza libevent. Protocolo simple y sencillo. • Nada de XML ni nada complicado de parsear.
  31. 31. 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.
  32. 32. 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.
  33. 33. 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/ - L EX AT 6
  34. 34. El cliente Elige a que servidor conectarse.
  35. 35. El cliente Elige a que servidor conectarse. Serializa los objetos del lenguaje.
  36. 36. El cliente Elige a que servidor conectarse. Serializa los objetos del lenguaje. Comprimir datos. Cesar D. Rodas - http://cesar.la/ - L EX AT 7
  37. 37. 8
  38. 38. Otras utilidades de Memcached Compartir información entre servidores. • Sesiones. • Informacion utilizada frecuentemente. • .. Cesar D. Rodas - http://cesar.la/ - L EX AT 9
  39. 39. Monitoreando Memcached Cacti • http://dealnews.com/developers/cacti/memcached.html Ganglia • http://ganglia.wiki.sourceforge.net/ ... Cesar D. Rodas - http://cesar.la/ - L EX AT 10
  40. 40. 11
  41. 41. Alternativas MySQL query cache. • Útil si la tabla no varía frecuentemente.
  42. 42. 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.
  43. 43. 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.
  44. 44. 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.
  45. 45. 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.
  46. 46. 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.
  47. 47. 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).
  48. 48. 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/ - L EX AT 12
  49. 49. Alternativas File cache en quot;disco RAMquot;.
  50. 50. Alternativas File cache en quot;disco RAMquot;. • Alternativa muy rápida y costosa.
  51. 51. Alternativas File cache en quot;disco RAMquot;. • 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
  52. 52. Alternativas File cache en quot;disco RAMquot;. • 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/ - L EX AT 13
  53. 53. Otros tips utiles Eliminar los whitespaces. • Si quot;ahorramosquot; 30 bytes por página, en 10,000,000 visitas serían ∼286MB.
  54. 54. Otros tips utiles Eliminar los whitespaces. • Si quot;ahorramosquot; 30 bytes por página, en 10,000,000 visitas serían ∼286MB. Paginas comprimidas. • On the fly ( ob start(quot;ob gzhandlerquot;) ) • Cacheado. • mod gzip. • ...
  55. 55. Otros tips utiles Eliminar los whitespaces. • Si quot;ahorramosquot; 30 bytes por página, en 10,000,000 visitas serían ∼286MB. Paginas comprimidas. • On the fly ( ob start(quot;ob gzhandlerquot;) ) • Cacheado. • mod gzip. • ... Contenido estático... al servidor multi-threded.
  56. 56. Otros tips utiles Eliminar los whitespaces. • Si quot;ahorramosquot; 30 bytes por página, en 10,000,000 visitas serían ∼286MB. Paginas comprimidas. • On the fly ( ob start(quot;ob gzhandlerquot;) ) • Cacheado. • mod gzip. • ... Contenido estático... al servidor multi-threded. APC.
  57. 57. Otros tips utiles Eliminar los whitespaces. • Si quot;ahorramosquot; 30 bytes por página, en 10,000,000 visitas serían ∼286MB. Paginas comprimidas. • On the fly ( ob start(quot;ob gzhandlerquot;) ) • Cacheado. • mod gzip. • ... Contenido estático... al servidor multi-threded. APC. Squid Reverse proxy. Cesar D. Rodas - http://cesar.la/ - L EX AT 14
  58. 58. Talk is cheap show me the code! 15
  59. 59. PHPCached vs. PHP Memcached PHPCached es un poco más lento.
  60. 60. PHPCached vs. PHP Memcached PHPCached es un poco más lento. • Si pensamos así deberíamos programar en C.
  61. 61. PHPCached vs. PHP Memcached PHPCached es un poco más lento. • Si pensamos así deberíamos programar en C. • Se puede solucionar con APC.
  62. 62. 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.
  63. 63. 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 quot;callbackquot; para el balanceo.
  64. 64. 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 quot;callbackquot; 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
  65. 65. API sencilla, similar a DBA <?php /* Objeto phpcached */ $cache = new phpcached;
  66. 66. API sencilla, similar a DBA <?php /* Objeto phpcached */ $cache = new phpcached; /* Agregar la lista de servidores */ $cache->addServer(quot;10.1.1.1quot;,3128); $cache->addServer(quot;10.1.1.1quot;,3129); $cache->addServer(quot;10.1.1.2quot;,3128);
  67. 67. API sencilla, similar a DBA <?php /* Objeto phpcached */ $cache = new phpcached; /* Agregar la lista de servidores */ $cache->addServer(quot;10.1.1.1quot;,3128); $cache->addServer(quot;10.1.1.1quot;,3129); $cache->addServer(quot;10.1.1.2quot;,3128); /* ** A utilizar Phpcached ** La funcion quot;do long process()quot; sólo será ** ejecutada cada 10 minutos */ if (($value=$cache->get(quot;keyquot;)) === false) { $value = do long process(); $cache->set(quot;keyquot;,$value,600); } return $value; ?> Cesar D. Rodas - http://cesar.la/ - L EX AT 17
  68. 68. 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/ - L EX AT 18
  69. 69. Jugando con PHPCached <?php $cache = new phpcached; $cache->addServer(quot;10.1.1.1quot;,3128); $cache->addServer(quot;10.1.1.1quot;,3129); $cache->addServer(quot;10.1.1.2quot;,3128);
  70. 70. Jugando con PHPCached <?php $cache = new phpcached; $cache->addServer(quot;10.1.1.1quot;,3128); $cache->addServer(quot;10.1.1.1quot;,3129); $cache->addServer(quot;10.1.1.2quot;,3128); /* ** Definimos una funcion PHP que ** selecionara que Memcached utilizar ** basado en la longitud del Key. */ function balancer($iServer,$zKey) { return strlen($zKey)%$iServer; }
  71. 71. Jugando con PHPCached <?php $cache = new phpcached; $cache->addServer(quot;10.1.1.1quot;,3128); $cache->addServer(quot;10.1.1.1quot;,3129); $cache->addServer(quot;10.1.1.2quot;,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(quot;balancerquot;); ?> Cesar D. Rodas - http://cesar.la/ - L EX AT 19
  72. 72. Alternativas para sitios pequeños <?php /* Objeto phpcached */ $cache = new phpcached;
  73. 73. Alternativas para sitios pequeños <?php /* Objeto phpcached */ $cache = new phpcached; /* Agregar directorio de destino */ $cache->addFolder(quot;/var/tmp/cachedquot;);
  74. 74. Alternativas para sitios pequeños <?php /* Objeto phpcached */ $cache = new phpcached; /* Agregar directorio de destino */ $cache->addFolder(quot;/var/tmp/cachedquot;); /* A utilizar Phpcached */ /* La funcion quot;do long process()quot; sólo será */ /* ejecutada cada 10 minutos */ if (($value=$cache->get(quot;keyquot;)) === false) { $value = do long process(); $cache->set(quot;keyquot;,$value,600); } return $value; ?> Cesar D. Rodas - http://cesar.la/ - L EX AT 20
  75. 75. Muchas gracias! Preguntas? Cesar Rodas. crodas@member.fsf.org http://cesarodas.com/ Mi blog. http://cesar.la/ 21
  76. 76. 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
  77. 77. Powered by... Cesar D. Rodas - http://cesar.la/ - L EX AT 23

×