Cassandra - Arquitectura
El objetivo de diseño de Cassandra es manejar cargas de trabajo de big data en múltiples nodos sin ningún punto único de falla. Cassandra tiene un sistema distribuido de igual a igual en todos sus nodos y los datos se distribuyen entre todos los nodos de un clúster.
Todos los nodos de un clúster desempeñan el mismo papel. Cada nodo es independiente y al mismo tiempo está interconectado con otros nodos.
Cada nodo de un clúster puede aceptar solicitudes de lectura y escritura, independientemente de dónde se encuentren realmente los datos en el clúster.
Cuando un nodo deja de funcionar, las solicitudes de lectura / escritura se pueden atender desde otros nodos de la red.
Replicación de datos en Cassandra
En Cassandra, uno o más de los nodos de un clúster actúan como réplicas de un dato determinado. Si se detecta que algunos de los nodos respondieron con un valor desactualizado, Cassandra devolverá el valor más reciente al cliente. Después de devolver el valor más reciente, Cassandra realiza unread repair en segundo plano para actualizar los valores obsoletos.
La siguiente figura muestra una vista esquemática de cómo Cassandra usa la replicación de datos entre los nodos de un clúster para garantizar que no haya un solo punto de falla.
Note - Cassandra usa el Gossip Protocol en segundo plano para permitir que los nodos se comuniquen entre sí y detecten cualquier nodo defectuoso en el clúster.
Componentes de Cassandra
Los componentes clave de Cassandra son los siguientes:
Node - Es el lugar donde se almacenan los datos.
Data center - Es una colección de nodos relacionados.
Cluster - Un clúster es un componente que contiene uno o más centros de datos.
Commit log- El registro de confirmación es un mecanismo de recuperación de fallos en Cassandra. Cada operación de escritura se escribe en el registro de confirmación.
Mem-table- Una tabla de memoria es una estructura de datos residente en memoria. Después del registro de confirmación, los datos se escribirán en la tabla de memoria. A veces, para una familia de una sola columna, habrá varias mem-tables.
SSTable - Es un archivo de disco al que se vacían los datos de la tabla de memoria cuando su contenido alcanza un valor umbral.
Bloom filter- Estos no son más que algoritmos rápidos, no deterministas, para probar si un elemento es miembro de un conjunto. Es un tipo especial de caché. Se accede a los filtros Bloom después de cada consulta.
Lenguaje de consulta de Cassandra
Los usuarios pueden acceder a Cassandra a través de sus nodos utilizando Cassandra Query Language (CQL). CQL trata la base de datos(Keyspace)como contenedor de mesas. Los programadores utilizancqlsh: un mensaje para trabajar con CQL o controladores de idioma de aplicaciones independientes.
Los clientes se acercan a cualquiera de los nodos para sus operaciones de lectura y escritura. Ese nodo (coordinador) juega un proxy entre el cliente y los nodos que contienen los datos.
Operaciones de escritura
Cada actividad de escritura de los nodos es capturada por el commit logsescrito en los nodos. Posteriormente los datos serán capturados y almacenados en elmem-table. Siempre que la tabla de memoria esté llena, los datos se escribirán en el SStablearchivo de datos. Todas las escrituras se particionan y replican automáticamente en todo el clúster. Cassandra consolida periódicamente las SSTables, descartando los datos innecesarios.
Leer operaciones
Durante las operaciones de lectura, Cassandra obtiene valores de la tabla de memoria y comprueba el filtro de floración para encontrar la SSTable adecuada que contenga los datos necesarios.