Architecture, performance et résilience
En bref :
- Les données CRISalid sont recopiées dans Django/PostgreSQL : une page publique n’interroge pas forcément Neo4j, ce qui est un actif.
- Mais le frontend mêle public, collaboratif, analytique et authentifié, et désactive tout cache HTTP.
- Nuxt 3 est hors support standard depuis le 31 juillet 2026 : migration Nuxt 4 obligatoire avant lancement.
Architecture observée
| Couche | Technologies | Responsabilité |
|---|---|---|
| Frontend | Nuxt 3.21.8, Vue, TypeScript, Nitro | Pages, SSR, collaboration, instrumentation client |
| Backend | Django, DRF, Celery | API, administration, permissions, synchronisations |
| Données | PostgreSQL (pgvector), OpenSearch, Redis | Modèles Projects, recherche, cache et broker |
| Graphe ESR | Neo4j + Apollo (CRISalid) | Personnes, structures, productions |
| Identité et mesure | Keycloak ; Sentry, Prometheus, Mixpanel | Authentification ; erreurs, métriques, analytics |
L’import CRISalid passe par services/crisalid/interface.py et services/crisalid/tasks.py (back). Ce read model est réutilisable par un portail découplé. En revanche, rien ne démontre encore que les services optionnels (Keycloak, collaboration, chatbot) peuvent être retirés du chemin critique d’une consultation anonyme.
Performance et chemin critique
| Élément | Constat | Niveau de preuve | Risque |
|---|---|---|---|
| Cache HTTP | cache: false et Cache-Control: no-store sur /** (front nuxt.config.ts:71-79) | Confirmé | Le CDN ne mutualise aucune réponse publique |
| Nitro | Chaque requête atteint le serveur de rendu | Déduit du précédent | TTFB variable, coût d’origine |
| Redis | Présent, couverture ponctuelle | Confirmé | Taux de hit non démontré |
| Recherche | Permissions, OpenSearch et réordonnancement applicatif | Confirmé | Coût à forte cardinalité à mesurer |
| Charge | Scénario Locust authentifié et de faible volume (back load-testing/locustfile.py) | Confirmé | Ne représente ni le public ni les robots |
| Images | Dimensions et srcset incomplets sur plusieurs vues | Confirmé | LCP, CLS, transfert inutile |
| Résilience | Service de la dernière version publiée pendant une panne amont | À confirmer | Indisponibilité évitable |
Des latences ont été observées en démonstration, sans origine établie : le read model PostgreSQL et OpenSearch interdisent de les attribuer d’office au graphe. Il faut une trace corrélée (CDN, Nuxt, API, PostgreSQL, OpenSearch, Redis, Apollo, hydratation). Protocole et seuils : plan de tests de performance.
Cycle de vie
Le snapshot déclare "nuxt": "3.21.8" (front package.json:154). Nuxt 3 est sorti du support standard le 31 juillet 2026 selon le calendrier retenu par l’audit (date à confirmer sur la politique de support Nuxt). Une migration vers Nuxt 4, ou un support de sécurité contractuel, est un prérequis non chiffré de l’option LPI adaptée.
Architecture recommandée
Le public ne dépend que de la projection et du CDN ; Keycloak, Apollo, Neo4j et l’administration restent en réseau privé, et la dernière version publiée reste servie si la source tombe. La vitrine en marque blanche réalise cette cible : pages générées depuis l’export, servies par un CDN ; les exigences d’exploitation sont dans exploitation et pilotage.