Servidor Couchbase

Certificación del rendimiento de Couchbase Autonomous Operator en Kubernetes

En Couchbase nos tomamos el rendimiento muy en serio, y con el lanzamiento de nuestro nuevo producto, Couchbase Autonomous Operator 1.0, queríamos asegurarnos de que es de nivel empresarial y está listo para la producción para los clientes.

En esta entrada del blog vamos a discutir los resultados detallados de rendimiento de la ejecución de pruebas de rendimiento YCSB en Couchbase Server 5.5 utilizando el Operador Autónomo para desplegar en la plataforma Kubernetes. Una de las grandes preocupaciones de las empresas que planean ejecutar bases de datos en Kubernetes es el rendimiento.

Este documento ofrece una comparación rápida de dos cargas de trabajo, a saber YCSB A & E con Couchbase Server 5.5 en Kubernetes frente al metal desnudo.

Carga de trabajo YCSB A: Esta carga de trabajo tiene una mezcla de 50/50 lecturas y escrituras. Un ejemplo de aplicación es un almacén de sesiones que registra acciones recientes.

Carga de trabajo E: Rangos cortos: En esta carga de trabajo, se consultan rangos cortos de registros, en lugar de registros individuales. Ejemplo de aplicación: conversaciones hilvanadas, en las que cada búsqueda corresponde a los mensajes de un hilo determinado (se supone que se agrupan por identificador de hilo).

En general, no observamos una degradación significativa del rendimiento al ejecutar Couchbase Cluster en Kubernetes, La carga de trabajo A tuvo un rendimiento a la par en comparación con el metal desnudo y la carga de trabajo E tuvo aproximadamente menos de 10% de degradación. 

Configurar:

Para la configuración, Couchbase se instaló utilizando el despliegue Operator como se indica a continuación. Para más detalles sobre la instalación, consulte aquí

Archivos:

Despliegue del operador: deployment.yaml (Véase el Apéndice)

Despliegue de Couchbase: couchbase-cluster-simple-selector.yaml (Ver Apéndice)

Despliegue del cliente/generador de carga de trabajo: pillowfight-ycsb.yaml (Ver Apéndice) (Imagen docker oficial de pillowfight desde dockerhub e instalado java y YCSB manualmente sobre ella)

Hardware:

7 servidores

24 CPU x 64 GB RAM por servidor

Configuración de Couchbase

4 servidores: 2 nodos de datos, 2 nodos de índice+consulta

Cuota de 40 GB de RAM para el servicio de datos

Cuota de 40 GB de RAM para servicios de índice

1 réplica de datos/cubo

1 réplica de índice primario

Pruebas:

YCSB Carga de trabajoA y Carga de trabajoE

10 millones de documentos

Flujo de trabajo tras inicializar un nuevo clúster k8s vacío en 7 servidores:

 

Ejecución de las cargas de trabajo:

 

Resultados de las pruebas:

Env Configuración directa Recursos del pod Kubernetes Prueba Metal desnudo Kubernetes Delta
Env 1 22 vCPU, 48 GB RAM

(los núcleos de CPU y la RAM disponible se establecen en el nivel de núcleo del sistema operativo)

Limitar a:

cpu: 22000m = ~22vCPU

mem: 48 GB

Todos los pods están en nodos dedicados

Carga de trabajoA

50/50 get/upsert

Rendimiento: 194,158 req/seg

Uso medio de la CPU: 86% de los 22 núcleos

Rendimiento: 192,190 req/seg

Uso medio de CPU: 94% de la cuota de cpu

– 1%
Env 2 16 vCPU, 48 GB RAM

(los núcleos de CPU y la RAM disponible se establecen en el nivel de núcleo del sistema operativo)

Limitar a:

cpu: 16000m = ~16vCPU

mem: 48 GB

Todos los pods están en nodos dedicados

Carga de trabajoA

50/50 get/upsert

Rendimiento: 141,909 req/seg

Uso medio de la CPU: 89% de los 16 núcleos

Rendimiento: 145,430 req/seg

Uso medio de CPU: 100% de la cuota de cpu

+ 2.5%

Env Configuración directa Recursos del pod Kubernetes Prueba Metal desnudo Kubernetes Delta
Env 1 22 vCPU, 48 GB RAM

(los núcleos de CPU y la RAM disponible se establecen en el nivel de núcleo del sistema operativo)

Limitar a:

cpu: 22000m = ~22vCPU

mem: 48 GB

Todos los pods están en nodos dedicados

Carga de trabajoE

95/5 escanear/insertar

Rendimiento: 15,823 req/seg

Uso medio de la CPU: 85% de los 22 núcleos

Rendimiento: 14,281 req/seg

Uso medio de CPU: 87% de la cuota de cpu

– 9.7%
Env 2 16 vCPU, 48 GB RAM

(los núcleos de CPU y la RAM disponible se establecen en el nivel de núcleo del sistema operativo)

Limitar a:

cpu: 16000m = ~16vCPU

mem: 48 GB

Todos los pods están en nodos dedicados

Carga de trabajoE

95/5 escanear/insertar

Rendimiento: 13,014 req/seg

Uso medio de la CPU: 91% de los 16 núcleos

Rendimiento: 12,579 req/seg

Uso medio de CPU: 100% de la cuota de cpu

– 3.3%

Conclusiones:

