Como o Tally funciona

O Tally é uma rede aberta que reúne as mensagens de rádio que as aeronaves transmitem, captadas por receptores na casa das pessoas, e as transforma em posições que qualquer um pode usar. Esta página explica todo o projeto sem pressupor conhecimento prévio.

Três palavras

  • Feeder: um receptor que envia o que ouve. É um receptor de rádio na casa de alguém com um pequeno programa que marca cada mensagem com o instante exato em que chegou, assina e envia adiante.
  • Relay: o programa que reúne o que os feeders enviam, calcula posições e as compartilha com outros relays. Toda tarefa da rede é de um relay, e qualquer um pode rodar um.
  • Cliente: qualquer coisa que lê dados do Tally, como um site, um app ou um mapa. Um cliente nunca compartilha. O acesso dele é ou o pequeno nível gratuito ou o crédito do relay ao qual está vinculado: uma empresa que quer o fluxo completo roda um relay, e os clientes dela leem com o crédito desse relay. Um cliente lê de um relay: o seu próprio, se quiser o firehose (muitas vezes a mesma empresa opera os dois), ou um público para uso pequeno.

As peças

Os feeders enviam suas mensagens aos relays. Os relays fazem todo o trabalho: reúnem, calculam posições e repassam dados entre si. Os clientes leem dos relays. Não há servidor especial nem operador central, porque todo relay é o mesmo programa.

FeedersRelaysClientes
Os feeders enviam suas mensagens aos relays, os relays compartilham entre si, e os clientes leem dos relays.

Para onde vão os dados

Um feeder envia seus dados aos dois relays saudáveis mais próximos, em redes diferentes, para que uma falha ou um relay desonesto não consiga silenciá-lo. O mais próximo é medido pelo tempo que uma mensagem leva para voltar, e isso ninguém consegue falsificar.

As mensagens brutas ficam perto de casa: viajam no máximo um salto, até os relays que cobrem a mesma área, e esses relays calculam as posições da área. Só as posições prontas viajam pelo mundo, o que mantém pequena a banda de todos.

Uma áreaBrutoPosiçõesFeedersRelayRelayO mundo
Dentro de uma área, cada feeder envia mensagens brutas a dois relays próximos. As posições que eles calculam saem da área para o mundo.

Aviões que não dizem onde estão

A maioria das aeronaves transmite a própria posição GPS. Algumas não, mas ainda respondem ao radar com pings curtos. Quando vários feeders ouvem o mesmo ping, ele chega a cada um em um instante um pouco diferente, porque cada um está a uma distância diferente. Cada diferença de tempo coloca o avião em algum ponto de uma curva, e o avião está onde as curvas se cruzam. Isso é multilateração, MLAT para encurtar, e é trabalho de um relay.

Mesma diferença de tempoPingFeeder
Um ping chega a quatro feeders em instantes um pouco diferentes. Cada diferença de tempo entre dois feeders traça uma curva, e as curvas se cruzam onde o avião está.

Para isso, os relógios dos feeders precisam concordar dentro de um milionésimo de segundo, e receptores caseiros não concordam. Então os relays corrigem cada relógio usando aviões que transmitem GPS: a posição deles é conhecida, então também se sabe quando a mensagem deveria chegar, e a diferença é o erro daquele relógio.

Toda resposta vem com margens de erro honestas: o quanto ela pode errar, incluindo a incerteza que as correções de relógio deixam.

Os relógios são corrigidos juntos, em grupos fixos chamados blocos. O mundo é dividido em uma grade fixa de áreas de quatro tamanhos, com cerca de 50, 100, 200 e 400 km de lado, e cada bloco reúne até 48 feeders próximos, escolhidos só pela localização deles. Todo avião sobre uma área usa a correção do seu bloco, então o trabalho é feito uma vez por área, não uma vez por avião. Todo relay calcula os mesmos blocos, então os resultados continuam verificáveis.

BlocoAviãoAvião
Os feeders são agrupados em blocos fixos que se sobrepõem. Os dois aviões sobre o bloco destacado usam a única correção de relógio dele.

Todo relay calcula a mesma resposta, até o último bit, a partir dos mesmos dados. Assim, respostas de relays diferentes se combinam sem conflito, e qualquer um pode provar que um relay está errado se ele publicar uma resposta ruim.

