Herramientas y SDK

Qué es OpenTracing y por qué es importante

Ya hemos hablado anteriormente de por qué la observabilidad del sistema es importante en los sistemas distribuidos y de los retos que puede ayudar a superar - si te lo perdiste, puedes ver Matt Ingenthron introducción a el problema aquíA continuación, discutiremos por qué el equipo del SDK de Couchbase seleccionó OpenTracing como su API de rastreo y por qué creemos que es algo importante. También haremos una breve introducción a los SDK. ThresholdLoggingTracer con el SDK .NET (En OpenTracing, .NET se utiliza como vehículo para demostrar el trazador, una funcionalidad similar estará disponible en cada uno de los SDKs).

¿Por qué OpenTracing?

OpenTracing es una API estandarizada que describe cómo estructurar la información de rastreo dentro de un entorno de sistema distribuido y cómo una solicitud puede cruzar los límites de un proceso. OpenTracing nos permite separar los datos que se recogen del mecanismo que los recoge y hace algo con ellos. Otra gran ventaja para nosotros es que OpenTracing es independiente del proveedor, lo que significa que podemos ofrecer la máxima flexibilidad para utilizar una implementación de seguimiento distribuido personalizada o de terceros sin tener que adherirnos a un protocolo de red prescrito o a una estructura de datos en tránsito.

En Couchbase, la observabilidad y la integración de OpenTracing son importantes para nosotros. Sabemos que somos parte de una solución de cliente más grande y queremos ayudar a informar la vista de lo que está pasando con elementos que conocemos. Para los SDKs de Couchbase definimos una colección de pasos que describen el viaje que una petición (Get, Upsert, etc) toma desde que es enviada hasta que una respuesta está lista. En el mundo OpenTracing, estos pasos se llaman **Span**s y tienen información de tiempo (inicio / fin). Los spans también se pueden "etiquetar" con información adicional, como IDs, nombres de endpoints, detalles de red, etc. Toda esta información es útil para ayudar a tomar una instantánea de lo que estaba pasando en ese momento.

Cada uno de los SDKs define los siguientes Spans para una solicitud:

Paso Descripción
solicitar codificación Transcodificar el contenido del documento de un objeto nativo a una cadena JSON
envío al servidor Enviar la solicitud a través de la red y esperar una respuesta
descodificación de la respuesta Transcodificar el contenido del documento de respuesta de una cadena JSON a un objeto nativo

NOTA: la codificación de la solicitud y la descodificación de la respuesta sólo son necesarias para algunas operaciones. Por ejemplo, Get omitiría "codificación de la solicitud".

Además de todo el trabajo específico del SDK, el servidor Couchbase ha sido mejorado para devolver la duración de la operación como parte de las respuestas KV para coincidir con otros servicios como N1QL, FTS y Analytics. Esto se codifica directamente en el paquete de respuesta y será analizado utilizando el SDK durante el procesamiento. Esto ayuda a determinar si se ha empleado un tiempo inusualmente largo en el servicio de una operación y puede utilizarse para ayudar a identificar la causa de una operación lenta (por ejemplo, lectura desde disco).

A continuación, la API OpenTracing describe un Tracer como la cosa que crea y recoge Spans y hace algo con ellos. Los SDKs de Couchbase proporcionan una implementación de Tracer llamada ThresholdLoggingTracer (véase más abajo). Este es un modesto trazador que agrega peticiones que exceden un umbral específico del servicio y luego las escribe en un registro en un intervalo dado, incluyendo un número total y una pequeña muestra de los peores infractores. Por supuesto, el número y los umbrales son ajustables, ya que hay una gran variedad de entornos en los que se despliega Couchbase.

Un punto clave a mencionar aquí es que los SDKs de Couchbase permiten intencionadamente reemplazar la implementación del Tracer. Esto nos da el beneficio de permitir que la implementación de Tracer sea intercambiada (personalizada o Producto) sin requerir que ninguna lógica interna sea modificada.

