Skip to content

[DOC] ADR sur le stockage et la production de données destinées à la mise à disposition #11447

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 31, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/adr/0059-mise-a-disposition-de-donnees.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Date : 2025-02-11

## État

En cours de rédaction
Validée

## Contexte

Expand Down
58 changes: 58 additions & 0 deletions docs/adr/0060-production-de-donnees-a-mettre-a-disposition.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# 60. Production de données à mettre à disposition

Date : 2025-02-18

## État

Validée

## Contexte

Le stockage de données à mettre à disposition est fragmenté dans deux bases de données, la base de données "live" de
`pix-api` et la base de données de `pix-dwh-api-data` (aussi appelée "datamart").
La production de ces données est réalisée par divers mécanismes comme le montre le schéma suivant (flèches en bleu).

![Schéma d'architecture données froides actuelle](../assets/0060-donnees-froides-architecture-actuelle.png)

On peut constater que :

- les données `pole-emploi-sendings` sont produites par `pix-api` et stockées dans la base de données "live"
- les données `parcoursup` sont produites par l'équipe Data et stockées dans le datawarehouse
- le datawarehouse est répliqué via dump/restore par Airflow, notre orchestrateur, dans la base de
données `pix-dwh-api-data`.

Le schéma du datamart n'est pas maitrisé par`pix-api` et peut être changé sans possibilité de rétro-compatibilité.
Il est alors complexe de maintenir des tests de non-régression sur ces données.

La réplication via un process de dump/restore présente plusieurs inconvénients tels que:

- absence de données en cas de dysfonctionnement du restore
- copies volumineuses (car complètes) coûteuses en temps et en ressources
- pas de garantie de l'intégrité du schéma car le restore recrée une table de zéro.

Les données, qui ont pour unique vocation la mise à disposition, sont stockées dans la base de données "live" et
augmentent inutilement la pression sur celle-ci (en termes de volume et de trafic).

## Solution

L'introduction de la nouvelle brique d'API de "Mise A Disposition de Données" implique d'avoir la maitrise du schéma du
datamart pour assurer la continuité de service.
Ainsi, le schéma est préservé et les modifications de celui-ci sont entièrement à la main de l'API MADDO.
Des tests de non-régression seront donc plus faciles à maintenir.
Il sera également possible d'assurer une rétro-compatibilité en cas de changement du schéma.

D'autre part, on propose de déplacer le stockage de toutes les données à mettre à disposition vers la base de données
adhoc (ie. le datamart).

Le schéma qui suit montre l'architecture cible.

![Schéma d'architecture données froides cible](../assets/0060-donnees-froides-architecture-cible.png)

Remarque : Metabase n'est plus utilisé dans le cadre de la mise à disposition de données dans l'architecture cible.

## Conséquences

- Airflow n'est plus responsable de dump/restore les données vers le datamart, mais déclenche seulement l'appel à l'API
MADDO pour lancer les jobs réplications.
- Des workers spécifiques à Maddo sont mis en place et auront la charge de créer et répliquer les données destinées à la
mise à disposition.
Binary file modified docs/assets/0059-schema-api-maddo-mutualisée.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.