Documentation for a newer release is available. View Latest

Archiving

Archiving agrupa y exporta datos de unidades de trabajo en un sobre estándar de IPF Processing Data. Solo las unidades de trabajo que han alcanzado un estado terminal serán "archived".

Descripción general

El comportamiento de Archiving se detalla en el siguiente diagrama de secuencia.

Diagram

ODS Ingestion realiza la selección de candidatos y publica esos candidatos en una notificación ReadyForArchive en un tópico de Kafka.

IPF Archiver consume las notificaciones y, para cada candidato, obtiene todos sus datos y produce un archive bundle, que se publica en Kafka.

Selección de candidatos

La selección de candidatos es donde se identifican las unidades de trabajo listas para archivar. La realiza ODS Ingestion y está deshabilitada por defecto.

Los candidatos se seleccionan cuando han alcanzado un estado terminal; p. ej., tienen una marca de tiempo finishedAt, y esa marca está dentro de la ventana de selección de una hora actual.

Ventana de selección

La ventana de selección es un periodo de una hora. Se realizan consultas para unidades de trabajo que han finalizado dentro de esa ventana. La ventana de selección siempre es una fecha y una hora; p. ej., {2023-12-18, 7} es una ventana el 18 diciembre 2023 con un rango de tiempo de [07:00..08:00).

La marca de tiempo finishedAt de una unidad de trabajo debe satisfacer {finishedAt | lowerBound ⇐ finishedAt < upperBound} para ser elegible para la selección de candidatos.

Cuando se han seleccionado todos los candidatos de una ventana, se avanza a la siguiente, p. ej., {2023-12-18, 8}, luego {2023-12-18, 9}, y así sucesivamente. Al final del día, p. ej., {2023-12-18, 23}, la siguiente ventana es {2023-12-19, 0}.

La marca de tiempo finishedAt y las consultas de ventana de selección están siempre en UTC; p. ej., una ventana {2023-12-18, 9} tiene un límite inferior 2023-12-18T09:00:00Z y un superior 2023-12-18T09:59:59.999999999Z.

Periodo de gracia

El periodo de gracia es el tiempo que la selección de candidatos esperará antes de que una unidad de trabajo sea elegible para archivar. Debe expresarse en horas o días, y el periodo mínimo es 1 hora.

El inicio del periodo de gracia se calcula restando el periodo de gracia a la hora actual.

Ejemplo: si es 2023-12-18T13:49:21Z y el periodo de gracia es una hora, el límite inferior del periodo de gracia es la hora actual 13, menos 1 hora, resultando en 2023-12-18T12:00:00Z. Como se ignoran los minutos y segundos, el periodo real suele ser mayor que el configurado, hasta 00:59:59.999999 más.

Comportamiento inicial de selección

Cuando la selección de candidatos se ejecuta por primera vez, debes indicar desde dónde comenzar, p. ej., la primera ventana. Si no se configura explícitamente, se registrará una advertencia y la selección de candidatos fallará.

Una vez que la selección de candidatos se haya ejecutado al menos una vez con éxito, esta configuración no tiene efecto.

Date

La ventana inicial puede ser una fecha de inicio configurada, que siempre es al comienzo de ese día; p. ej., una fecha 2023-12-01 resulta en una ventana inicial {2023-12-01, 0}.

Latest

Toma la fecha y hora actuales, resta el periodo de gracia y comienza en la hora anterior a esa.

Si es 2023-12-18T13:49:21Z, la hora actual es 13. Resta 1 hora de gracia, resultando 12, y comienza desde la hora anterior, 11. La ventana inicial es {2023-12-18, 11}.

Visualización

Dada la hora actual 15:15, el periodo de gracia es 4-hours, o [11:00..15:15], y la ventana de selección actual es [9..10).

candidate selection 1

Una vez seleccionados todos los candidatos en la ventana, la ventana avanza a [10..11).

candidate selection 2

Una vez seleccionados todos los candidatos en esa ventana, avanza a [11..12).

candidate selection 3

Esta ventana de selección ahora está dentro del periodo de gracia. No se seleccionan candidatos hasta que el tiempo avance, de modo que la ventana esté fuera del periodo de gracia.

candidate selection 4

Cuando la hora actual llega a 16:00, el periodo de gracia pasa a [12:00..16:00], y la ventana [11:00..12:00) se vuelve elegible. Los candidatos dentro de esta ventana ahora serán seleccionados.

Notificaciones Ready For Archive

Los candidatos que se seleccionan para archivar se publican en una notificación ReadyForArchive, que contiene los candidatos seleccionados, la ventana dentro de la que se seleccionaron y su número de secuencia dentro de la ventana de selección actual.

Notificaciones y reintentos

  • Las notificaciones ReadyForArchive incluyen la ventana y un índice de secuencia.

  • Los consumidores deben ser idempotentes; los reintentos pueden provocar la recepción del mismo mensaje más de una vez.

Persistencia y estado

  • ODS Ingestion mantiene el estado de la ventana de selección actual.

  • En reinicios, reanuda desde la última ventana procesada correctamente, respetando el periodo de gracia.

Configuración

  • Habilitar selección de candidatos: ods.archiving.candidate-selection.enabled = true

  • Definir periodo de gracia: ods.archiving.candidate-selection.grace-period = 4h

  • Comportamiento inicial:

    • Fecha fija: ods.archiving.candidate-selection.initial.date = 2023-12-01

    • O más reciente: ods.archiving.candidate-selection.initial.latest = true

IPF Archiver

  • Consume ReadyForArchive, obtiene todos los datos de la unidad de trabajo y publica ArchiveBundle en Kafka.

  • Marca la unidad de trabajo como archivada tras publicar correctamente el bundle.

Consideraciones operativas

  • Monitorizar lag de Kafka y métricas de selección.

  • Ajustar el periodo de gracia si los sistemas upstream son lentos en consolidar estados terminales.

  • Asegurar la disponibilidad de ODS para lectura intensiva durante las ventanas de archivado.

Fallos y recuperación

  • Si Archiver falla después de publicar ArchiveBundle pero antes de marcar como archivado, la marca se repetirá de forma segura en el siguiente intento.

  • Si falla antes de publicar, el candidato permanecerá sin archivar y será reintentado.

Métricas y observabilidad

  • Exportar métricas vía Actuator/Prometheus para ventanas procesadas, candidatos seleccionados y bundles generados.

Seguridad

  • Asegurar los tópicos de Kafka y los accesos a la base de datos conforme a las políticas de la organización.

Ejemplo de despliegue

  • Ver la documentación de despliegue de ODS e IPF Archiver para docker/kubernetes, variables y secretos.