Rode um relay
Um relay aceita feeders, assinantes e outros relays em uma única porta. Ele verifica a assinatura de cada lote, descarta duplicatas e repassa cada lote uma única vez, sem alterações. Ele não decodifica nada e não decide nada sobre as aeronaves.
Suba um
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 cada recepção como BEAST puro para um decodificador local como o readsb. Não tem autenticação, então vincule-o ao loopback.
--stats-listen serve em JSON o que o relay sabe de cada receptor (GET /stations, e GET /stations/KEY com a chave em base64url): sessões, primeira e última vez visto, lotes, lacunas de sequência, mensagens por segundo, e a localização e o software que cada receptor declara. Vincule-o ao loopback também.
Para rodá-lo como serviço, o tally-relay.service da release roda um relay como usuário dinâmico, com a chave em /etc/tally/relay.key, os argumentos em TALLY_RELAY_ARGS e o limite de upload em TALLY_RELAY_MAX_UPLOAD, ambos dentro de /etc/default/tally-relay.
Em que ele confia
Por padrão, um relay confia no mínimo. Só as chaves que você indicar com --accept-relay podem se conectar como outro relay, e --upstream o liga a outro relay. Cada feeder fica limitado a --max-feeder-bytes-per-sec, 256 KiB/s por padrão e informado ao feeder com antecedência, e as conexões têm um limite geral e outro por endereço.
O que ele serve
Um assinante escolhe seus fluxos e pode mudá-los a qualquer momento:
- Bruto: os lotes assinados de cada receptor, por região, para o MLAT dos relays e para pesquisa. Uma região é onde o receptor diz estar, nunca onde uma aeronave está.
- Deduplicado: uma cópia de cada mensagem Mode-S, assinada pelo relay como afirmação própria. É o fluxo que a maioria dos clientes quer, cerca de 30 Mbps para o mundo inteiro com 20.000 receptores.
- Posições: aeronaves localizadas pelo MLAT dos relays, cada uma assinada pelo relay que a calculou.
Como os relays dividem o trabalho
Um feeder envia aos dois relays saudáveis mais próximos, em redes diferentes. O mais próximo quer dizer dentro de uma faixa de tempos de ida e volta, e dentro dessa faixa todo feeder de uma área faz a mesma escolha, ponderada pela capacidade livre que cada relay declara, então os feeders de uma área se juntam nos mesmos poucos relays. Um relay cheio redireciona um feeder novo para o próximo da fila.
O MLAT de cada área é feito por dois ou três relays, escolhidos pelo mesmo tipo de regra compartilhada entre os relays que oferecem capacidade de MLAT. Os outros relays que têm feeders dessa área repassam os dados brutos a eles, em um salto, então dados brutos nunca viajam longe.
Os dados se espalham por área, como no BitTorrent. Os relays que têm os feeders de uma área enviam um número fixo de duas ou três cópias, não importa quantos queiram. Cada fluxo é dividido em faixas, e todo relay que assume a área repassa a sua própria parte a alguns outros: repassar essa parte é o dever que vem com a área.
As áreas formam uma árvore fixa, de áreas pequenas, passando por regiões, países e continentes, até o mundo. Um relay assume áreas no nível de que precisa e compartilha nesse nível, e quando reúne todas as áreas abaixo de uma maior, pode oferecer a maior como um único pacote.
Como funciona a árvore de áreasUm assinante lento é desconectado, nunca esperado. Receber dados não custa a um relay nada além do servidor; o que ele envia é cobrado, então cada relay define um limite de upload com --max-upload, e a conta nunca pode passar do limite vezes os segundos de um mês: 10 Mbit/s são no máximo cerca de 3,3 TB. O limite nunca acaba. Quando pedem mais do que ele comporta, o tráfego de controle vai primeiro, depois as posições e os modelos de relógio, depois os dados brutos para outros relays, e os assinantes simples por último. Um feeder novo é recusado enquanto o limite não comportar o que o relay teria de repassar por ele, e os assinantes simples são desconectados antes de qualquer relay, os mais pesados primeiro. Quanto custa um relay nos provedores mais comuns está na seção “What a relay costs” do README.
A regra de produção
Se você depende dos dados do Tally, leia-os por um relay que você mesmo roda, não pelo de outra pessoa. Assim, outro operador só pode prejudicar os feeders que ele transporta, e todo feeder publica em dois relays de redes diferentes.