Héberger un relais
Un relais accepte feeders, abonnés et autres relais sur un seul port. Il vérifie la signature de chaque lot, écarte les doublons et transmet chaque lot une seule fois, sans le modifier. Il ne décode rien et ne décide rien au sujet des aéronefs.
En démarrer un
tally-relay keygen > /etc/tally/relay.key
tally-relay --key /etc/tally/relay.key --max-upload 8Mbit/s --listen 0.0.0.0:10900 --beast-out 127.0.0.1:30105
--beast-out sert chaque réception en BEAST brut à un décodeur local comme readsb. Il n’a aucune authentification, donc ne l’exposez que sur l’interface loopback.
--stats-listen sert en JSON ce que le relais sait de chaque récepteur (GET /stations, et GET /stations/KEY avec la clé en base64url) : sessions, première et dernière apparition, lots, trous de séquence, messages par seconde, ainsi que la position et le logiciel que déclare chaque récepteur. Exposez-le, lui aussi, uniquement sur loopback.
Pour le faire tourner comme service, le fichier tally-relay.service fourni avec chaque version lance un relais sous un utilisateur dynamique, avec sa clé dans /etc/tally/relay.key, ses arguments dans TALLY_RELAY_ARGS et son plafond d’envoi dans TALLY_RELAY_MAX_UPLOAD, tous deux dans /etc/default/tally-relay.
À qui il fait confiance
Par défaut, un relais accorde sa confiance avec parcimonie. Seules les clés que vous désignez avec --accept-relay peuvent se connecter en tant que relais, et --upstream le rattache à un autre relais. Chaque feeder est limité par --max-feeder-bytes-per-sec, 256 Kio/s par défaut et annoncé au feeder à l’avance, et les connexions sont plafonnées globalement et par adresse.
Ce qu’il sert
Un abonné choisit ses flux, et peut les changer à tout moment :
- Brut : les lots signés de chaque récepteur, par région, pour la MLAT des relais et pour la recherche. Une région est l’endroit où le récepteur dit se trouver, jamais l’endroit où se trouve un aéronef.
- Dédoublonné : un seul exemplaire de chaque message Mode-S, signé par le relais en son propre nom. C’est le flux que veulent la plupart des clients, environ 30 Mbit/s pour le monde entier avec 20 000 récepteurs.
- Positions : les aéronefs localisés par la MLAT des relais, chacun signé par le relais qui l’a calculé.
Comment les relais se partagent le travail
Un feeder envoie aux deux relais en bon état les plus proches, sur des réseaux différents. Le plus proche signifie dans une bande de temps d’aller-retour, et dans cette bande chaque feeder d’une zone fait le même choix, pondéré par la capacité libre que chaque relais déclare, si bien que les feeders d’une zone se regroupent sur les mêmes quelques relais. Un relais plein redirige un nouveau feeder vers le suivant.
La MLAT de chaque zone est faite par deux ou trois relais, choisis par le même genre de règle partagée parmi les relais qui offrent de la capacité MLAT. Les autres relais qui reçoivent des feeders de cette zone leur transmettent ses données brutes, en un saut, si bien que les données brutes ne vont jamais loin.
Les données se diffusent par zone, comme avec BitTorrent. Les relais qui reçoivent les feeders d’une zone envoient un nombre fixe de deux ou trois copies, quel que soit le nombre de demandeurs. Chaque flux est découpé en bandes, et chaque relais qui prend la zone transmet sa propre part à quelques autres : transmettre cette part est le devoir qui accompagne la zone.
Les zones forment un arbre fixe, des petites zones aux régions, aux pays, aux continents et jusqu’au monde. Un relais prend des zones au niveau dont il a besoin et partage à ce niveau, et une fois qu’il a réuni toutes les zones sous une zone plus grande, il peut proposer cette dernière comme un seul paquet.
Comment fonctionne l’arbre des zonesUn abonné lent est déconnecté, jamais attendu. Recevoir des données ne coûte à un relais que son serveur ; ce qu’il envoie est facturé, donc chaque relais fixe un plafond d’envoi avec --max-upload, et sa facture ne peut jamais dépasser le plafond multiplié par les secondes d’un mois : 10 Mbit/s, c’est au plus environ 3,3 To. Le plafond ne s’épuise jamais. Quand on lui demande plus qu’il ne porte, le trafic de contrôle passe d’abord, puis les positions et les modèles d’horloge, puis les données brutes vers les autres relais, et les simples abonnés en dernier. Un nouveau feeder est refusé tant que le plafond ne peut pas porter ce que le relais devrait retransmettre pour lui, et les simples abonnés sont déconnectés avant tout relais, les plus gourmands d’abord. Ce que coûte un relais chez les hébergeurs courants est détaillé dans la section « What a relay costs » du README.
La règle de production
Si vous dépendez des données de Tally, lisez-les via un relais que vous hébergez, pas via celui de quelqu’un d’autre. Un autre opérateur ne peut alors dégrader que les feeders qu’il transporte, et chaque feeder publie vers deux relais sur des réseaux différents.