Skip to content

Commit 6556022

Browse files
aurelie-crouilleboisnlepageHEYGULVincentHardouin
authored
doc: add maddo adr
Co-authored-by: Nicolas Lepage <19571875+nlepage@users.noreply.github.com> Co-authored-by: Guillaume Lagorce <guillaume.lagorce@pix.fr> Co-authored-by: Vincent Hardouin <vincent.hardouin@pix.fr>
1 parent 846cb23 commit 6556022

6 files changed

+155
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
# 59. Mise à disposition de données
2+
3+
Date : 2025-02-11
4+
5+
## État
6+
7+
En cours de rédaction
8+
9+
## Contexte
10+
11+
Plusieurs partenaires récupèrent des données Pix pour les intégrer à leur SI.
12+
Ces données sont obtenues par différents moyens :
13+
14+
* Export depuis Metabase, ou généré par Data, déposé sur le cloud Pix
15+
* Appel de routes de l'API Pix qui exploite des données de la base live
16+
* Appel de routes de l'API Pix qui exploite des données de la base froide
17+
18+
Pour répondre à cette problématique de mise à disposition des données, un tech days en 2023 a permis de mettre en œuvre
19+
une brique [API Data](https://github.com/1024pix/pix-api-data).
20+
Cette brique est basée sur l'envoi de requêtes stockées à une base de données froides.
21+
22+
Cependant, une première utilisation, pour la page analyse qui utilise le taux de couverture dans Pix Orga, a mis en
23+
évidence plusieurs problèmes :
24+
25+
* absence de documentation du contrat de l'API : point d'entrée générique, qui ne permet pas de documenter facilement
26+
les données mises à disposition.
27+
* gestion d'autorisation inadaptée : droit sur une requête et droit pour chaque valeur de paramètre de
28+
la requête
29+
* absence de logique métier
30+
* difficulté à tester, car le schéma et les requêtes ne sont pas connus
31+
32+
![Schéma montrant les différentes données et leur mise à disposition](../assets/0059-schema-mise-a-dispo-actuelle.png)
33+
34+
En 2025, de nombreuses interconnexions ont été prévues avec divers partenaires ce qui fait émerger de nouveaux
35+
sujets :
36+
37+
* facturation de ces interconnexions
38+
* offre d'un service standardisé (documenté, testable, industrialisé)
39+
* limitation de l'impact sur la production de Pix (performances)
40+
41+
Ces nouveaux sujets motivent la mise au point d'une solution standardisée pour mettre à disposition ce type de données.
42+
43+
## Solutions envisagées
44+
45+
Dans toutes les pistes envisagées qui suivent, nous ne modifions en aucun cas le fonctionnement de la réplication avec le Datawarehouse.
46+
47+
### Solution 1 : Conserver l'architecture actuelle, sans l'API Data
48+
49+
Déplacement des données froides dans une base dédiée en utilisant l'API de Pix pour les mettre à disposition.
50+
51+
![Schéma archi en utilisant l'API actuelle](../assets/0059-schema-utilisant-l-api-actuelle.png)
52+
53+
#### Avantages
54+
55+
* Pas d'augmentation de la volumétrie de la BDD de production avec des données froides
56+
* L'architecture reste inchangée
57+
* Expérience de développement inchangée
58+
* Utilisation des contextes et objets métier
59+
* Gestion de l'authentification et des autorisations déjà en place
60+
* Infrastructure réseau présente : Baleen, monitoring, etc.
61+
62+
#### Inconvénients
63+
64+
- Le traffic lié à la mise à disposition de données impact la charge de l'API, alors que l'usage est spécifique et nécessite des données froides.
65+
- La disparité de temps de réponse des requêtes provoque des files d’attente de requêtes et une baisse de performance globale (erreurs 504).
66+
- d’un côté des appels du front qui utilisent le cache et sont rapides
67+
- de l’autre des appels de mise à disposition de données qui chargent des données froides en base et sont plus lents
68+
69+
### Solution 2 : Reprendre l’API Data
70+
71+
L'API Data actuelle se base sur des requêtes stockées dans une base qui sont jouées sur une base de données froide.
72+
Ces requêtes sont ajoutées en faisant une insertion dans une table.
73+
74+
![Schéma API Data](../assets/0059-schema-api-data.png)
75+
76+
#### Avantages
77+
78+
- L'équipe Data est autonome pour ajouter de nouvelles requêtes, de nouveaux utilisateurs et certaines permissions.
79+
80+
#### Inconvénients
81+
82+
- La gestion des authentifications et autorisations est très sommaire et différente de ce qui se fait sur l'API.
83+
Cela implique des audits de sécurité différents, et peut potentiellement provoquer des failles de sécurité.
84+
De plus, nous ne souhaitons pas forcément avoir deux bases d'utilisateurs distinctes.
85+
- Comme les requêtes et le schéma ne sont pas connus, les tests de non-régressions sont compliqués à mettre en place.
86+
- La mise à disposition d'une documentation des requêtes demanderait un développement spécifique à chaque requête, contrairement au déclaratif mis en place via Joi.
87+
88+
### Solution 3 : Création d'une API de mise à disposition de données (base de code indépendante)
89+
90+
Création d'une nouvelle API (MaDDo) contenant uniquement les routes de mise à disposition de données. L'authentification
91+
et les autorisations sont alors déléguées à l'API Pix.
92+
Cette API a pour base de données unique une base de données froides.
93+
94+
![Schéma Archi MADDO isolée](../assets/0059-schema-api-maddo-isolée.png)
95+
96+
#### Avantages
97+
98+
* Routes de MaDDo et de l’API isolées
99+
* Base de code limitée aux nouveaux besoins
100+
* Scaling des conteneurs de cette API adapté au besoin
101+
102+
#### Inconvénients
103+
104+
* La gestion déléguée de l'authentification et des autorisations :
105+
* Crée une dépendance entre MaDDo et l'API Pix, qui amène une complexité non nécessaire qui perdure durant la
106+
maintenance du projet
107+
* Augmente le risque de sécurité du fait de l'absence d'utilisation d'un standard
108+
* Pas de partage de code métier avec l'API Pix (en l’absence de mise en place de bibliothèque partagée) :
109+
* ce qui oblige potentiellement à maintenir deux fois les mêmes modèles et règles métiers. Cela peut provoquer des
110+
désynchronisations.
111+
* ce qui rend le contract testing obligatoire pour assurer la non-régression.
112+
113+
### Solution 4 : Création d'une API de mise à disposition de données (base de code mutualisée)
114+
115+
Création d'une variante de l'API Pix, exposant uniquement les routes de mise à disposition de données.
116+
L'authentification et les autorisations sont donc gérées par le même code que pour l'API Pix.
117+
118+
Cette API utilise deux bases de données :
119+
120+
* une base de données froides en base principale
121+
* la base de données de Pix, notamment pour l'authentification et les autorisations
122+
123+
![Schéma Archi Maddo mutualisée](../assets/0059-schema-api-maddo-mutualisée.png)
124+
125+
#### Avantages
126+
127+
* Expérience de développement inchangée
128+
* Code support (logging, healthcheck, etc.) et métier (modèles, règles, etc.) de l'API mutualisé
129+
* Routes de MaDDo et de l’API isolées
130+
* Scaling des conteneurs de cette API adapté au besoin
131+
132+
#### Inconvénients
133+
134+
* Les Review Apps doivent se partager leurs URL de connexion à la base de données : l'API met à jour l'API MaDDo pour
135+
lui donner la base de données live, et inversement pour la base de données froides.
136+
* Les Review Apps sont plus lourdes, car il y a une application supplémentaire à déployer.
137+
* Pour que Maddo puisse démarrer, il lui faut attendre le déploiement de l'API, afin que les migrations sur la base de
138+
données Pix aient été faites.
139+
140+
## Décision
141+
142+
La solution n°4 nous semble être le meilleur compromis pour permettre à une feature team de mettre à disposition de
143+
manière autonome de nouvelles données.
144+
145+
Les points qui ont le plus motivé cette décision sont les suivants :
146+
147+
* sécurité au niveau de celle de l'API Pix
148+
* expérience de développement favorisant l'autonomie des équipes
149+
* séparation des usages qui a pour conséquence la sécurisation des usages à destination des applications (front)
150+
* documentation des endpoints et données mis à disposition
151+
152+
## Conséquences
153+
154+
* Création d'une nouvelle infrastructure pour l’API MaDDo basée sur le code de l'API Pix
155+
* Les futurs travaux de mise à disposition des données sont à la charge des équipes de développement

docs/assets/0059-schema-api-data.png

58 KB
Loading
88.9 KB
Loading
Loading
Loading
Loading

0 commit comments

Comments
 (0)