Rápido e definitivo

Conferir uma posição direito leva tempo, porque um relay espera chegarem as mensagens de todos os feeders. Por isso cada avião de MLAT recebe duas respostas. Primeiro uma rápida, cerca de 1 a 2 segundos depois do ping, calculada com a correção de relógio mais recente levada adiante e com margens de erro maiores. Depois a posição final conferida, que a substitui. Os clientes escolhem se querem receber posições rápidas.

A resposta rápida importa na cabine: a 150 kt, cerca de 280 km/h, um avião percorre meia milha em 12 segundos.

Dois produtos

  • Regional: tudo de uma área, mensagens brutas incluídas. Para pesquisadores, apps locais e os relays que cobrem a área.
  • Mundo: uma posição por avião por segundo, em todo lugar. Para rastreadores de voos e empresas que querem o quadro completo.

Compartilhar como no BitTorrent

Os dados de cada área chegam primeiro a alguns relays que os querem, e cada um deles repassa a mais alguns. Os relays que têm os feeders de uma área enviam um número fixo de duas ou três cópias, por mais popular que a área seja, então uma área concorrida nunca aumenta a conta deles.

Origem
A origem envia três cópias, e cada relay que recebe uma repassa a mais dois.

Assumir uma área é um dever: cada fluxo é dividido em faixas, todo relay que assume a área repassa a sua própria parte a alguns outros, e um relay que não repassa é retirado da área.

As áreas formam uma árvore

O mundo é dividido em uma árvore fixa de áreas com a qual todos concordam: áreas pequenas ficam dentro de regiões, regiões dentro de países, países dentro de continentes e continentes dentro do mundo. Ninguém a distribui; é a mesma grade fixa para todos.

Um relay assume as áreas que quer, em qualquer nível: um site regional assume sua região, um app nacional seu país, uma empresa global o mundo. Seja qual for o nível, um relay compartilha nesse nível, repassando os dados daquela área a quem os quiser.

O mundoContinenteContinentePaísPaísPaísRegiãoRegiãoRegiãoRelaysClientes
As áreas ficam dentro de áreas maiores. Em cada nível, um relay reúne o nível de baixo em um pacote e o repassa para cima, e os clientes leem no nível de que precisam.

Um relay que reuniu todas as áreas abaixo de uma maior pode oferecer a maior como um único pacote. Assim, um relay mundial se conecta a um punhado de pacotes de continentes ou países, e não a cada área pequena. Cada nível é oferecido por vários relays, então se um sair do ar nada se perde.

Os dados de um pacote mantêm a assinatura de cada relay de origem, então um pacote não exige confiança extra: ele é conferido exatamente como suas áreas seriam.

Uso justo

Uso pequeno é grátis: um cliente pode ler posições de uma área só com uma conexão. Uso em grande escala, ou seja, dados brutos ou posições de grandes regiões, é conquistado por um relay que contribui de verdade, aceitando feeders ou enviando dados frescos, e os clientes vinculados a esse relay leem com o crédito dele. Um cliente nunca compartilha, então quem quer mais dados roda um relay e acrescenta capacidade à rede.

Todo relay roda com um limite obrigatório de velocidade de upload, para que a conta nunca passe do que o limite permite e nenhum operador leve um susto.

O que os feeders recebem em troca

Todo feeder tem uma página de estação pública com a disponibilidade, as taxas de mensagens, os aviões ouvidos, o alcance, a cobertura que só ele oferece, o quanto ajuda o MLAT e a posição dele nos rankings.

Encontre uma estação

Tudo é calculado a partir de dados públicos e assinados, então qualquer um pode conferir.

Confiança

  • Tudo é assinado. Cada feeder tem a própria chave, e um relay não consegue alterar nem inventar as mensagens de um feeder, só deixar de repassá-las.
  • As respostas são reproduzíveis. Qualquer um com os mesmos dados brutos pode recalcular uma posição e obter exatamente o mesmo resultado.
  • Trapaça pode ser provada. Duas respostas assinadas a partir das mesmas entradas que discordam são prova de uma falha, e qualquer um pode parar de usar aquele relay.
  • Feeders ganham reputação. Um feeder cujas mensagens sempre concordam com as dos outros ganha peso com o tempo.