Couchbase Server 5.5 está listo para ser desplegado en Kubernetes con el Operador Autónomo. Rendimiento de Couchbase Server 5.5 en Kubernetes comparable a la ejecución en metal desnudo.   Hay poca penalización de rendimiento en la ejecución de Couchbase Server en la plataforma Kubernetes. Si se observan los resultados, la carga de trabajo A tuvo un rendimiento similar al de la carga básica y la carga de trabajo E sufrió una degradación inferior a 10%.

Referencias:

  1. Carga de trabajo de YCSB https://github.com/brianfrankcooper/YCSB/wiki/Core-Workloads
  2. Página de Couchbase Kubernetes https://www.couchbase.com/products/cloud/kubernetes
  3. Descargar Couchbase Autonomous Operator https://www.couchbase.com/downloads  
  4. Presentación de Couchbase Operator https://www.couchbase.com/blog/couchbase-autonomous-operator-1-0-for-kubernetes-and-openshift/

Anexo

Mi archivo deployment.yaml

Mi archivo couchbase-cluster-simple-selector.yaml

 

Mi archivo pillowfight-ycsb.yaml

 

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

Autor

Publicado por Raju Suravarjjala, Director Senior, Ingeniería de Calidad, Couchbase

Raju Suravarjjala es Director Senior de Ingeniería de Calidad en Couchbase. Está muy versado en la gestión de equipos de varios tamaños y está especializado en pruebas de sistemas distribuidos. Tiene alrededor de 20 años de experiencia en la industria trabajando con varias empresas de tecnología como Gupta SQLBase, Zaplet, Plumtree, BEA Systems y Oracle. Posee un máster en informática por la Universidad de Luisiana en Lafayette y es licenciado en ingeniería mecánica por la Universidad Tecnológica Jawaharlal Nehru de la India.

2 Comentarios

  1. Querido Raju,

    Es un buen blog.
    Por favor, actualízalo un poco para que sea más fácil seguirlo.

    Dos comentarios:

    Comentario#1:
    sequoiatools/pillowfight:v5.0.1 parece estar construido sobre coreos y por lo tanto no tiene un gestor de paquetes específicamente no tiene apt-get.

    Comentario#2
    Los pasos que se indican a continuación ya no funcionan, ya que se ha producido algún cambio en el acuerdo de licencia de Oracle Java.
    sudo apt-add-repository ppa:webupd8team/java

    -Gracias

  2. He instalado el JDK 11.

    Tengo el siguiente error al utilizar "-p couchbase.epoll=true"

    Carga de trabajo...
    Prueba inicial.
    Tiempo máximo de ejecución especificado como 120 segundos
    ADVERTENCIA: Se ha producido una operación de acceso reflexivo ilegal
    ADVERTENCIA: Illegal reflective access by com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0 (file:/opt/ycsb-couchbase2-binding-0.15.0/lib/core-io-1.3.1.jar) to field java.nio.Buffer.address
    ADVERTENCIA: Por favor, considere informar de esto a los mantenedores de com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0
    ADVERTENCIA: Utilice -illegal-access=warn para activar advertencias de nuevas operaciones ilegales de acceso reflexivo.
    ADVERTENCIA: Todas las operaciones de acceso ilegales serán denegadas en una futura versión.
    Aug 23, 2019 9:15:34 AM com.couchbase.client.deps.io.netty.util.internal.PlatformDependent
    INFO: Tu plataforma no proporciona una API de bajo nivel completa para acceder a buffers directos de forma fiable. A menos que se solicite explícitamente, siempre se preferirá el búfer de montón para evitar una posible inestabilidad del sistema.
    com.yahoo.ycsb.DBException: No se pudo conectar a Couchbase Bucket.
    at com.yahoo.ycsb.db.couchbase2.Couchbase2Client.init(Couchbase2Client.java:208)
    at com.yahoo.ycsb.DBWrapper.init(DBWrapper.java:86)
    at com.yahoo.ycsb.ClientThread.run(Client.java:424)
    at java.base/java.lang.Thread.run(Thread.java:834)
    Causado por: java.lang.IllegalStateException: failed to create a child event loop
    at com.couchbase.client.deps.io.netty.util.concurrent.MultithreadEventExecutorGroup.(MultithreadEventExecutorGroup.java:68)
    at com.couchbase.client.deps.io.netty.channel.MultithreadEventLoopGroup.(MultithreadEventLoopGroup.java:49)
    at com.couchbase.client.deps.io.netty.channel.epoll.EpollEventLoopGroup.(EpollEventLoopGroup.java:91)
    at com.couchbase.client.deps.io.netty.channel.epoll.EpollEventLoopGroup.(EpollEventLoopGroup.java:67)
    at com.yahoo.ycsb.db.couchbase2.Couchbase2Client.init(Couchbase2Client.java:195)
    ... 3 más
    Causado por: java.lang.NullPointerException
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0.allocateMemory(PlatformDependent0.java:330)
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent.allocateMemory(PlatformDependent.java:210)
    at com.couchbase.client.deps.io.netty.channel.epoll.IovArray.(IovArray.java:64)
    at com.couchbase.client.deps.io.netty.channel.epoll.EpollEventLoop.(EpollEventLoop.java:60)
    at com.couchbase.client.deps.io.netty.channel.epoll.EpollEventLoopGroup.newChild(EpollEventLoopGroup.java:106)
    at com.couchbase.client.deps.io.netty.util.concurrent.MultithreadEventExecutorGroup.(MultithreadEventExecutorGroup.java:64)
    ... 7 más

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.