ventajas - historia de cassandra db
¿Cuáles son las diferencias entre un nodo, un clúster y un centro de datos en una base de datos cassandra nosql? (3)
Estoy tratando de duplicar datos en una base de datos cassandra nosql para un proyecto escolar usando el centro de operaciones de Datastax. Por lo que he leído, hay tres palabras clave: clúster, nodo y centro de datos, y según lo que he entendido, los datos en un nodo se pueden duplicar en otro nodo, que existe en otro clúster. Y todos los nodos que contienen los mismos datos (duplicados) componen un centro de datos. ¿Está bien?
Si no es así, ¿cuál es la diferencia?
Nodo:
Una máquina que almacena una parte de su base de datos completa. Esto puede incluir datos replicados de otro nodo además de sus propios datos. De qué datos es responsable está determinado por sus rangos de tokens y la estrategia de replicación del espacio de claves que contiene los datos.
Centro de datos:
Una agrupación lógica de nodos que se puede separar de otros nodos. Un caso de uso común es AWS-EAST vs AWS-WEST. La replicación NetworkTopologyStrategy
se usa para especificar cuántas réplicas del espacio de claves completo debería existir en cualquier centro de datos determinado. Así es como los usuarios de Cassandra logran la replicación cross-dc. Además, son políticas de nivel de consistencia que solo requieren reconocimiento solo dentro del centro de datos del coordinador ( LOCAL_*
)
Racimo
La suma total de todas las máquinas de su base de datos, incluidos todos los centros de datos. No hay replicación entre clusters.
Un nodo es una sola máquina que ejecuta Cassandra. Una colección de nodos con datos similares se agrupan en lo que se conoce como "anillo" o grupo.
A veces, si tiene muchos datos o si está publicando datos en diferentes áreas geográficas, tiene sentido agrupar los nodos de su clúster en diferentes centros de datos. Un buen caso de uso de esto, es para un sitio web de comercio electrónico, que puede tener muchos clientes frecuentes en la costa este y la costa oeste. De esta forma, sus clientes en la costa este se conectan con su DC de la costa este (para un rendimiento más rápido), pero finalmente tienen acceso al mismo conjunto de datos (ambos DC están en el mismo clúster) que los clientes de la costa oeste.
Puede encontrar más información al respecto aquí: Acerca de Apache Cassandra: ¿Cómo funciona Cassandra?
Y todos los nodos que contienen los mismos datos (duplicados) componen un centro de datos. ¿Está bien?
Cerca, pero no necesariamente. El nivel de duplicación de datos que tiene está determinado por su factor de replicación, que se establece por cada espacio de teclado. Por ejemplo, digamos que tengo 3 nodos en mi DC único, todos ellos almacenan 600 GB de datos de productos. La definición del espacio de claves de mis products
puede verse así:
CREATE KEYSPACE products
WITH replication = {''class'': ''NetworkTopologyStrategy'', ''MyDC'': ''3''};
Esto asegurará que los datos de mi producto se repliquen por igual a los 3 nodos. El tamaño de mi conjunto de datos total es de 600 GB, duplicado en los 3 nodos.
Pero digamos que estamos ampliando una nueva línea de productos bastante grande, y estimo que tendremos otros 300 GB de datos por venir, lo que puede comenzar a impulsar la capacidad máxima de nuestros discos duros. Si no podemos permitirnos actualizar todos nuestros discos duros en este momento, puedo modificar el factor de replicación de esta manera:
CREATE KEYSPACE products
WITH replication = {''class'': ''NetworkTopologyStrategy'', ''MyDC'': ''2''};
Esto creará 2 copias de todos nuestros datos y los almacenará en nuestro clúster actual de 3 nodos. El tamaño de nuestro conjunto de datos ahora es de 900 GB, pero como solo hay dos copias (cada nodo es esencialmente responsable de 2/3 de los datos) nuestro tamaño en el disco sigue siendo de 600 GB. El inconveniente aquí es que (suponiendo que leo y escribo en un nivel de coherencia de ONE
), solo puedo permitirme sufrir una pérdida de 1 nodo. Mientras que con 3 nodos y un RF de 3 (nuevamente leyendo y escribiendo en consistencia ONE
), podría perder 2 nodos y seguir atendiendo solicitudes.
La jerarquía de elementos en Cassandra es:
- Racimo
- Centros de datos)
- Estante (s)
- Servidor (s)
- Nodo (más exactamente, un vnode)
- Servidor (s)
- Estante (s)
- Centros de datos)
Un clúster es una colección de centros de datos.
Un centro de datos es una colección de racks.
Un Rack es una colección de Servidores.
Un servidor contiene 256 nodos virtuales (o vnodes) de manera predeterminada.
Un vnode es la capa de almacenamiento de datos dentro de un servidor.
Nota: Un servidor es el software de Cassandra. Un servidor está instalado en una máquina, donde una máquina es un servidor físico, una instancia EC2 o similar.
Ahora para abordar específicamente sus preguntas.
Una unidad individual de datos se llama partición. Y sí, las particiones se replican en varios nodos. Cada copia de la partición se llama una réplica.
En un clúster de centros de datos múltiples, la replicación es por centro de datos. Por ejemplo, si tiene un centro de datos en San Francisco llamado dc-sf y otro en Nueva York llamado dc-ny, puede controlar el número de réplicas por centro de datos.
Como ejemplo, puede configurar dc-sf para tener 3 réplicas y dc-ny para tener 2 réplicas.
Esos números se llaman factor de replicación. Diría específicamente que dc-sf tiene un factor de replicación de 3 y dc-ny tiene un factor de replicación de 2. En términos simples, dc-sf tendría 3 copias de los datos distribuidos en tres vnodes, mientras que dc-sf tendría 2 copias de los datos distribuidos en dos vnodes.
Si bien cada servidor tiene 256 vnodes de manera predeterminada, Cassandra es lo suficientemente inteligente como para elegir vnodes que existen en diferentes servidores físicos.
Para resumir:
- Los datos se replican a través de múltiples nodos virtuales (cada servidor contiene 256 vnodes por defecto)
- Cada copia de los datos se llama una réplica
- La unidad de datos se llama partición
- La replicación está controlada por centro de datos