On va parler un peu de Prim, la plateforme d'Ăle de France MobilitĂ©s pour diffuser en #opendata les donnĂ©es des transports de la rĂ©gion, tous modes confondus (fer, tram, mĂ©tro, bus). https://t.co/0ejQUkg1xr https://t.co/Nl079OnkWY
Cet été, la plateforme a subi une migration d'hébergement (le bandeau orange dans la page précédente) de la section "données temps réel", j'y reviens plus loin (c'est pour ça que je fais ce fil, en fait).
La plateforme contient toute une palanquĂ©e de jeux de donnĂ©es sur les horaires, arrĂȘts, gares, zones d'arrĂȘts/correspondance etc. C'est trĂšs compliquĂ© car une zone d'arrĂȘt inclure plein de modes de transport, correspondances, des quais de diffĂ©rentes lignes/directions, etc.
IDFM (Ăle de France MobilitĂ©s) s'occupe d'agrĂ©ger tout ça entre les diffĂ©rents opĂ©rateurs de transport de la rĂ©gion et c'est du boulot car ils sont *nombreux* (surtout les bus) (https://prim.iledefrance-mobilites.fr/content/files/2022/07/MAJ-Documentation-fonctionnelle-PRIM-11-juillet-2022-5.pdf) https://t.co/13wuTF4c2a
Du coup on a une API temps rĂ©el qui diffuse tout en 1 point, c'est assez pratique mĂȘme si le format (Siri, un dĂ©rivĂ© de XML avec conversion en Json) est assez compliquĂ© (la joie des modĂšles de donnĂ©es d'informatique de gestion + gestion par comitĂ© + convertisseurs automatiques).
Le charme de l'API c'est qu'elle donne à quelques secondes prÚs les estimations des horaires de passage ferrés des trains/métros/tramways en gare. La SNCF dispose d'informations similaires pour tous ses trains mais elles ne sont pas publiques (hors Transilien).
L'API est d'accĂšs libre sur crĂ©ation de compte, avec des quotas de requĂȘte qui permettent de faire des choses raisonnables (je rĂ©cupĂšre H24 les donnĂ©es de passage de tout le rĂ©seau ferrĂ© de la rĂ©gion, et avec un algo pas trop dĂ©bile ça passe dans le quota gratuit).
Il y a plein d'autres choses intéressantes comme un calculateur d'itinéraires de transport, utilisé par des apps (notamment l'app IDFM je pense), mais je ne m'en sers pas.
Maintenant arrivons-en Ă l'API temps rĂ©el. Celle-ci comporte 2 modes, le mode "par arrĂȘt" donnant l'information fraĂźche pour 1 gare (ou quai) donnĂ©, et le mode "requĂȘte globale" qui donne toute la rĂ©gion (tous modes) en 1 bloc trĂšs gros, et qui n'est pas aussi fraĂźche.
La requĂȘte globale est en fait manifestement un truc prĂ©moulinĂ©, rafraĂźchi toutes les 2-3 minutes environ, vs quelques secondes pour l'API "par arrĂȘt". De plus la requĂȘte globale semble comporter des trous (des trains RER B sud y restent invisibles).
La requĂȘte globale comme la requĂȘte "par arrĂȘt" (dite unitaire en parlance IDFM) sont gĂ©rĂ©es par les mĂȘmes serveurs frontaux. Ce sont eux sur lesquels le dĂ©mĂ©nagement est le plus visible.
L'ancien systĂšme avait des points d'entrĂ©e en http://traffic.api.iledefrance-mobilites.fr, hĂ©bergĂ© sur AWS (Amazon). Le nouveau est sur http://prim.iledefrance-mobilites.fr, mĂȘme nom que le site web prĂ©citĂ©, hĂ©bergĂ© sur Azure (Microsoft).
En fait, que font les frontaux ? Pas grand chose, ils servent juste de réflecteurs de données pour rediffuser "en masse" et aussi vite que possible les données collectées et moulinées par ailleurs.
Typiquement le jeu de donnĂ©es tient largement en mĂ©moire d'une machine moderne, les requĂȘtes sont simples, donc le frontal n'a qu'Ă tenir sa table Ă jour depuis le collecteur et renvoyer une rĂ©ponse prĂ©mĂąchĂ©e Ă toute requĂȘte de l'utilisateur, aprĂšs authentification.
En plus de ça il faut un "routeur d'URL" en frontal pour diriger les requĂȘtes soit sur le site web, soit sur le serveur d'API, puisque tout est sur le mĂȘme nom DNS. Pourquoi pas mais c'est Ă©tonnant d'avoir une architecture qui introduit un SPOF sur ce routeur d'URL.
Ensuite la migration. Elle a été ouverte au public le 18 juillet, et les utilisateurs ont 2 mois (jusqu'à la mi-septembre) pour réécrire leur code. Si IDFM doit payer à la fois des serveurs AWS et Azure pendant la transition, je comprends qu'on en limite la durée.
Mais par contre, ce que je comprends moins bien c'est : pourquoi les réflecteurs sur AWS et Azure ? La techno du réflecteur est assez simple, le scaling probablement limité (pas besoin de centaines de serveurs a priori), donc pas besoin de techno propriétaire spécifique AWS/MS ?