Apache Cassandra: gestión distribuida de grandes bases de datos
A la hora de gestionar volúmenes de datos muy grandes, de varios terabytes o incluso petabytes, los sistemas de bases de datos clásicos están desbordados. En este caso, necesitas aplicaciones de big data, que sean fácilmente escalables ya que, la mayoría de las veces, es difícil estimar de antemano el volumen real de datos. Uno de los ejemplos modernos más populares de estas aplicaciones es Cassandra, una solución de código abierto desarrollada originalmente para Facebook.
¿Qué es Apache Cassandra?
Apache Cassandra es un sistema de gestión de bases de datos (DBMS) de código abierto para bases de datos muy grandes, pero estructuradas. Gracias a la buena escalabilidad, estas bases de datos se pueden distribuir a diferentes clústeres, por lo que Cassandra no se encuentra unida a un único servidor.
Cassandra pertenece a las bases de datos NoSQL columnares. En este caso, NoSQL debe entenderse como “Not only SQL” (en Español “No solo SQL”) y no como “no SQL” (en Español “sin SQL”). En contraposición a las bases de datos SQL, las estructuras NoSQL ofrecen numerosas ventajas al procesar grandes volúmenes de datos, ya que no están sujetas a las limitaciones del lenguaje de consulta SQL (Structured Query Language). Apache Cassandra cuenta con un lenguaje de consulta propio, denominado Cassandra Query Language (CQL), que es muy parecido al SQL, pero preferido por los desarrolladores por estar hecho a la medida de las características especiales de Cassandra.
Como base de datos NoSQL, Cassandra cuenta con un enfoque redundante, lo que reduce mucho la probabilidad de fallo. Sin embargo, las bases de datos relacionales suelen tener problemas al replicar los datos.
Cassandra fue desarrollada por Avinash Lakshman y Prashant Malik en Facebook y publicada por primera vez en 2008. En el año 2009, la Apache Software Foundation, una de las comunidades de desarrolladores de código abierto más importantes, adquirió el proyecto como subproyecto de Apache Incubator. Desde febrero de 2011, Apache Cassandra ya es un proyecto independiente de máximo nivel dentro de la Apache Software Foundation, como el extendido servidor web Apache, el servidor de búsqueda Solr, la plataforma de mensajería Kafka o el proyecto sin duda más conocido de Apache, OpenOffice.
Al margen de los desarrolladores originales, otras grandes empresas como IBM, Twitter y Rackspace, uno de los mayores proveedores informáticos de EE. UU., contribuyen al desarrollo de Cassandra. Otra contribución importante es la que hace la empresa DataStax, especializada en soporte por suscripción, asistencia en la instalación y cursos de formación sobre la base de datos Cassandra.
Hoy en día, DataStax aporta aproximadamente el 80 % del desarrollo de código abierto de Cassandra y con DataStax Enterprise también ofrece una solución de bases de datos comercial basada en Cassandra.
Según la conocida clasificación de DB-Engines, Apache Cassandra es actualmente la base de datos columnar más popular, dejando atrás a grandes nombres como Microsoft Azure Cosmos DB o Google Cloud Bigtable.
Cassandra: sus funciones más importantes
Al tratarse de un auténtico sistema distribuido, Cassandra no usa un maestro. Todos los clústeres tienen el mismo rango y pueden procesar cualquier consulta de base de datos, lo que aumenta notablemente la capacidad de rendimiento. Los datos están distribuidos en los nodos. El sistema es fácilmente escalable debido a que se pueden añadir más nodos de manera muy sencilla. Una vez realizada la instalación, ya solo tendrás que distribuir los archivos de configuración entre los nuevos nodos. Cassandra ofrece herramientas propias para ello.
Para garantizar una baja probabilidad de fallo y el restablecimiento de los datos en caso de emergencia, Apache Cassandra cuenta con un sistema de replicación adecuadamente configurado. La tolerancia de error se minimiza porque los datos se replican automáticamente entre los nodos. Los nodos averiados se pueden sustituir muy fácilmente. El sistema permanece disponible para consultas en todo momento.
Además, Cassandra ofrece una gran disponibilidad y tolerancia de partición. Según el CAP theorem de la informática, nunca es posible cumplir los criterios de consistencia (Consistency), disponibilidad (Availability) y tolerancia de partición (Partition tolerance) a la vez. Por esta razón, la consistencia, es decir, el hecho de que todos los nodos visualicen los mismos datos en todo momento, tiene la menor prioridad en muchos sistemas de big data. Tras un fallo, la consistencia se puede recuperar relativamente rápido mediante el restablecimiento de los datos, mientras que los otros dos criterios deben cumplirse en todo momento.
Las bases de datos de Cassandra son compatibles con el modelo de programación de Google MapReduce para cálculos con grandes volúmenes de datos en sistemas distribuidos. El lenguaje propio de consulta de base de datos CQL (Cassandra Query Language) está adaptado específicamente a las estructuras de datos de Cassandra.
¿Qué ventajas ofrece Apache Cassandra?
Una de las ventajas más importantes de Cassandra es la buena escalabilidad en combinación con una probabilidad de fallo muy baja, dos condiciones indispensables para las aplicaciones de big data.
En el caso de Cassandra estamos ante una escalabilidad horizontal, lo que significa que la capacidad y el rendimiento del sistema se pueden aumentar mediante nodos adicionales. En el caso opuesto, la escalada vertical, hay que equipar el servidor único de la base de datos con procesadores más potentes y discos duros más grandes si el rendimiento o la capacidad ya no son suficientes para cumplir la demanda. La escalada horizontal es la solución más barata en la mayoría de los casos, ya que se puede utilizar el hardware de servidor disponible en el mercado.
El modelo de datos de Cassandra se basa en las Hash Tables (tablas hash), tablas en las que cada fila tiene un número determinado de columnas. A diferencia de una tabla de base de datos clásica, estas columnas no tienen que ser idénticas en todas las filas. Además, en escenarios de aplicación reales, Apache Cassandra destaca por su gran ventaja de velocidad frente a las demás bases de datos NoSQL.
¿Cuándo se usa Apache Cassandra?
Uno de los objetivos principales en el desarrollo de Cassandra era conseguir una opción de búsqueda cómoda para ayudar a los usuarios de Facebook a buscar datos en sus bandejas de entrada más fácilmente. El gigante corporativo usó un clúster con más de 150 nodos individuales para lograrlo. No es casualidad que Cassandra, que tiene unas estructuras básicas muy parecidas a las de Amazon Dynamo y Google Bigtable, triunfe actualmente entre los proveedores de grandes redes sociales que requieren la interconexión de grandes volúmenes de datos entre los usuarios. Algunos de los clientes más conocidos son Twitter, Instagram, Spotify, así como el sitio web Digg o el portal de noticias sociales Reddit.
Facebook cambió Cassandra por una creación propia compuesta por una combinación entre los sistemas de base de datos HBase y HDFS, ambos componentes del framework de Apache-Hadoop.
Hay otras redes con grandes volúmenes de datos que usan Cassandra como base de datos, ya sea como base de datos principal o como componente secundario para determinadas tareas. Algunos ejemplos serían eBay, GitHub, Netflix, The Weather Channel y el Large Hadron Collider de la Organización Europea para la Investigación Nuclear CERN (sobre 30 000 terabytes de datos al año), entre otros. Apple tiene una de las mayores instalaciones de Cassandra, la cual cuenta con 75 000 nodos.
Primeros pasos con Apache Cassandra
Apache Cassandra se ejecuta en sistemas similares a UNIX y, preferentemente, en servidores Linux. El entorno de ejecución de Java (runtime) también es necesario ya que Cassandra está programada en Java. Los paquetes de instalación están disponibles en los servidores Apache como paquetes Debian o RPM. Para la instalación, debes añadir el repositorio correspondiente. Tras la instalación, debes crear los típicos directorios de datos, caché y protocolo, y configurarlos en el archivo cassandra.yaml.
La administración de Cassandra se realiza mediante herramientas de líneas de comando propias. La más importante es la Shell de la Cassandra Query Language, cqlsh.
Con la siguiente orden accederás a una vista general de todos los comandos disponibles:
cqlsh --help
El siguiente vídeo de YouTube te ofrece una guía visual y una clara introducción a Cassandra:
DataStax ofrece OpsCenter, una herramienta web para la gestión y supervisión visual de sistemas Cassandra.