TTL y notificación de expiración

Couchbase incluye un TTL (Time To Live) como parte de los campos de metadatos de cada documento. Todos los SDK de cliente incluyen soporte para establecer/consultar/tocar este valor. El valor se establece como el "número de segundos que un documento debe vivir" para los documentos que deben expirar en 30 días o menos. Para valores superiores a 30 días se debe pasar un valor de tiempo de época unix. Los TTL se utilizan a menudo en almacenes de sesiones de alto rendimiento y aplicaciones de almacenamiento en caché. Lo que ocurre con una sesión cuando un documento expira puede ser problemático y engorroso de gestionar en el nivel de aplicación. ¿Qué pasaría si el alto rendimiento y la flexibilidad de Couchbase Server se aprovecharan para proporcionar callbacks para la expiración de documentos? Presentamos "expiry-notifier" de Couchbase Labs. La aplicación, el código fuente y las instrucciones pueden descargarse de el repositorio de couchbaselabs en github.**

Avisador de expiración de Couchbase Labs

La aplicación ejecuta una pequeña instancia de aplicación de node.js y express. Se configura y se accede a ella a través de una API REST. ¿Por qué Node.js? Node.js es una plataforma de aplicaciones bien soportada por Couchbase, es increíblemente ligera, gestiona su huella eficientemente y es muy adecuada para aplicaciones RESTful. Expiry-notifier puede ser llamado directamente o puede ser configurado para realizar automáticamente callbacks de expiración dentro de un intervalo de tiempo dado. La funcionalidad de devolución de llamada de caducidad devuelve los metaidentificadores y el tiempo de caducidad (o segundos hasta la caducidad) de los documentos que caducarán dentro de un intervalo de tiempo especificado.

Por ejemplo, para recibir un callback de caducidad de una aplicación que va a sondear directamente el servicio, se define un documento en Couchbase con una caducidad de 300 segundos como:


Clave (meta.id): triunfo

{
"valor": "1966 Triumph Spitfire Mark II 4 velocidades con sobremarcha y carburadores gemelos Weber."
}

Si expiry-notifier se está ejecutando, el tiempo relativo se ha establecido en true (más sobre esto en un segundo), y después de 10 segundos se llama al endpoint REST para sondear las callbacks de expiración:

http://servername:3000/poll/300

Se devolverá un objeto JSON:

{triumph:290}

Cómo funciona expiry-notifier

Expiry-notifier puede ejecutarse desde cualquier servidor que tenga instalado node.js. Una vez instalado expiry-notifier (las instrucciones se encuentran en en el repositorio de couchbaselabs en github), es necesario iniciar la aplicación. Desde el directorio raíz donde está instalada la aplicación, ejecute

"npm start"

Por defecto, la aplicación se ejecutará utilizando el puerto 3000. Para comprobar si la aplicación se está ejecutando, ejecute el siguiente comando REST:

"http://:3000/status"??????

Para configurar el servicio para comunicarse con un clúster couchbase, llame al siguiente comando REST:

“http://:3000/setup/server/192.168.60.101/8091/beer-sample”

El comando REST anterior se define como: /setup/server/:server/:port/:bucket [RETORNA: {JSON OBJECT} con cambio de estado].  Al llamar a este comando REST se realiza lo siguiente:

  • Instancia del cliente inteligente para comunicarse con el clúster Couchbase
  • Establece un índice ligero en couchbase que contiene metadatos sólo para el tiempo de caducidad.

Para configurar un endpoint para que el servicio envíe callbacks de caducidad a un servidor de aplicaciones utilice el siguiente comando REST:

"http://:3000/setup/endpoint//3000/receive_callback"

El comando REST anterior se define como: /setup/endpoint/:hostname/:port/:path/ [RETORNA: {JSON OBJECT} con cambio de estado]. Nota: el indicador "https" sólo se utiliza si expiry-notifier debe enviar devoluciones de llamada a través del protocolo https. Consulte la documentación para obtener información más específica.

Para comenzar a enviar llamadas de retorno al punto final definido anteriormente para los documentos que van a caducar en los próximos 30 segundos, y cada 30 segundos a partir de entonces, utilice el siguiente comando REST :

"http://:3000/setup/poll/30/loop"

El comando REST anterior se define como:/setup/poll/:interval/:loop [RETORNA: {JSON OBJECT} con cambio de estado] Este comando enviará un objeto JSON de meta id's y su caducidad en tiempo de época UNIX (número de segundos después del 1/1/1970 en que el documento está programado para caducar). Si se prefiere el número de segundos hasta que caduque el documento, utilice el comando siguiente.

Para devolver el número de segundos que faltan para que caduque un documento en lugar del tiempo de época UNIX utilice el siguiente comando:

"http://:3000/setup/relative/true"

El comando REST anterior se define como: /setup/relative/:bool [RETURNS: {JSON OBJECT} con cambio de estado]

** Descargo de responsabilidad: Couchbase Labs proporciona código experimental sólo con fines de investigación y desarrollo. El código y las aplicaciones de Couchbase Labs no están soportados bajo ningún Acuerdo de Soporte de Couchbase y se proporcionan tal cual, sin garantía de ningún tipo.  

Autor

Publicado por Todd Greenstein

Todd Greenstein es Arquitecto de Soluciones en Couchbase. Todd está especializado en diseño de APIs, arquitectura, modelado de datos y desarrollo en nodejs y golang.

1 Comentarios

  1. Muy buen artículo, y me encanta esta función.

    Pero, lo que realmente quiero es, característica incorporada con cuando un documento específico está caducado, CouchBase sí desencadena algo así como:
    http://TARGET_TO_RECEIVE/:bucket_name/:key
    con cuerpo de solicitud (opcional) para el candidato que se borra.

    TARGET_TO_RECEIVE se configura a través de CouchBase admin.

    1. ¿Tienen previsto implementar esta función en futuras versiones?

    O, CB sí mismo dejar un registro con el documento caducado, sería de gran ayuda para mí, pero no puedo encontrar separados registro de caducidad con el siguiente enlace:
    http://docs.couchbase.com/admi

    2. ¿Deja CB un registro de expiración de documentos? Mejor aún, ¿deja dicho registro en un archivo de registro separado, es decir, expired.log?

Dejar una respuesta