Un sistema distribuido es aquel en el que el fallo de un ordenador que ni siquiera sabías que existía puede inutilizar tu propio ordenador.
Aunque estas palabras premonitorias se pronunciaron en 1987, siguen siendo válidas en 2018. También subestima el problema.
En Couchbase, hemos estado en una misión para ofrecer una plataforma de base de datos de compromiso. Si estás construyendo un sistema atractivo para este mundo moderno, debe ser responsivo. Si tu aplicación es lenta en responder, un mensaje instantáneo o una notificación sobre un nuevo "insty" pueden distraer al usuario que está trabajando con tu aplicación. La falta de capacidad de respuesta de su aplicación significa la pérdida del usuario.
Pero hay un problema. En un sistema distribuido en el que hay muchos engranajes en funcionamiento, si sólo uno está ralentizando las cosas (¡y posiblemente sólo de forma ocasional!), ¿cómo identificarlo?
Necesitaremos un barco mejor
Como muchos de nuestros usuarios pueden atestiguar, Couchbase ya es bastante bueno encontrando el problema. Hace tiempo que disponemos de un conjunto de herramientas de diagnóstico, ya sea el métricas integradas en el SDK de JavaEl métricas avanzadas e información de perfil en N1QLo los umbrales y registros introducidos en Couchbase Server 5.0.
Nuestro sector tiende a ser más distribuido, con más capas de abstracción de más proveedores de nubes y contenedores. Al mismo tiempo, los sistemas modernos tienden a funcionar con latencias extremadamente bajas en estado estacionario, pero se espera que las tolerancias del sistema en cuanto a latencias sean más o menos las mismas cuando se produce una congestión ocasional o un error. Pasar de decenas de microsegundos a tiempos de espera en segundos (¡la especificación TCP exige esperar 1 segundo en una retransmisión TCP!) es como toparse de repente con un acantilado escarpado en una montaña.
De hecho, yo diría que probablemente tú mismo lo has experimentado. Mucha gente ha hecho una llamada de Skype/Hangout/Conferencia con vídeo de alta definición y audio estéreo de alta calidad. Pero también apostaría a que 100% de ellos han visto algunos fotogramas de vídeo atascado, algún ruido de vídeo ocasional y audio cortado o distorsionado.
Cuando tienes la suerte de haber exprimido muchos de los problemas fáciles y tus herramientas ya no son suficientes para encontrar la causa del siguiente problema difícil, es cuando innovas nuevas herramientas.
Usa la fuerza, desarrollador
Pero innovar en una solución no significa necesariamente empezar de cero.
Creemos en la idea de que la innovación se produce en otros lugares y creemos que nos interesa encontrar personas apasionadas y con ideas afines para colaborar en una solución.
El equipo y yo hicimos algunas investigaciones, y un conjunto de notas de investigación en Comunicaciones de la ACM el año pasado fue inspirador. Esto nos llevó al proyecto OpenTracing, que forma parte de la Cloud Native Compute Foundation. Couchbase es miembro de CNCF.
OpenTracing está trabajando para ser una API estandarizada para el rastreo distribuido. Mientras que en Couchbase no estamos en el negocio de la construcción de herramientas de rastreo, tenemos nuestras propias necesidades modestas y si podemos añadir y aprovechar la innovación de una comunidad, deberíamos hacerlo.
Basarse en una solución abierta también permite ampliar nuestro trabajo a un conjunto más amplio de piezas integradas construidas sobre las mismas interfaces.
Lo único que tiene que decidir es qué hacer con los horarios que le hemos dado*.
Con Couchbase Server 5.5, introduciremos una nueva función que denominamos Tiempo de respuesta Observabilidad. De este modo, los implantadores de sistemas dispondrán de una forma muy sencilla de observar los tiempos de respuesta en relación con un umbral (ajustable). El equipo ha estudiado detenidamente cómo hacer que este sistema sea eficiente y seguro para que esté siempre activo, así como las posibles complejidades de su despliegue.
Mike Goldsmith (que dirigió el desarrollo de la sdk-rfc) describe en su blog el ThresholdLoggingTracer como se conoce a un nivel inferior y cómo aprovecha OpenTracing, cuya API sigue evolucionando y a la que estamos contribuyendo.
Entonces en su blogEn este artículo, Michael Nitschinger describe cómo el SDK de Java implementa el ThresholdLoggingTracer de Couchbase y cómo la interfaz OpenTracing (actualmente volátil) puede ser utilizada por otros sistemas de trazado o incluso ampliada por los propios usuarios para observar mejor lo que ocurre con los sistemas.
Ya está disponible Couchbase Server 5.5 y será estupendo recibir comentarios en los foros o en nuestro rastreador de problemas.
* vale, esa referencia en particular puede ser un poco oscura, ¡pero alguien por ahí la apreciará!