texto:   A-   A+
eliax

Base de datos Cassandra, diseñada para escalar naturalmente a millones de usuarios
eliax id: 7507 josé elías en mar 1, 2010 a las 12:05 AM (00:05 horas)
Una de las tendencias actuales en bases de datos son las llamadas "bases de datos del tipo BigTable", un modelo de base de datos nada nuevo, pero sí hecho práctico y popularizado por Google, quien creó su propio sistema de almacenamiento y gestión de datos ya que de otra manera no hubiera podido escalar de manera práctica su masiva infraestructura para servir a los cientos de millones de personas que utilizan sus servicios a diario.

Sin embargo, aunque Google ha hecho público muchos de los detalles de su implementación, lo cierto es que por motivos de competitividad la empresa mantiene celosamente guardada su implementación actual optimizada.

Pero, como siempre ocurre, un grupo de talentosos programadores se han unido junto con otras grandes empresas para crear algo sino similar, incluso quizás hasta mejor.

Uno de los primeros frutos de estos esfuerzos fue la base de datos Hadoop HBase de la cual les hablé el año pasado, pero ahora verán la próxima generación...

Hablamos de un proyectos bajo el nombre "Cassandra", mantenido por la Fundación Apache, y que quizás sea el sistema de bases datos diseñada para escalar "naturalmente" mas sofisticado del momento, y un tremendo punto a su favor es que gran parte de su fuente fue generado por los ingenieros del portal social Facebook, quienes han estado pasando toda su titánica infraestructura a este modelo, y como si fuera poco, la empresa Twitter recién hizo público que también planea migrar toda su infraestructura a esta nueva plataforma de datos. Además, empresas como CISCO y Rackspace también están entre las empresas que están apoyando el proyecto.

Según los que mantienen a Cassandra, ya existen instalaciones con hasta 150 máquinas en paralelo y 100TB de datos en producción, por lo que aun en estado "beta", no hay duda de que este motor ha cobrado mucha tracción en el mercado, y es ahora mismo la alternativa primaria para toda empresa que necesite una base de datos que escale a millones de usuarios y en donde algo como Oracle, MySQL, Postgress o MS SQL Server no es suficiente (tanto desde el punto de vista de poder, como de costo y complejidad).

Pero, ¿qué hace a Cassandra algo tan atractivo? Pues para empezar, fue pensada para que escale "naturalmente" casi por sí sola con uno simplemente agregar mas máquinas a un cluster, prometiendo ser uno de los primeros sistemas de esta magnitud que escala "linealmente" acorde se le agreguen mas máquinas, y todo de una manera sencilla.

Noten que existen soluciones que pueden escalar bastante bien en varios escenarios, como es utilizar MemCache con MySQL, pero el problema de esas soluciones es que requiere de mucha configuración manual para agregar nuevos nodos al cluster, y aparte de eso no garantiza una escalabilidad lineal como lo ofrece Cassandra.

Otro punto a favor de Cassandra es que no es un sistema centralizado, ni gestionado de manera centralizada, sino que toda la inteligencia de gestionar los datos es manejada de manera distribuída entre todos los nodos, lo que en la práctica en realidad significa que no existe un solo punto de fallas en el sistema, ya que aun si se caen varios de los servidores, los otros continuarán operando ininterrumpidamente, lo que es esencial para muchos tipos de sistemas estilo web hoy día. Incluso, Cassandra soporta replicación no solo local en una red, sino que entre varios centros de datos remotos, todo de manera natural.

Ahora, uno se preguntará, con estos datos tan distribuído entre centenares (o potencialmente centenares de miles) de máquinas, ¿como puede el sistema escalar en tiempo real sin generar un flujo masivo de tráfico en el proceso? Y la respuesta es que esa escalabilidad la puedes manejar tu a tu antojo, pudiendo especificar que todo el cluster implemente un modelo que va desde simples lecturas sin bloqueo, hasta bloquear hasta que todos los nodos hayan sido escritos.

