Eventos

Uso de OnDeploy en Couchbase Eventing para controlar las mutaciones con una configuración previa

El problema: “Sin estado” no significa “sin configuración”.”

Couchbase Eventing está diseñado intencionadamente como un lambda sin estado y de corta duración: reacciona a una mutación, realiza alguna tarea y sale. Ese modelo es limpio, hasta que tu función de eventos necesita único limpieza antes de poder procesar de forma segura la primera mutación.

Históricamente, los desarrolladores solucionaban este problema realizando un “calentamiento de primera mutación” dentro de OnUpdate, a menudo con escrituras o contadores CAS seguros, de modo que solo un hilo cargara un estado compartido. Ese enfoque puede funcionar, pero te obliga a depender de una mutación solo para establecer los requisitos previos y traslada las preocupaciones de configuración a la parte más crítica de la ruta del código: el procesamiento de mutaciones.

Por eso precisamente era necesario un concepto de inicialización sin mutaciones en Eventing: una fase de configuración explícita que pudiera ejecutarse sin una mutación inicial y preparara la función antes de que comenzara el trabajo real.

La idea: una lista de verificación previa al vuelo.

OnDeploy es un nuevo controlador de eventos que se ejecuta una vez cuando una función Eventing es:

  • desplegadoo
  • reanudado (después de haber estado en pausa)

Y, lo que es más importante, Se ejecuta antes de que se procesen las mutaciones..

Si piensas en tu función de Eventing como si fuera un avión:

  • OnUpdate / OnDelete son las operaciones de vuelo.
  • OnDeploy es la verificación previa al vuelo.
  • Si la verificación previa al vuelo falla, el avión no sale de la pista.

Ese comportamiento de “guardián” es la clave: si OnDeploy Si falla, la función vuelve al estado anterior. – Protegiéndote de situaciones en las que “la lógica mal configurada se pone en marcha”.

Cómo funciona: OnDeploy(acción)

Si define un OnDeploy handler en el código de su función de eventos, se invocará una vez con un acción argumento.

Dónde:

  • razón de la acción es uno de:
    • “implementar”: implementación de una nueva función de eventos
    • “currículum”: reanudación después de una pausa
  • retraso de la acción es:
    • 0 en “implementar”
    • la duración efectiva de la pausa (en milisegundos) en “currículum”

Dos barandales de seguridad importantes

  1. Tiempo de espera: OnDeploy debe terminar dentro del tiempo configurado Tiempo de espera de OnDeploy (por defecto: 60 segundos). Si se excede el tiempo de espera, no se permite continuar con la implementación de la función.
  2. Semántica de fallo rápido: Si OnDeploy genera un error o falla, no se procesan mutaciones y la función permanece en su estado anterior.

Por qué es importante

OnDeploy no es solo “algo que está bien tener”. Es un cambio en la forma en que se pueden diseñar las funciones de Eventing:

  • Lo correcto primero: Asegúrate de que se cumplan los requisitos previos antes de ejecutar cualquier lógica de escritura.
  • Menos texto repetitivo: Eliminar los trucos de coordinación de hilos de OnUpdate.
  • Menor tiempo hasta la primera mutación correcta: Calienta las cachés una vez, no por cada subproceso.
Aspecto Sin OnDeploy  Con OnDeploy
Inicialización En OnUpdate (propenso a las carreras) Una vez, antes de las mutaciones
Coordinación de hilos Requerido No es necesario.
Garantía de configuración Mejor esfuerzo Garantía de fracaso rápido
Seguridad en la implementación Posibles fallos silenciosos Bloqueado si falla la configuración

Casos prácticos

  • Se necesita una tabla de consulta (precios, tipos de cambio, configuraciones) antes de que se permita cualquier mutación sobre datos incompletos.
  • Quieres una tarea recurrente (una vez al día, una vez a la hora), pero no quieres “fingir” una mutación solo para iniciar una temporizador.
  • Desea que la función se niegue a ejecutarse si faltan los requisitos previos, ya que es mejor bloquear la implementación que producir escrituras incorrectas de forma silenciosa.

Ejemplo 1: Calentar una tabla de búsqueda una vez y programar una actualización diaria.

Escenario

Enriquece los documentos con los precios de las acciones al cierre de la jornada. Los precios se obtienen diariamente de una API REST externa, se almacenan en un documento KV y se utilizan en todas las mutaciones posteriores.
Con OnDeploy, puedes realizar el calentamiento. una vez, garantizado, antes de que se procese cualquier mutación.

Código

Las ventajas de esta lógica:

  • Sin sorpresas con la “primera mutación que realiza la configuración”.
  • Sin complejidad de hilos cruzados en el interior. OnUpdate.
  • Toda mutación comienza cuando se dan las condiciones necesarias.

Ejemplo 2: Tratar de manera diferente la implementación y la reanudación con OnDeploy

Escenario

A veces, el trabajo no consiste en “programar el trabajo”, sino en Haz que tu función sea segura para iniciar (o reiniciar)..

Por ejemplo, su función Eventing podría depender de:

  • datos externos (se pueden obtener mediante enlaces cURL en la primera implementación) y
  • configuración almacenada en Couchbase (que debe recargarse después de una pausa)

Esto encaja perfectamente con OnDeploy, ya que le permite Comportamiento de las ramas basado en el ciclo de vida y asegúrate de que tu función esté lista. antes de procesar cualquier mutación.

Código


Este patrón mantiene la lógica del ciclo de vida explícita y clara:

  • Despliegue se convierte en el momento en que realizas el trabajo inicial de arranque.
  • Currículum se convierte en el momento en que reconcilia/actualiza la configuración después de hacer una pausa (retraso de la acción te indica cuánto tiempo has estado en pausa).
  • Sus controladores de mutación se mantienen enfocados en la lógica de negocio porque pueden asumir que los requisitos previos ya se cumplen.

Orientación sobre el diseño: qué no que hacer en OnDeploy

OnDeploy es potente, pero tiene limitaciones deliberadas:

  • Guárdalo. corto y determinista.
  • Evita los bucles de larga duración que podrían retrasar la implementación.
  • Trátalo como código de infraestructura: valida los requisitos previos, inicializa el estado compartido, programa el trabajo y luego sal.

Conclusión

OnDeploy aporta un cambio fundamental a Couchbase Eventing: la capacidad de garantizar que se cumplan los requisitos previos antes de que se procese una sola mutación. En lugar de dispersar la lógica de inicialización entre los controladores de mutación o depender de trucos de calentamiento propensos a fallos, ahora dispone de una única comprobación previa explícita que se ejecuta una sola vez y falla rápidamente si algo sale mal.

¿El resultado? Código más limpio, implementaciones más seguras y la confianza de que tus funciones de Eventing se inician siempre en un estado óptimo.

¿Listo para probarlo? OnDeploy está disponible a partir de Couchbase Server 8.0 y versiones posteriores. Consulte la documentación que aparece a continuación para empezar y piense cuáles de sus funciones de Eventing actuales podrían beneficiarse de este patrón.

Referencias

 

 

 

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

Autor

Publicado por Hiren Bavaskar

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.