Een relay draaien
Een relay accepteert feeders, abonnees en andere relays op één poort. Hij controleert de handtekening van elke batch, gooit duplicaten weg en geeft elke batch één keer ongewijzigd door. Hij decodeert niets en beslist niets over vliegtuigen.
Zelf een starten
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 biedt elke ontvangst aan als gewone BEAST voor een lokale decoder zoals readsb. Er is geen authenticatie, dus bind het aan loopback.
--stats-listen biedt als JSON aan wat de relay van elke ontvanger weet (GET /stations, en GET /stations/KEY met de sleutel als base64url): sessies, eerst en laatst gezien, batches, gaten in de volgorde, berichten per seconde, en de locatie en software die elke ontvanger opgeeft. Bind ook dit aan loopback.
Als service: de tally-relay.service uit de release draait een relay als dynamische gebruiker, met de sleutel in /etc/tally/relay.key, de argumenten in TALLY_RELAY_ARGS en de uploadlimiet in TALLY_RELAY_MAX_UPLOAD, beide in /etc/default/tally-relay.
Wat hij vertrouwt
Een relay vertrouwt standaard maar weinig. Alleen sleutels die je met --accept-relay noemt mogen verbinden als andere relay, en --upstream koppelt hem aan een andere relay. Elke feeder is gebonden aan --max-feeder-bytes-per-sec, standaard 256 KiB/s en vooraf aan de feeder doorgegeven, en verbindingen zijn begrensd, in totaal en per adres.
Wat hij aanbiedt
Een abonnee kiest zijn streams en kan ze op elk moment wijzigen:
- Ruw: de ondertekende batches van elke ontvanger, per regio, voor de MLAT van relays en voor onderzoek. Een regio is waar de ontvanger zegt te staan, nooit waar een vliegtuig is.
- Ontdubbeld: één kopie van elk Mode-S-bericht, door de relay ondertekend als zijn eigen bewering. Dit is de stream die de meeste clients willen, ongeveer 30 Mbps voor de hele wereld bij 20.000 ontvangers.
- Posities: vliegtuigen die de MLAT van relays heeft gelokaliseerd, elk ondertekend door de relay die de positie berekende.
Hoe relays het werk verdelen
Een feeder stuurt naar de twee dichtstbijzijnde gezonde relays op verschillende netwerken. Dichtstbij betekent binnen een band van rondreistijden, en binnen die band maakt elke feeder van een gebied dezelfde keuze, gewogen naar de vrije capaciteit die elke relay opgeeft, zodat de feeders van een gebied zich op dezelfde paar relays verzamelen. Een volle relay verwijst een nieuwe feeder door naar de volgende in de rij.
De MLAT van een gebied wordt gedaan door twee of drie relays, gekozen met dezelfde soort gedeelde regel uit de relays die MLAT-capaciteit aanbieden. De andere relays met feeders van dat gebied geven de ruwe data één stap door aan hen, zodat ruwe data nooit ver reist.
Data verspreidt zich per gebied, zoals bij BitTorrent. De relays met de feeders van een gebied sturen vast twee of drie kopieën, hoeveel er ook om vragen. Elke stream wordt in strepen verdeeld, en elke relay die het gebied neemt, stuurt zijn eigen deel door naar een paar andere: dat deel doorsturen is de plicht die bij het gebied hoort.
Gebieden vormen een vaste boom, van kleine gebieden via regio's, landen en continenten tot de wereld. Een relay neemt gebieden op het niveau dat hij nodig heeft en deelt op dat niveau, en zodra hij alle gebieden onder een groter gebied heeft verzameld, kan hij dat grotere aanbieden als één bundel.
Hoe de boom van gebieden werktEen trage abonnee wordt losgekoppeld, er wordt nooit op hem gewacht. Data binnenhalen kost een relay niets behalve zijn server; wat hij verstuurt wordt gefactureerd, dus elke relay stelt met --max-upload een uploadlimiet in, en zijn rekening kan nooit hoger worden dan de limiet maal de seconden in een maand: 10 Mbit/s is hoogstens ongeveer 3,3 TB. De limiet raakt nooit op. Wordt er meer gevraagd dan hij draagt, dan gaat besturingsverkeer eerst, dan posities en klokmodellen, dan ruwe data naar andere relays, en gewone abonnees als laatste. Een nieuwe feeder wordt geweigerd zolang de limiet niet kan dragen wat de relay voor hem zou moeten doorsturen, en gewone abonnees worden losgekoppeld vóór een relay, de zwaarste eerst. Wat een relay bij gangbare hosts kost, staat in de README onder “What a relay costs”.
De regel voor productie
Ben je afhankelijk van de data van Tally, lees die dan via een relay die je zelf draait, niet via die van een ander. Een andere beheerder kan dan alleen de feeders benadelen die hij doorgeeft, en elke feeder publiceert naar twee relays op verschillende netwerken.