Sin embargo, para tomar ventaja de este tipo de arquitectura también es necesario tener una aplicación que se beneficie de ella, ya que lo ideal para escalar a cientos de millones de personas es crear un balance entre disponibilidad de datos (es decir, que los datos estén siempre disponibles en todo momento y en tiempo real), y consistencia (es decir, que todos los datos estén propiamente sincronizados entre todos los nodos).

A tal fin, el modelo recomendado (y por defecto) de Cassandra (así como de casi todas las bases de datos de este tipo) es el de un modelo "eventualmente consistente", lo que significa que los cambios se van propagando poco a poco entre todos los nodos del cluster, pero mientras tanto lo que sea que esté disponible para lectura se le ofrece al usuario mientras tanto lleguen las últimas actualizaciones.

Es por eso que este tipo de bases de datos es ideal para portales sociales como Facebook y Twitter, en donde no importa si algunos usuarios reciben una actualización poco después que otros, ya que lo importante es que todos "eventualmente" tengan todas las actualizaciones.

En otras palabras, hablamos de que para sacar ventaja de este tipo de sistemas se necesita modificar la mentalidad ACID que por décadas ha gobernado las bases de datos relacionales, y pensar mas en un esquema mas práctico y flexible, si bien no 100% consistente.

Obviamente este tipo de modelos no aplica a todo tipo de aplicaciones, pues por ejemplo, aplicaciones financieras son el ejemplo clásico de transacciones que deben confirmarse y estar 100% consistentes en todo momento, para cuyo caso algo como un cluster de MySQL sería quizás mejor (o dependiendo de la aplicación, una mezcla entre ambos mundos).

O en otras palabras, este tipo de bases de datos no tiene como objetivo reemplazar las tradicionales del tipo relacional, sino que complementar a estas en aplicaciones distintas para las cuales el modelo clásico simplemente no es óptimo.

Noten además que debido a la naturaleza a estas bases de datos, que estas no utilizan el mismo concepto de tablas relacionadas a las que hemos estado acostumbrado por años, sino que mas bien de conjuntos de datos basados en modelos de "variable + valor", similar a las hashtables en los lenguajes clásicos de programación.

Sin embargo, si hay algo que deben sacar de este artículo, es que si eres un desarrollador de software, y quieres mojarte las manos con el futuro de las bases de datos altamente escalables, o si tienes una aplicación que necesita escalar a millones de usuarios, que este es quizás el mejor punto de partida que podrás encontrar por el momento.

Página oficial de Apache Cassandra (recuerden que es software Beta)

Introducción al modelo de datos de Cassandra

Una introducción a Cassandra para programadores de Rails

autor: josé elías

