
ScyllaDB es una de las bases de datos NoSQL más nuevas que ofrece un rendimiento realmente alto en latencias de menos de milisegundos. El punto importante es que logra esto a una fracción del costo de una base de datos NoSQL moderna.
ScyllaDB implementa casi todas las características de Cassandra en C ++. Pero decir que es un mero puerto C ++ sería quedarse corto. Los desarrolladores de Scylla han realizado muchos cambios bajo el capó que no son visibles para el usuario pero que conducen a una gran mejora del rendimiento.
¿Usted está tomando el pelo derecho?
No no soy.
Como puede ver (si fue a ese enlace), en la mayoría de los casos, la latencia del percentil 99,9 de Scylla es de 5 a 10 veces mejor que la de Cassandra.
También en los puntos de referencia mencionados aquí, un clúster Scylla estándar de 3 nodos ofrece casi el mismo rendimiento que un clúster Cassandra de 30 nodos (lo que conduce a una reducción de 10 veces en el costo).
¿Cómo es esto posible?
El punto más importante es que Scylla está escrito en C ++ 14. Por lo tanto, se espera que sea más rápido que Cassandra, que se ejecuta exclusivamente en JVM.
Sin embargo, ha habido muchas optimizaciones significativas de bajo nivel en Scylla que lo hacen mejor que su competencia.
Enfoque de nada compartido
Cassandra se basa en hilos para el paralelismo. El problema es que los hilos requieren un cambio de contexto, que es lento.
Además, para la comunicación entre subprocesos, debe bloquear la memoria compartida, lo que nuevamente da como resultado una pérdida de tiempo de procesamiento.
ScyllaDB usa el marco seastar para fragmentar las solicitudes en cada núcleo. La aplicación solo tiene un hilo por núcleo. De esta manera, si el núcleo 1 está manejando una sesión y una solicitud de consulta para esa sesión llega al núcleo 2, se dirige al núcleo 1 para su procesamiento. Cualquiera de los núcleos puede manejar la respuesta después de eso.
La ventaja del enfoque de nada compartido es que cada subproceso tiene su propia memoria, CPU y colas de búfer de NIC.
En los casos en que no se puede evitar la comunicación entre núcleos, Seastar ofrece una comunicación entre núcleos asincrónica sin bloqueo que es altamente escalable. Estas primitivas sin bloqueo incluyen Futuros y Promesas, que se usan con bastante frecuencia en programación y, por lo tanto, son amigables para los desarrolladores.
Evite el kernel
Cuando se encuentra una fila en una SSTable, debe enviarse a través de la red al cliente. Esto implica copiar datos del espacio del usuario al espacio del kernel.
Sin embargo, el kernel de Linux generalmente realiza operaciones de bloqueo de subprocesos múltiples que no son escalables.
ScyllaDB se encarga de esto mediante el uso de la pila de red de Seastar.
La pila de red de Seastar se ejecuta en el espacio del usuario y utiliza DPDK para un procesamiento de paquetes más rápido. DPDK omite el kernel para copiar los datos directamente al búfer de la NIC y procesa un paquete en 80 ciclos de CPU. (fuente: sitio web de DPDK)
No confíe en la caché de página
La caché de página es excelente cuando tiene E / S secuenciales y los datos se almacenan en el disco en formato de cable.
Sin embargo, en Scylla / Cassandra, tenemos datos en forma de SSTables. La caché de página almacena datos en el mismo formato, lo que ocupa una gran cantidad de memoria para datos pequeños y necesita serialización / deserialización cuando desea transferirlos.
ScyllaDB, en lugar de depender de la caché de página, asigna la mayor parte de su memoria a la caché de filas.
Row-Cache tiene los datos en un formato de memoria optimizado que ocupa menos espacio y no necesita serialización / deserialización
Otra ventaja de utilizar la caché de filas es que no se elimina cuando se produce la compactación mientras se tritura la caché de la página.
Estas son las principales optimizaciones en ScyllaDB que lo hacen mucho más rápido, más confiable y más barato que Cassandra. Scylla tiene muchas otras optimizaciones bajo el capó que se pueden encontrar aquí.
Si tiene curiosidad sobre más diseños como los anteriores o si desea ponerse en contacto, conéctese conmigo en LinkedIn o Facebook o envíe un correo electrónico a [email protected]