Hector es una API de cliente de alto nivel para Apache Cassandra . Nombrada en honor a Héctor , un guerrero de Troya en la mitología griega , es un sustituto del Cliente Java de Cassandra, o Thrift, [ 2 ] que está encapsulado por Hector. [ 3 ] También tiene acceso al repositorio Maven . [ 4 ]
Historia
Dado que Cassandra se distribuye con el protocolo Thrift de bajo nivel , existía la posibilidad de desarrollar un protocolo mejor para los desarrolladores de aplicaciones. Ran Tavory desarrolló Hector como una interfaz de alto nivel que subsana las deficiencias de Thrift. Su licencia es MIT, lo que permite usar, modificar, dividir y cambiar su diseño.
Características
Las características de alto nivel de Héctor son [ 2 ]
- Interfaz orientada a objetos de alto nivel para Cassandra: Se inspira principalmente en Cassandra-java-client. La API se define en la interfaz Keyspace.
- Agrupación de conexiones. Como en las aplicaciones de gran escala, el patrón habitual para las DAO es un gran número de lecturas/escrituras. Abrir nuevas conexiones con cada solicitud resulta demasiado costoso para los clientes. Por lo tanto, un cliente puede quedarse sin sockets disponibles si opera con suficiente rapidez. Hector proporciona agrupación de conexiones y un marco de trabajo eficiente que gestiona los detalles.
- Soporte de conmutación por error: Como Cassandra es un almacén de datos distribuido donde los hosts ( nodos ) pueden fallar, Hector tiene su propia política de conmutación por error .
- Compatibilidad con JMX : Hector expone JMX para muchas métricas importantes en tiempo de ejecución, como el número de conexiones disponibles, las conexiones inactivas y las estadísticas de errores.
- Balanceo de carga : En la versión más reciente existe un balanceo de carga simple. [ 5 ]
- Admite el patrón de diseño de comandos para permitir que los clientes se concentren en su lógica de negocio y dejen que Hector se encargue de la infraestructura necesaria.
Métricas de disponibilidad
Hector expone contadores de disponibilidad y estadísticas a través de JMX . [ 6 ]
Balanceo de carga
Hector sigue dos políticas de balanceo de carga con la LoadBalancingPolicyinterfaz. La predeterminada se llama RoundRobinBalancingPolicyy es un algoritmo de distribución round-robinLeastActiveBalancingPolicy simple. Enruta las solicitudes a los grupos con el menor número de conexiones activas, asegurando una buena distribución de la utilización en todo el clúster. [ 7 ]
Agrupación
Esto ExhaustedPolicydetermina cómo se controlan los grupos de conexiones de clientes subyacentes. Actualmente, hay tres opciones disponibles: [ 8 ]
Ejemplos de código
A modo de ejemplo, se muestra una implementación de una tabla hash distribuida simple sobre Cassandra.
/** * Inserta un nuevo valor indexado por la clave * @param key Clave para el valor * @param value El valor String a insertar */ public void insert ( final String key , final String value ) throws Exception { execute ( new Command (){ public Void execute ( final Keyspace ks ) throws Exception { ks . insert ( key , createColumnPath ( COLUMN_NAME ), bytes ( value )); return null ; } }); }/** * Obtiene un valor de cadena. * @return El valor de cadena; null si no existe ningún valor para la clave dada. */ public String get ( final String key ) throws Exception { return execute ( new Command (){ public String execute ( final Keyspace ks ) throws Exception { try { return string ( ks . getColumn ( key , createColumnPath ( COLUMN_NAME )). getValue ()); } catch ( NotFoundException e ) { return null ; } } }); }/** * Elimina una clave de Cassandra */ public void delete ( final String key ) throws Exception { execute ( new Command (){ public Void execute ( final Keyspace ks ) throws Exception { ks . remove ( key , createColumnPath ( COLUMN_NAME )); return null ; } }); }Referencias
- ^ "Versiones · hector-client/Hector" . GitHub .
- ^ a b Ran Tavory. "Hector – un cliente Java Cassandra" . PrettyPrint.me. Archivado del original el 26/11/2010 . Recuperado el 23/03/2011 .
Cassandra proporciona de forma predeterminada un cliente Thrift básico, que está bien, pero carece de muchas características esenciales para los clientes del mundo real. He creado Hector para llenar este vacío.
Estas son las características principales de Hector, actualmente alojado en GitHub.
- Una interfaz orientada a objetos de alto nivel para Cassandra.
- Soporte para conmutación por error.
- Agrupación de conexiones.
- Soporte JMX.
- Se ofrece compatibilidad con el patrón de diseño Command para que los clientes puedan concentrarse en su lógica de negocio y dejar que Hector se encargue de la infraestructura necesaria.
- ^ "Cliente Hector para Apache Cassandra: Encapsulación de la API de Thrift" (PDF) . DataStax . Consultado el 12 de abril de 2011. Hector ahora
encapsula completamente la API de Thrift, por lo que los desarrolladores solo tienen que interactuar con el cliente Hector utilizando patrones de diseño conocidos. La API original sigue estando disponible para que los usuarios actuales migren sus proyectos y para quienes se sientan cómodos trabajando con Thrift.
- ^ "Cliente Hector para Apache Cassandra: totalmente Mavenizado" (PDF) . DataStax . Consultado el 12 de abril de 2011. Desde el lanzamiento de la versión beta de Cassandra 0.7.0 ,
Riptano ha estado ofreciendo acceso al repositorio Maven para las dependencias necesarias para el uso de Cassandra a través de Hector.
- ^ Ran Tavory. "Balanceo de carga y conmutación por error mejorada en Hector" . PrettyPrint.me. Archivado del original el 26/04/2011 . Recuperado el 23/03/2011 .
He añadido una función de balanceo de carga muy simple, así como un comportamiento de conmutación por error mejorado a Hector. Hector es un cliente Java Cassandra, para leer más sobre él, consulte mi publicación anterior Hector: un cliente Java Cassandra. En la versión 0.5.0-6 añadí balanceo de carga para pobres, así como un comportamiento de conmutación por error mejorado.
- ^ "Cliente Hector para Apache Cassandra: Disponibilidad de métricas" (PDF) . DataStax . Consultado el 12 de abril de 2011. Para
facilitar operaciones más fluidas y una mejor comprensión de las características de rendimiento, Hector expone contadores de disponibilidad y, opcionalmente, estadísticas de rendimiento a través de JMX.
- ^ "Cliente Hector para Apache Cassandra: Balanceo de carga básico" (PDF) . DataStax . Recuperado el 12 de abril de 2011. Hector
proporciona balanceo de carga conectable a través de la
interfaz. De forma predeterminada, se proporcionan dos implementaciones básicas:
(la predeterminada) y
.
enruta las solicitudes a los grupos con el menor número de conexiones activas. Esto garantiza una buena distribución de la utilización en todo el clúster al enviar las solicitudes a la máquina que tiene la menor cantidad de conexiones.
implementa un algoritmo de distribución round-robin simple.
LoadBalancingPolicyLeastActiveBalancingPolicyRoundRobinBalancingPolicyLeastActiveBalancingPolicyRoundRobinBalancingPolicy - ^ "Cliente Hector para Apache Cassandra: Configuración de la agrupación" (PDF) . DataStax . Consultado el 12 de abril de 2011. El
comportamiento de los grupos subyacentes de conexiones de cliente se puede controlar mediante ExhaustedPolicy. […]
Enlaces externos
- Ahorro Apache
- Héctor en GitHub
- El cliente Java de Cassandra
- computación distribuida
- Almacenes de datos distribuidos
- Java (lenguaje de programación)