Comentarios

  • Que onda eliax.

    Esta tecnologia la recomiendas como unica asaber para entrar al tema de gestion de base de datos, o ahun es indispensable ser un experto en las tecnologias que anteriores como mySQL y derivados que sinceramente se me hacen muy elitistas y lentas de asimilar, siendo asi cuales consideras indispensables para dominar el tema?

    Otra cosa.
    Recien vuelvo y me enceuntro ya algunos cambios, por lo general veo eliax.com desde mi aparato movil con el navegador dolphin para android. y me asusto el "da clic para seguir leyendo" la vdd fue una desilucion grandisima, lo bueno que esta dinamica y no recarga la pagina y mejor que no es para todas las noticias, me imagino que solo aplicara a algunas grandes.

    Aprovechando la retroalimentacion, me gustaria hacerte una peticion o sujerencia espero no sea muy fantasiosa. Respecto a compartir noticias, se me haria mas limpio en lugar de ver en TODAS las noticias los iconos para compartir, ver solo un icono "compartir esta niticia" y que desplegra alli(siendo ahun mas exijente! Fuesen con esa tecnologia que habra el cuadro al solo pasar el cursor) los servicios para compartir que tengan de moda.

    Gracias por lo que haces! Y de nuevo gracias por mi educacion post-universitaria.

    • DNBo0t,

      Saber SQL es todavía algo esencial, y te recomiendo que domines al menos a MySQL (y si tienes acceso, que te empapes las manos también con al menos MS SQL Server y hasta Oracle, pues es posible que te beneficies de ese conocimiento en un futuro).

      • Gracias extremas J.eliax!! Y Por el detalle de contestar.

  • Wow

    Excelente noticia Jose Elias y mas clara no se podia explicar.

  • Honestamente, no se que seria de mi en estos momentos sin la existencia de este blog o como se llame... Además de que me entretiene considerablemente, me ha enseñado mil cosas y me mantiene de una u otra forma como en el futuro.. gracias por toda la información que nos cuenta a diario... Un saludo muy grande desde Pereira (Colombia)... Aquí en mi ciudad tiene a varios seguidores.

  • Hola Eliax, que opinión te merece mongodb frente a cassandra.

    • Nicolaso,

      Ambas son excelentes. MongoDB fue diseñada para ser accedida fácilmente por interfaces estilo REST, y su implementación está basada con la filosofía de un repositorio de documentos.

      Creo que en muchas instalaciones ambas harían excelentes, y aunque MongoDB ciertamente ha tenido buena aceptación, el hecho de que titanes como Facebook y Twitter la hayan adoptado y probado con sus masivas infraestructura le da a Cassandra un poco mas de confianza a los implementadores.

      Recuerda que en este tipo de proyectos una de las preguntas mas importantes que uno se debe hacer es "¿y qué del soporte técnico en el futuro?", y en ese caso *aparenta* por el momento que Cassandra tiene la ventaja.

      Otra ventaja técnica de Cassandra es que aparenta ser mas resistente a caídas de servidores que MongoDB, quien sufre de tener que reparar la base de datos (similar a los problemas que ocurren cuando se cae un volumen RAID) que en grandes instalaciones puede significar varias horas con el sistema caído (esto es algo sin embargo que yo personalmente no he probado con Cassandra para ver como se comporta).

      Al final del día sin embargo, mi recomendación diplomática es que pruebes a ambas plataformas y ver cuál satisface mejor tus necesidades.

    • Nicolaso,

      Algo que se me olvidaba mencionar: Una cosa bastante buena sobre MongoDB es que ofrece una gran variedad de drivers para casi cualquier entorno, por lo que quizás para algunos sea un poco mas fácil hacer pruebas.

      Por ejemplo, oficialmente soportan C, C++, Java, Javascript, Perl, PHP, Python, Ruby, pero también existen drivers hechos por la comunidad para otras plataformas como Coldfusion, C#/.NET, Erland, Go, etc.

      Los interesados pueden visitar http://www.mongodb.org

      • Eliax, parece que para tiempo real es mejor mongodb, ¿que opinas?.
        ¿Crees que el tamaño de los documentos en mongodb puede afectar al rendimiento a la hora de hacer una búsqueda en una colección o al tratarse de documentos con estructura json el tamaño del documento no es relevante en mongodb?

        • Hummm.... Para ver cual te responde mejor en aplicaciones de tiempo real, creo que lo mejor es que hagas pruebas con ambas en un entorno similar a lo que sería tu aplicación final.

Añadir Comentario

tu nombre
tu email
(opcional)
web personal
(opcional)
en respuesta a...
comentario de caracteres máximo
4 + 1 = requerido (control anti-SPAM)
 

"Mas que interesante. Si bien las conclusiones las tenía bien claras por otros estudios, no sabía la forma en que había sido comprobando. Hablo de los tonos de la luz. No tenía idea. Este blog me sorprende día a día. Es fantástico que algo como esto exista."

por "German" en sep 14, 2013


en camino a la singularidad...

©2005-2014 josé c. elías
todos los derechos reservados
como compartir los artículos de eliax