Servidor Couchbase

Mejoras del servicio de índices en Couchbase Server 7.2.2 : Parte 2

Esta es la segunda parte de un blog de dos partes. Parte 1 debate sobre el servicio Index escalado mejoras implementadas en Couchbase Server 7.2.2. Esta segunda parte se centra en reducción de los gastos generales de memoria y E/S de disco.

Reducción de la sobrecarga de memoria del proceso de indexación

El servicio de índices de Couchbase Server intenta mantener tantos datos "calientes" en memoria como sea posible para servir escaneos de índices más rápidamente. Pero, el servicio de índices también requiere algo de memoria para realizar actividades de gestión de índices. Hay muchas sobrecargas de memoria. En Couchbase Server 7.2.2, hemos reducido mucha sobrecarga de memoria ajustando los parámetros. Los valores actualizados de los parámetros ayudan a los clusters con configuración de gama baja, sin apenas impacto en el rendimiento de los nodos de configuración de gama alta. A continuación figura una lista de mejoras específicas:

Reducción de la sobrecarga de memoria de la cola de mutación

El proceso de indexación mantiene una cola de mutación para almacenar en caché las actualizaciones entrantes del servicio de datos (a través de flujos DCP). Cada 10 ms, el contenido de la cola se descarga en el almacenamiento del índice. Una vez realizada la operación de vaciado de la cola, se crea una instantánea del índice.

Por defecto, el tamaño máximo de la cola de mutación era de 256MB. En Couchbase Server 7.2.2, el tamaño máximo de la cola de mutación será determinado dinámicamente como 1% de la cuota de memoria. Para un nodo con una cuota de memoria de 4GB, el tamaño máximo de la cola de mutación será de 40MB.

Tenga en cuenta que no se trata de un límite estricto. La cola siempre contendrá el número mínimo requerido de mutaciones. En Couchbase Server 7.2.2, ese número mínimo requerido (valor por defecto) también se reduce de 50 elementos a 30 elementos. También hemos implementado un ajuste dinámico de este número mínimo de 30 a 20 y eventualmente a 10, cuando la memoria heap en uso del proceso indexador aumenta. Una vez que la memoria de montón en uso disminuye, el valor vuelve a ajustarse de 10 a 20 y finalmente a 30. 

Esta mejora está activada por defecto tanto para Capella como para los clusters autogestionados.

Tamaño reducido del búfer de almacenamiento

Una vez que las mutaciones se vuelcan en el almacenamiento de índices, las mutaciones residen en los búferes de almacenamiento antes de ser procesadas. El tamaño de los búferes de almacenamiento se calcula como: número de hilos de CPU * 200. Los búferes de almacenamiento son únicos para cada instancia/partición de índice, por lo que a medida que aumenta el número de índices, también aumenta la sobrecarga debida a los búferes de almacenamiento.

En Couchbase Server 7.2.2, hemos reducido el tamaño máximo de los búferes de almacenamiento a:  número de hilos de CPU * 20. El tamaño del búfer se reduce aún más si la cuota de memoria es inferior a 16 GB. Esto reduce la sobrecarga del búfer de almacenamiento en un factor de 10 o más. Esta mejora está activada por defecto tanto para Capella como para los clústeres autogestionados.

Compactación de la cola de solicitudes de instantáneas de índices

Como se ha mencionado anteriormente, el proceso de indexación activa la creación de una instantánea cada 10 ms. Cuando se recibe una ráfaga de mutaciones, el almacenamiento del índice puede ralentizarse temporalmente, por lo que el vaciado de la cola de mutaciones puede tardar más de 10ms. Si la situación se mantiene así durante unos minutos, se pondrán en cola muchas peticiones de instantáneas de índice. 

En Couchbase Server 7.2.2, hemos introducido la compactación de la cola de peticiones de instantáneas de índice, lo que reduce la sobrecarga de memoria. Esta mejora está habilitada por defecto tanto para Capella como para clusters autogestionados.

Compartir LSS entre instancias de índices

El almacenamiento de índices de Couchbase se implementa como un Almacenamiento estructurado de registros (LSS) para lograr el mejor rendimiento. Cada instancia de LSS tiene asignados recursos únicos (archivos de disco, búferes de descarga, etc.). 

A partir de Couchbase Server 7.2.2, Capella, por defecto, hará cumplir el uso compartido de instancias LSS a través de múltiples nodos indexadores. Si un índice ya está creado con una instancia LSS dedicada, continuará usando esa instancia LSS dedicada después de la actualización. Esta mejora ha producido una buena reducción de la sobrecarga de memoria (de más de 1 GB a menos de 30 MBya que 484 índices comparten ahora 6 instancias LSS).

Compartir LSS es habilitado por defecto sólo en clusters Capella. Para clústeres autogestionados, se puede habilitar mediante el siguiente comando REST:

curl -X POST -u http://:9102/settings --data '{"indexer.plasma.useSharedLSS" : verdadero}'

Otras mejoras

Filtros Bloom

El servidor Couchbase había introducido filtros bloom para el servicio de índices en la versión 7.1. Pero los usuarios tienen que habilitarlos explícitamente. Los filtros de floración son utilizados por la capa de almacenamiento de índices para reducir la E/S de disco y mejorar así la eficiencia global del servicio de índices. 

A partir de Couchbase Server 7.2.2, el servicio de índice tendrá filtros bloom activado por defecto. Esto reduce las búsquedas en disco del servicio de índices, con la contrapartida de un pequeño aumento de los gastos generales de memoria. Los filtros de floración muestran sus ventajas sobre todo en las cargas de trabajo de inserción intensiva.

Compresión Zstd

El almacenamiento de índices utiliza la compresión en dos casos de uso: compresión de archivos en disco y compresión de páginas índice en memoria. Los archivos en disco se comprimen con compresión rápidamientras que las páginas en memoria se comprimen con Compresión Zstd. Debido al uso de dos algoritmos diferentes, el almacenamiento de índices tenía que realizar un ciclo de descompresión y compresión al recuperar las páginas de índice del disco. 

A partir de Couchbase Server 7.2.2, el almacenamiento de índices ahora utiliza Compresión Zstd para archivos en disco también. Esto evita un ciclo innecesario de descompresión y compresión durante la obtención del disco. Además, se sabe que Zstd ofrece una mejor relación de compresión. Esto conduce a una utilización eficiente del disco i/o en entornos de nube. 

¿Y ahora qué?

Más información sobre los productos Couchbase:

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Amit Kulkarni

Amit Kulkarni trabaja como Director de Ingeniería en Couchbase en Índices Secundarios Globales. Tiene experiencia en tecnologías como sistemas distribuidos, bases de datos NoSQL distribuidas, almacenamiento en la nube, virtualización del almacenamiento, etc.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.