Translate

domingo, 26 de mayo de 2019

Clases que componen Apache Cassandra


Hay un conjunto de clases que forman los mecanismos básicos de control interno de Cassandra. Ya nos hemos encontrado con algunos de ellos en post anteriores, incluidos Hinted HandOffManager, CompactionManager y StageManager. Aquí presentamos una breve descripción de algunas otras clases para que pueda familiarizarse con algunas de las más importantes. Muchos de ellos exponen los MBeans a través de Java Management Extension (JMX) para informar el estado y las métricas y, en algunos casos, permitir la configuración y el control de sus actividades.

La interfaz org.apache.cassandra.service.CassandraDaemon representa el ciclo de vida del servicio Cassandra ejecutándose en un solo nodo. Incluye las operaciones típicas de ciclo de vida que se podrían esperar: iniciar, detener, activar, desactivar y destruir.

También puede crear una instancia de Cassandra en memoria mediante programación utilizando la clase org.apache.cassandra.service.EmbeddedCassandraService. Crear una instancia embebida puede ser útil para los programas de prueba unitaria que usan Cassandra.

La funcionalidad de almacenamiento de datos principal de Cassandra se conoce comúnmente como el motor de almacenamiento, que consiste principalmente en clases en el paquete org.apache.cassandra.db. El punto de entrada principal es la clase ColumnFamilyStore, que administra todos los aspectos del almacenamiento de tablas, incluidos los registros de confirmación, memtables, SSTables e índices.

Cassandra encasula el motor de almacenamiento en servicio representado por la
clase org.apache.cassandra.service.StorageService. El servicio de almacenamiento contiene el token del nodo, que es un marcador que indica el rango de datos de los que es responsable el nodo.
El servidor se inicia con una llamada al método initServer de esta clase, en el que el servidor registra los controladores SEDA, realiza algunas determinaciones sobre su estado (por ejemplo, si fue un programa de arranque o no, y cuál es su particionador), y registra un MBean con el servidor JMX.

El propósito de org.apache.cassandra.net.MessagingService es crear listeners de socket para el intercambio de mensajes; los mensajes entrantes y salientes de este nodo llegan a través de este servicio. El método MessagingService.listen crea un hilo. Cada conexión entrante luego se sumerge en el grupo de subprocesos ExecutorService usando org.apache.cassandra.net.IncomingTcpConnection (una clase que extiende Thread) para deserializar el mensaje. El mensaje se valida y luego se enruta al controlador apropiado.

Debido a que MessagingService también hace un uso intensivo de las etapas y el grupo que mantiene está envuelto con un MBean, puede descubrir mucho sobre cómo está funcionando este servicio (si las lecturas se están respaldando y demás) a través de JMX.

La transmisión por secuencias es la forma optimizada de Cassandra de enviar secciones de archivos SSTable de un nodo a otro a través de una conexión TCP persistente; todas las demás comunicaciones entre nodos se producen a través de mensajes serializados. org.apache.cassandra.streaming.StreamManager maneja estos mensajes de transmisión, incluida la administración de la conexión, la compresión de mensajes, el seguimiento de progreso y las estadísticas.

Nos quedan unas cuantas clases que seguiremos viendo en una parte 2.