Multitracker Metadata Extension(多 Tracker 元データ拡張)は、BitTorrent プロトコルのためのメタデータ拡張であり、複数の BitTorrent トラッカー間の協調作業の効率を向上させることを目的としています。この拡張機能により、Torrent ファイルには複数のトラッカーのアドレスリストが含まれ、クライアントはこれらのアドレスを使用して利用可能なトラッカーに接続することができます。したがって、1 つのトラッカーがオフライン状態でも、クライアントは他のトラッカーを介してファイルをダウンロードまたは共有することができます。
通常の BitTorrent プロトコルとは異なり、Multitracker Metadata Extension ではトラッカーのアドレスリストが含まれているため、クライアントはアクティブなトラッカーをより速く見つけることができます。これにより、Torrent ファイルのダウンロードをより迅速に開始することができ、同時に単一のトラッカーの負荷を軽減することができます。
BitTorrent のメタデータファイルには 2 つのキーが含まれています:1 つは標準の「announce」キーであり、もう 1 つは新しい「announce-list」キーです。これらのキーは、クライアントが使用する BitTorrent トラッカーサーバーの URL アドレスリストを指定するために使用されます。
「announce」キーとは異なり、「announce-list」キーはネストされたリスト(リストのリスト)を参照しています。各内部リストはトラッカーサーバーの優先度を表しています。これは、クライアントが最初に最初の内部リストのすべてのサーバーにリクエストを送信し、利用できないか応答がない場合に次の内部リストのサーバーを順番に試すことを意味します。利用可能なトラッカーサーバーが見つかるまで続けられます。
クライアントがマルチトラッカー仕様をサポートしており、メタデータファイルに「announce」と「announce-list」の両方のキーが存在する場合、クライアントは「announce-list」の URL アドレスリストのみを使用し、「announce」キーのアドレスは無視します。これにより、複数のトラッカーサーバーを使用することでダウンロードの効率と信頼性が向上し、ダウンロードタスクが他のピアを見つけやすくなり、ダウンロード速度が向上します。
実行順序#
「announce-list」キーの URL アドレスリストは優先度(tiers)ごとに順番に処理され、クライアントはリスト内の URL アドレスを優先度ごとに順番に処理します。各優先度内では、URL アドレスはランダムな順序で処理されるため、前に配置されたアドレスによるダウンロード速度の低下や失敗を回避することができます。また、クライアントが特定のトラッカーサーバーに接続した場合、そのサーバーが所属する優先度はリストの先頭に移動され、そのサーバーとの通信の確率が向上し、ダウンロード速度が速くなります。
例:
d['announce-list'] = [ [tracker1], [backup1], [backup2] ]
「announce」イベントが発生した場合、まず「tracker1」に接続を試みることをお勧めします。接続に失敗した場合(トラッカーが利用できない可能性があります)、次に「backup1」に接続し、さらに失敗した場合は「backup2」に接続を試みます。次回のアナウンス時には、同じ試行順序を繰り返す必要があります - 最初に「tracker1」を試し、次に「backup1」、最後に「backup2」です。この方法を採用する理由は、異なるトラッカー間で情報を共有できないためのようです。各トラッカーに対して毎回同じ順序で接続を試みることで、システムは常に最優先のトラッカーに接続を試みることを保証し、同時に利用可能なバックアップオプションを持つことができます。
d['announce-list'] = [[ tracker1, tracker2, tracker3 ]]
まず、トラッカーリストがシャッフルされていると仮定しましょう。クライアントがトラッカーに接続する必要がある場合、以下の順序で接続を試みます:
- 最初に「tracker1」に接続を試みます。
- 「tracker1」に接続できない場合、「tracker2」に接続を試みます。
- 「tracker2」に接続できる場合、トラッカーリストは「tracker2、tracker1、tracker3」に再配置され、この順序で後続の接続試行が行われます。
- 「tracker2」または「tracker1」に接続できないが、「tracker3」に接続できる場合、トラッカーリストは「tracker3、tracker2、tracker1」に再配置され、この順序で後続の接続試行が行われます。
トラッカー間の負荷分散ポリシー。この方法により、クライアントとトラッカー間で情報を交換し、負荷分散を実現し、特定のトラッカーが過負荷になることでシステム全体のパフォーマンスが低下することを防ぐことができます。
d['announce-list'] = [ [ tracker1, tracker2 ], [backup1] ]
プロセス中には、システムが 3 つのレベルに分かれます:tracker1、tracker2、および backup1。最初のレベルには tracker1 と tracker2 が含まれ、その順序はランダムかもしれません。 「announce」イベントが発生した場合、システムはある順序で(各イベントごとに異なる順序があるかもしれません)tracker1 と tracker2 に接続を試み、その後に backup1 を使用しようとします。言い換えれば、backup1 を使用する前に、システムはまず tracker1 と tracker2 に接続を試みます。