Gestisci un relay
Un relay accetta feeder, abbonati e altri relay su un’unica porta. Verifica la firma di ogni batch, scarta i duplicati e inoltra ogni batch una sola volta, invariato. Non decodifica nulla e non decide nulla sugli aerei.
Avviarne uno
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 serve ogni ricezione come semplice BEAST a un decoder locale come readsb. Non ha autenticazione, quindi mettilo in ascolto solo su loopback.
--stats-listen serve in JSON ciò che il relay sa di ogni ricevitore (GET /stations e GET /stations/KEY con la chiave in base64url): sessioni, prima e ultima ricezione, batch, buchi nella sequenza, messaggi al secondo, e la posizione e il software dichiarati da ogni ricevitore. Anche questo va messo in ascolto solo su loopback.
Per eseguirlo come servizio, il file tally-relay.service incluso nella release avvia un relay come utente dinamico, con la chiave in /etc/tally/relay.key, gli argomenti in TALLY_RELAY_ARGS e il limite di upload in TALLY_RELAY_MAX_UPLOAD, entrambi dentro /etc/default/tally-relay.
Di chi si fida
Per impostazione predefinita un relay concede fiducia con parsimonia. Solo le chiavi che indichi con --accept-relay possono connettersi come relay, e --upstream lo collega a un altro relay. Ogni feeder è vincolato a --max-feeder-bytes-per-sec, 256 KiB/s per impostazione predefinita e comunicato in anticipo al feeder, e le connessioni hanno un limite complessivo e per indirizzo.
Cosa distribuisce
Un abbonato sceglie i propri flussi e può cambiarli in qualsiasi momento:
- Grezzo: i batch firmati di ogni ricevitore, per regione, per la MLAT dei relay e per la ricerca. Una regione è il luogo in cui il ricevitore dice di trovarsi, mai il luogo in cui si trova un aereo.
- Deduplicato: una sola copia di ogni messaggio Mode-S, firmata dal relay a proprio nome. È il flusso che vuole la maggior parte dei client, circa 30 Mbps per il mondo intero con 20.000 ricevitori.
- Posizioni: aerei localizzati dalla MLAT dei relay, ciascuno firmato dal relay che ne ha calcolato la posizione.
Come i relay si dividono il lavoro
Un feeder invia ai due relay funzionanti più vicini, su reti diverse. Il più vicino significa dentro una fascia di tempi di andata e ritorno, e dentro quella fascia ogni feeder di un’area fa la stessa scelta, pesata sulla capacità libera che ogni relay dichiara, così i feeder di un’area si raccolgono sugli stessi pochi relay. Un relay pieno reindirizza un nuovo feeder al successivo.
La MLAT di ogni area la fanno due o tre relay, scelti con lo stesso tipo di regola condivisa tra i relay che offrono capacità MLAT. Gli altri relay che hanno feeder di quell’area passano loro i dati grezzi, con un solo salto, così i dati grezzi non viaggiano mai lontano.
I dati si diffondono per area, come con BitTorrent. I relay che hanno i feeder di un’area inviano un numero fisso di due o tre copie, per quanti siano a volerle. Ogni flusso è diviso in strisce, e ogni relay che prende l’area inoltra la propria parte ad alcuni altri: inoltrare quella parte è il dovere che viene con l’area.
Le aree formano un albero fisso, dalle aree piccole alle regioni, ai paesi, ai continenti e fino al mondo. Un relay prende aree al livello che gli serve e condivide a quel livello, e una volta raccolte tutte le aree sotto un’area più grande, può offrire quella più grande come un unico pacchetto.
Come funziona l’albero delle areeUn abbonato lento viene scollegato, mai atteso. Ricevere dati non costa a un relay altro che il suo server; quanto invia viene fatturato, quindi ogni relay fissa un limite di upload con --max-upload, e la sua bolletta non può mai superare il limite moltiplicato per i secondi di un mese: 10 Mbit/s sono al massimo circa 3,3 TB. Il limite non si esaurisce mai. Quando gli si chiede più di quanto porta, passa prima il traffico di controllo, poi le posizioni e i modelli di clock, poi i dati grezzi verso gli altri relay, e per ultimi gli abbonati semplici. Un nuovo feeder viene rifiutato finché il limite non può portare ciò che il relay dovrebbe inoltrare per lui, e gli abbonati semplici vengono scollegati prima di qualsiasi relay, i più pesanti per primi. Quanto costa un relay presso gli hosting più comuni è nella sezione “What a relay costs” del README.
La regola per la produzione
Se dipendi dai dati di Tally, leggili tramite un relay che gestisci tu, non tramite quello di qualcun altro. Così un altro operatore può degradare solo i feeder che trasporta, e ogni feeder pubblica su due relay di reti diverse.