Encontrará más información sobre la especificación OpenTracing en aquí.

ThresholdLoggingTracer utilizando C# .NET

Vale, hasta ahora hemos hablado mucho de teoría, pero vamos a mostrarla en acción. El siguiente es un ejemplo sencillo de la ThresholdLoggingTracer en acción en el SDK .NET.

Hemos intentado seleccionar valores por defecto razonables para el ThresholdLoggingTracer para equilibrar la captura de detalles valiosos con el no spam de los archivos de registro. Además, a partir de la próxima versión menor de cada SDK, todo esto estará habilitado por defecto. Eso significa que lo tendrás todo gratis, ¡sin hacer nada extra!

Un ejemplo de la salida del registro se parece a esto (tenga en cuenta que este formato puede cambiar entre DP, beta y GA - ¡se necesitan comentarios!):

En el ejemplo anterior puede ver que agrupamos las operaciones por tipo, por ejemplo "kv", y damos un número total de operaciones que superaron el umbral definido por el servicio. También hay una muestra de las operaciones más lentas que proporcionan detalles adicionales. Esta información puede ser muy valiosa a la hora de diagnosticar un problema. Las muestras también incluyen la propiedad "server_us" que indica durante cuánto tiempo estuvo el servidor procesando esa operación.

CNCF

Fundación para la Computación Nativa en la Nube (CNCF) es una comunidad de proyectos de software de código abierto construidos con contenedores y que forman parte de un ecosistema de microservicios desde el principio. Es un recurso valioso que permite a los proyectos colaborar con ingenieros de talento y ganar visibilidad mientras maduran. Esto es extremadamente importante para los proyectos pequeños, para garantizar que reciben apoyo y darles un trampolín hacia la naturaleza.

OpenTracing ha sido aceptado en este programa y es un incubando proyecto. Esto sólo ayudará a mejorar su visibilidad y alcance, lo que sólo puede ser bueno tanto para ellos como para nosotros a medida que el proyecto madure y crezca.

Por supuesto, dado que aún se está incubando y el estándar OpenTracing aún no ha alcanzado la versión 1.0, esto significa que la interfaz que ofreceremos desde los SDK de Couchbase seguirá la evolución del estándar. Eso significa que nuestra interfaz estará marcada como no comprometido por el momento, y puede cambiar incluso entre microediciones. Intentaremos actualizarlo a comprometido cuando OpenTracing llegue a 1.0.

Próximos pasos

Ahora que hemos explorado las razones por las que Couchbase seleccionó OpenTracing como nuestra API de rastreo y lo que nos ha permitido ofrecer a nuestros usuarios, podemos discutir cómo utilizar el rastreador fuera de la caja y cómo integrarlo con otras soluciones de rastreo. Michael Nitschinger va a profundizar en Observabilidad del tiempo de respuesta con el SDK Java de Couchbase y, a continuación, mostrar cómo integrar con el Jaeger sistema de rastreo.

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

Autor

Publicado por Mike Goldsmith, Ingeniero Senior SDK, Couchbase

Mike Goldsmith es un Ingeniero Senior SDK en Couchbase con amplia experiencia en proyectos de big data. Recientemente Mike disfrutó mucho trabajando con Docker.

3 Comentarios

  1. Gracias Mike por este artículo.

    Usted menciona: Las muestras también incluyen la propiedad "server_us" que indica durante cuánto tiempo estuvo el servidor procesando esa operación.

    También veo server_duration_us propiedad, ¿puede ayudar a entender cuál es la diferencia entre los 2?

  2. Mike Goldsmith, Ingeniero Senior SDK, Couchbase julio 26, 2019 a 6:39 am

    Esto parece ser un error en el JSON que ahora se ha solucionado. Solo hay una propiedad server_us que representa la cantidad de tiempo que se tarda en procesar la solicitud en el servidor.

  3. Gracias, Mike.

    ¿El SDK de C también incluye una función de rastreo similar y, en caso afirmativo, imprimiría rastreos/registros similares?

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.