sábado, diciembre 13, 2008

Facebook publica su versión modificada de memcached

[Vía reddit] Facebook acaba de publicar su versión de memcached, el sistema de cachés genéricas más usado en aplicaciones web, tras hacer modificaciones para afrontar sus necesidades de rendimiento y escalabilidad. Las modificaciones principales han sido entre otras la eliminación de un buffer por conexión en favor de un pool, reducción de bloqueos innecesarios para un mejor rendimiento en máquinas multicore y el uso intensivo de UDP. El resultado final ha sido la posibilidad de gestionar 200.000 peticiones UDP por segundo con una latencia media de 173 microsegundos. Han subido los cambios a GitHub: facebook-memcached y esperan que los cambios sean incorporados al memcached oficial. Curiosamente hemos hablado recientemente por aquí de memcached en Un vistazo al interior de memcached.

Actualización: Olvidé mencionar que habían toqueteado el kernel :/ JAM hace muy bien resumen de esos apaños
Parece relevante también comentar lo que dicen en High Scalability sobre el memcached de Facebook y las conclusiones que se pueden sacar:
A summary of potential strategies:
  • Profile everything. Problems are always specific. The understanding of the problem must be specific. The fix must be specific.
  • Burn profiling into your regression tests. Detect when and where performance tanks as a regular part of your build.
  • Use resources in proportion to what grows slowest. This requires multiplexing, but at least your resource usage is more predictable and bounded.
  • Batch work. When you have the CPU do all the work you possibly can in the quantum or the whole system grinds to a halt in processing overhead.
  • Do work and maintain resources per task. Otherwise locking for shared resources takes more and more time when there's less and less time to do the work that needs to be done.
  • Change algorithms. Sometimes you simply need to do things differently. Tweaking will only get you so far.


La misma entrada y más comentarios en Facebook publica su versión modificada de memcached en barrapunto

2 comentarios:

Martín dijo...

Es muy buena noticia. Muy a menudo estos cambios se quedan dentro de las empresas porque cuanto mas crecen mas dificil es sacar algo hacia afuera.

mig21 dijo...

Hola Martín,

yo creo que además de una buena noticia es un movimiento juicioso, porque si no lo liberan deberían ellos responsabilizarse en exclusiva de su futuro desarrollo y mantenimiento.

De este modo, y si se logran sincronizar los cambios con la versión oficial, seguirá siendo una herramienta que usan.

Es una pena que, como comentas, en empresas más grandes no haya posibilidad de compartir las mejoras, porque yo diría que los beneficios superan con mucho los posibles peligros.

Creo además que este comportamiento es muy beneficioso para todos, sobre todo en herramientas de propósito general de este tipo. Con código más relacionado con el core del negocio ya estamos en terrenos más pantanosos ;)

Un saludo y gracias por tu comentario
Miguel