From fcfc858299b8f1ee195287c711275681c5386c94 Mon Sep 17 00:00:00 2001 From: Florian Date: Tue, 26 May 2026 19:05:34 +0200 Subject: [PATCH] =?UTF-8?q?docs(vigilance):=20rectifier=20l'hypoth=C3=A8se?= =?UTF-8?q?=20load-balancer=20MF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit L'observation initiale était à >20h UTC, hors fenêtres de publication MF (04h/14h UTC). Diagnostic 60 fetches concurrents sans désynchro côté MF → l'origine est plus probablement notre cache / une requête transitoire. On conserve la mitigation à 3 fetches concurrents pour rester safe, à retirer si stabilité MF confirmée par observation suivie. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/lib/vigilance.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/lib/vigilance.ts b/src/lib/vigilance.ts index 407dbac..2914e58 100644 --- a/src/lib/vigilance.ts +++ b/src/lib/vigilance.ts @@ -90,11 +90,16 @@ async function fetchOpendatasoft(): Promise { // Plus frais qu'Opendatasoft (publication directe) et couvre tous les domaines // (métropole, côtes, prochainement Outre-mer via /vigilanceom/flux/dernier). // -// PIÈGE : le gateway MF (WSO2) load-balance entre plusieurs instances -// qui peuvent être désynchronisées (constaté 2026-05-26 : ~60% des hits -// retournaient le bulletin J-1 à 4h UTC, ~40% le bulletin J à 14h UTC). -// Mitigation : on fait N fetches concurrents et on garde la réponse avec -// le `update_time` le plus récent. N=3 atteint >95% de prob d'avoir le frais. +// Historique : une désynchro avait été observée (snapshot Vigilance d'apparence +// périmé) à >20h UTC le 2026-05-26 — loin des fenêtres de publication MF +// (04h / 14h UTC). Vérification 2026-05-26 ~15h UTC (`scripts/check-mf-loadbalancer.mjs`, +// 60 fetches concurrents) : 0 désynchro côté gateway WSO2. Origine plus probable +// = bruit local (cache Valkey servant un vieux snapshot, ou requête transitoire), +// pas le LB MF. +// +// Mitigation conservée prudemment : N fetches concurrents, on garde la réponse +// avec le `update_time` le plus récent. Coût négligeable (1 cold fetch / TTL). +// À retirer si on confirme plus tard que MF est stable (passer N à 1). const MF_PARALLEL_FETCHES = 3; const MF_ENDPOINT = '/public/DPVigilance/v1/cartevigilance/encours';