Multitracker Metadata Extension(マルチトラッカーメタデータ拡張)は、BitTorrent プロトコルのメタデータ拡張であり、複数の BitTorrent トラッカー間での協調作業の効率を向上させることを目的としています。この拡張機能により、Torrent ファイルには複数のトラッカーのアドレスリストが含まれ、クライアントはこれらのアドレスを使用して利用可能なトラッカーに接続することができます。したがって、1 つのトラッカーがオフラインの場合でも、クライアントは他のトラッカーを介してファイルをダウンロードまたは共有することができます。
通常の BitTorrent プロトコルとは異なり、Multitracker Metadata Extension ではトラッカーアドレスのリストが含まれているため、クライアントはアクティブなトラッカーをより迅速に見つけることができます。これにより、Torrent ファイルのダウンロードをより迅速に開始することができ、同時に単一のトラッカーの負荷を軽減することができます。
メタデータ拡張#
BitTorrent メタデータファイルには、2 つのキー(key)が含まれています。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 に接続しようとします。