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.
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.
La configuración del comportamiento inicial se detalla más abajo.
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).
Una vez seleccionados todos los candidatos en la ventana, la ventana avanza a [10..11).
Una vez seleccionados todos los candidatos en esa ventana, avanza a [11..12).
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.
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 y reintentos
-
Las notificaciones
ReadyForArchiveincluyen 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 publicaArchiveBundleen 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
ArchiveBundlepero 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.