Translate

martes, 19 de marzo de 2019

Los VNodes de Cassandra


Las primeras versiones de Cassandra asignaron un solo token a cada nodo, de una manera bastante estática, que requiere que se calcule tokens para cada nodo. Aunque hay herramientas disponibles para calcular tokens en función de un número dado de nodos, todavía era un proceso manual para configurar la propiedad initial_token para cada nodo en un archivo cassandra.yaml. Esto también hizo que agregar o reemplazar un nodo fuera una operación costosa, ya que rebalancear el clúster requería mover una gran cantidad de datos.

La versión 1.2 de Cassandra introdujo el concepto de nodos virtuales, también llamados vnodos para abreviar. En lugar de asignar un solo token a un nodo, el rango del token se divide en múltiples rangos más pequeños. A cada nodo físico se le asignan múltiples tokens. De forma predeterminada, a cada nodo se le asignarán 256 de estos tokens, lo que significa que contiene 256 nodos virtuales. Los nodos virtuales han sido habilitados por defecto desde 2.0.

Los Vnodes facilitan el mantenimiento de un clúster que contiene máquinas heterogéneas. Para los nodos de un clúster que tienen más recursos informáticos disponibles, se puede aumentar el número de vnodos estableciendo, la propiedad num_tokens en el archivo cassandra.yaml. A la inversa, puede establecer num_tokens más bajo para disminuir el número de vnodes para máquinas menos capaces.

Cassandra maneja automáticamente el cálculo de los rangos de token para cada nodo en un clúster en proporción a su valor num_tokens. Las asignaciones de tokens para vnodes se calculan mediante la clase org.apache.cassandra.dht.tokenallocator.ReplicationAwareTokenAllocator.

Una ventaja adicional de los nodos virtuales es que aceleran algunas de las operaciones más pesadas de Cassandra, como el arranque de un nuevo nodo, la clausura de un nodo y la reparación de un nodo. Esto se debe a que la carga asociada con las operaciones en múltiples rangos más pequeños se distribuye de manera más uniforme entre los nodos del clúster. Onda como se ve en la imagen de arriba.