Diffusion données opendata par p2p

TL;DR ? Les “torrents” sont ici: http://212.47.238.202/torrents/meteo-france/arpege/

Les données volumineuses peuvent poser quelques problèmes de diffusion, car la bande passante nécessaire peut faire monter la facture rapidement du côté du producteur ou diffuseur.

C’est par exemple le cas des prévisions météo que Météo-France a mis en opendata (Licence Ouverte) en juillet 2015.

Non seulement les données sont volumineuses (plusieurs Go par jour), mais en plus leur durée de vie “utile” est courte car de nouvelles prévisions sortent des modèles numériques plusieurs fois par jour.

On se retrouve donc dans une situation où les réutilisateurs doivent potentiellement télécharger plusieurs Go de données plusieurs fois par jour.

Avec une diffusion classique centralisée (HTTP, FTP) on est vite limité par la bande passante du lien du producteur, ici Météo-France à Toulouse.

Diffusion décentralisée

Les protocoles “pair à pair” (p2p) n’ont pas ce problème car chaque “client” qui télécharge les données les repartage en même temps avec d’autres clients.

Image for post
Image for post

Un des nœuds diffuse l’intégralité des donnés, mais dès que les autres nœuds reçoivent une partie de ces données ils peuvent aussi les repartager avec leurs homologues.

La bande passante est donc répartie entre l’ensemble des nœuds au lieu d’être concentrée sur le diffuseur initial.

Expérimentation avec BitTorrent

J’ai donc mis en place un (tout) petit serveur* utilisant le protocole BitTorrent qui rediffuse les prévisions du modèle ARPEGE de Météo-France (couverture Europe à 0,1° et mise à jour toutes les 6h).

Pour une telle diffusion en BitTorrent il faut:

  • un “tracker” : c’est lui qui permet aux clients de savoir qui partage quoi
  • au moins un client BitTorrent : c’est lui qui assure que les données sont au moins partagées (seed) une fois dans leur intégralité
  • une diffusion en HTTP des fichiers “torrent” : ce sont ces fichiers qui décrivent le contenu d’un fichier et sur quel tracker se connecter pour savoir quels sont les clients qui diffusent le contenu.

Un script cron récupère les fichiers originaux en HTTP, puis génère un fichier “torrent” et le dépose dans le dossier du serveur web (nginx ) pour qu’il soit accessible.

Le contenu de ce torrent (le fichier d’origine) est diffusé à l’aide de transmission-daemon .

Il est donc “annoncé” via un tracker local (opentracker ).

Ces fichiers torrent sont disponibles via un simple serveur HTTP (ici c’est nginx qui est utilisé) et un flux RSS est aussi généré pour permettre une récupération automatique par les clients BitTorrent dès la disponibilité de nouvelles données.

Il est ainsi possible de placer quelques nœuds BitTorrent sur plusieurs serveurs à bas coût situés sur des réseaux différents, ce qui accélère les transferts.

Les torrents sont disponibles pendant 12h.

N’hésitez pas à tester et laisser votre client repartager !

Image for post
Image for post

http://212.47.238.202/torrents/meteo-france/arpege/

Source Animation Bittorrent: https://commons.wikimedia.org/wiki/File:Torrentcomp_small.gif

* le serveur en question est un Scaleway C1, à base de processeur ARM, avec 2Go de RAM et 50Go de stockage (l’équivallent d’un smartphone)… le tout pour moins de 3 euros par mois et il ne sert pas qu’à ça ! ;)

Ajout du 14/3/2017:

Les transferts de fichiers étant de plus en plus problématiques sur la ligne saturée de Météo-France, ceux-ci sont désormais vérifiés à l’aide de gdalinfo avant d’être mis en torrent et re-téléchargés si besoin jusqu’à ce qu’ils soient valides.

Pour faciliter l’automatisation du téléchargement, un flux RSS est aussi généré et remis à jour après chaque mise à disposition d’un nouveau fichier.

40 ans d'informatique + 33 de base de données + 25 d'internet + 11 de cartographie = #OpenStreetMap + #opendata + #logiciel_libre

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store