El mundo del NOSQL está de moda. Periódicamente aparece yet another storage clave-valor que da una vuelta de tuerca al anterior, o que añade tal feature o tal optimización. La lista es interminable: CouchDB, MongoDB, Dynomite, Cassandra, Redis, Voldemort…

Usados donde tiene sentido usarlos son herramientas definitivas. A mi me atraen particularmete por el énfasis que todos estos inventos hacen en sus capacidades para escalar, y por las ideas subyacentes sobre las que todos o casi todos se construyen, importadas del mundo P2P, del que tantas cosas me dedicaba a leer durante mi última época trabajando en la Universidad.

Internet rebosa de información sobre el mundo NOSQL. Un ejemplo para comenzar a hacer clicks y perderse podría ser este artículo/comparativa en el blog de Richard Jones -sí, otra vez él-, o este otro artículo/resumen de un encuentro de NOSQLeros en San Francisco. Pero sobre todos los anteriores recomiendo un descubrimiento de hoy. Un artículo en el blog de un señor que al parecer se llama Ricky Ho, y que ha titulado NOSQL patterns. Pata negra.

El título es algo excesivo, pero el contenido, aunque necesariamente simplificado, es de primera. Es un resumen estupendo del puñado de ideas más elementales tras el mundo NOSQL, y en general tras de muchas arquitecturas P2P: consistent hashing, gestión decentralizada de la overlay network, vector clocks, arquitecturas gossip, etc. En su momento, descubrir y ordenar esas ideas me llevó meses leyendo farragosos papers, para que ahora venga este señor a resumir todo en un par de hojas. ¡Si es que así no se puede! xD

Durante la PHP Barcelona Conference del pasado finde uno de los asistentes me asaltó interesándose por eso del Erlang, y cómo era eso de que en Tuenti habíamos implementado el servicio de IM usando esa cosa exótica. Su empresa estaba interesada en una infraestructura parecida: pilas de conexiones establecidas concurrentes, push vía HTTP con notificaciones en tiempo real, etc. Un escenario donde Erlang encaja a la perfección.

Para convencerle recurrí una vez más a una serie de tres posts de Richard Jones, cofundador y CTO de last.fm, y al parecer, y con gran criterio, fan de Erlang. Tantas veces he citado a este señor, listo él como un pimiento, que iba siendo hora de compartir esta lectura 200% recomendable.

Resumiendo, el objetivo es implementar un servicio Comet-like en Erlang que atienda un millón de conexiones TCP concurrentes desde una sóla máquina. Lo va desarrollando en varias iteraciones, primero con una implementación plana sobre MochiWeb, a continuación añade un router uno a uno, después juega con la hibernación de procesos para optimizar el uso de memoria, a continuación transforma el router en un bus de mensajes pub/sub, y finalmente, mi parte preferida, hace volar todo integrando un frontend libevent embebido en un C-node. Esta misma estructura, añadiendo algo más de magia Erlang, es toda una receta magistral para hacer cosas bien chulas.

David es el reponsable de sistemas en Tuenti. Es la persona última sobre la que recae el peso de mantener bien engrasados los 14 servidores que forman la infraestructura de la empresa con la que me gano los garbanzos. Además, en el mantenedor del paquete memcached en Debian, pieza fundamental dentro de toda la arquitectura web. Pues bien, gracias a él, el otro día conocía ememcached.

ememcached es una pieza de código absolutamente inútil, un pasatiempo, 100% prescindible… pero tan bella! Se trata de una implementación en Erlang de un servidor memcached -sea lo que sea eso; un día lo explico- hablando la versión binaria del protocolo -hay otra versión en texto más trivialota-.

No voy a descubrirle aquí a nadie la potencia de Erlang, su belleza, su naturalidad a la hora de implementar protocolos… Me quedo con la conclusión de su autor: la implementación en Erlang, no sólo es natural, es que es una documentación del protocolo mejor aún que la propia especificación. ¡Zas es toda la boca programación imperativa!