Telegram データセンターのアーキテクチャとインフラストラクチャの謎
Telegram データセンターのアーキテクチャとインフラストラクチャの謎
Telegram のインフラストラクチャは、ユーザーアカウント、メッセージルーティング、およびメディアストレージを処理する、地理的に分散されたデータセンター (DC) のシステムを中心に構築されています。このアーキテクチャは、単一の当局による法的アクセスを困難にするために、ユーザーデータを異なる管轄区域に分散させるように設計されていますが、その結果、エンドユーザーにとってパフォーマンスや透明性の問題が生じることがあります。
地理的分布とユーザールーティング
Telegram は、登録時の地理的位置に基づいてユーザーを特定のデータセンターに割り当てます。これは、アプリケーションのレイテンシとパフォーマンスに直接影響します。現在の場所から物理的に遠い DC に接続されているユーザーは、しばしば応答速度の低下を経験します。
- DC2: すべての MTProto クライアントの主要な接続ポイントとして機能し、ロシアおよびウクライナのユーザーの主要なハブです。ロシア語圏の技術コミュニティでは、「DC2 down」はサービス停止を表す一般的なフレーズとして使われています。
- DC5: 主にアジアのユーザーにサービスを提供しており、韓国などの地域で登録したユーザーも含まれます。一部のユーザーは、DC5 の停止が中国のユーザーの不満と相関していると報告しています。
- Miami DC: 米国東海岸のユーザーは、マイアミのデータセンターに割り当てられた場合、高い応答性(「snappy fast」)を報告しています。これは、頻繁にリクエストを行うアプリにおいて、物理的な近接性がレイテンシにどれほど重要であるかを浮き彫りにしています。
データストレージとメディア処理
Telegram は、帯域幅とパフォーマンスを最適化するために、アカウントのメタデータとメッセージのストレージと、大容量のメディアファイルのストレージを分離しています。
- Account Data: ユーザーのプロフィールとメッセージ履歴を管理する特定の DC に保存されます。
- Media Storage: Telegram は、メディア専用の 2 つの専用 DC を採用しています。他の DC でもメディア転送が可能ですが、これらの転送の帯域幅は、通常、専用メディアハブを優先するために制限(throttled)されます。
インフラストラクチャのセキュリティと管轄区域の戦略
Telegram は公式に、ユーザーデータを異なる管轄区域の異なるサーバーに保存することで、当局がユーザー情報にアクセスすることをより困難にしていると主張しています。しかし、この断片化されたアプローチは、インフラストラクチャの実際のセキュリティに関する、多大な外部の推測や批判を招いています。
管轄区域に関する推測
一部のアナリストは、ユーザーを DC に分散させることは、「Five Eyes」インテリジェンス・アライアンスやその他の地政学的な境界線と一致している可能性があり、データの所有権が、フランスでの Telegram CEO の逮捕のような政治的圧力や法的措置に基づいて移動させられる可能性があることを示唆しています。
外部管理の疑惑
最近の報告では、Telegram のインフラストラクチャが、Telegram 自身の従業員も知らないうちに、FSB(ロシア連邦保安局)のインフラストラクチャを管理する個人によって管理されていると主張されています。これらの主張は、ルーティングやデータの管理における潜在的なバックドアやシステム的な脆弱性を唆しています。
技術的実装と技術的負債
開発の観点から、Telegram の DC アーキテクチャは、一部の人々から、重大な技術的負債の源として見なされています。ユーザーごとに最新の「sticky master election」を使用するのではなく、Telegram はカスタムの、硬直的な DC 割り当てシステムに依存しています。これは、チームのすべての新しい開発者が、グローバルなコンテンツ配信における標準的な業界慣行とは異なる、独自のルーティングロジックを学習する必要があることを意味します。
"This strikes me as a huge amount of custom code and technical debt. Every new software dev probably has to learn this. Why not a sticky master election per user, and have no special data centers?"
あなたのデータセンターを特定する
開発者やパワーユーザーにとって、Telegram API を使用して、どのアカウントがどのデータセンターに割り当てられているかを特定することは可能です。具体的には、help.getConfig メソッドを使用して、現在の設定を取得し、アカウントに関連付けられた DC を特定することができます。