リレーの運用

リレーは 1 つのポートで、フィーダー、購読者、ほかのリレーを受け入れます。すべてのバッチの署名を検証し、重複を取り除き、各バッチを変更せずに一度だけ転送します。デコードは一切行わず、航空機について何かを判断することもありません。

リレーを起動する

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 は、すべての受信データを readsb などのローカルデコーダー向けにプレーンな BEAST で配信します。認証がないため、ループバックにバインドしてください。

--stats-listen は、リレーが把握している各受信機の情報を JSON で配信します(GET /stations と、鍵を base64url で指定する GET /stations/KEY)。内容は、セッション、初回と最終の受信時刻、バッチ、シーケンスの欠番、毎秒メッセージ数、そして各受信機が申告した位置とソフトウェアです。こちらもループバックにバインドしてください。

サービスとして動かすには、リリースに含まれる tally-relay.service を使います。リレーを動的ユーザーとして実行し、鍵は /etc/tally/relay.key に、引数は TALLY_RELAY_ARGS に、送信上限は TALLY_RELAY_MAX_UPLOAD に置きます。どちらも /etc/default/tally-relay で設定します。

何を信頼するか

リレーは既定で、信頼する範囲を狭く絞っています。別のリレーとして接続できるのは --accept-relay で指定した鍵だけで、--upstream は別のリレーへの接続を設定します。各フィーダーには --max-feeder-bytes-per-sec(既定値 256 KiB/s、事前にフィーダーへ通知)が適用され、接続数は全体とアドレスごとに制限されます。

何を配信するか

購読者は受け取るストリームを選び、いつでも変更できます:

  • 生データ:すべての受信機の署名付きバッチを地域ごとに配信します。リレーの MLAT や研究向けです。地域は受信機が申告した所在地で決まり、航空機の位置では決まりません。
  • 重複除去済み:各 Mode-S メッセージを 1 つずつ、リレー自身の主張として署名して配信します。ほとんどのクライアントが必要とするストリームで、受信機 20,000 台の場合、全世界で約 30 Mbps です。
  • 位置:リレーの MLAT が求めた航空機の位置。それぞれ、算出したリレーが署名します。

リレーの役割分担

フィーダーは、別々のネットワーク上にある、最も近い正常なリレー 2 つに送ります。近いとは往復時間が一定の幅に入ることで、その幅の中では、同じ地域のフィーダーはどれも、各リレーが申告する空き容量で重み付けした同じ選び方をします。そのため、地域のフィーダーは同じ少数のリレーに集まります。満杯のリレーは、新しいフィーダーを次の候補へリダイレクトします。

各地域の MLAT は、MLAT の処理能力を提供するリレーの中から、同じ種類の共通ルールで選ばれた 2 つか 3 つのリレーが行います。その地域のフィーダーを受け持つほかのリレーは、生データを 1 ホップでそれらに渡すので、生データが遠くへ移動することはありません。

データは BitTorrent のように地域ごとに広がります。地域のフィーダーを受け持つリレーは、求める数にかかわらず 2 つか 3 つの固定数のコピーを送ります。各ストリームはストライプに分けられ、その地域を担当するリレーはそれぞれ自分の分担を数リレーへ転送します。その分担を転送することが、地域を担当する義務です。

地域は、小さな地域から地方、国、大陸を経て世界に至る固定のツリーをなしています。リレーは必要な階層で地域を担当し、その階層で共有します。ある大きな地域の下にあるすべての地域を集めたら、その大きな地域を 1 つのバンドルとして提供できます。

地域ツリーのしくみ

遅い購読者は、待たずに切断されます。データの受け入れにかかるリレーのコストはサーバーだけですが、送信量には料金がかかるため、どのリレーも --max-upload で送信上限を決めます。料金は、上限に1か月の秒数を掛けた量を決して超えません。10 Mbit/s なら最大でおよそ 3.3 TB です。上限は使い切ることがありません。上限を超える量を求められたときは、制御トラフィックを最優先に、次に位置と時計モデル、次に他のリレーへの生データを送り、一般の購読者は最後です。上限が新しいフィーダーの転送分を運べないうちは、そのフィーダーを断ります。また一般の購読者は、どのリレーよりも先に、最も重いものから切断されます。主なホスティングでの費用は README の「What a relay costs」にあります。

本番運用のルール

Tally のデータに依存するなら、他人のリレーではなく、自分で運用するリレーを通じて読んでください。そうすれば、ほかの運用者が影響を与えられるのはその運用者が中継するフィーダーだけになり、しかも各フィーダーは別々のネットワーク上の 2 つのリレーへ公開しています。