# エニキャストルーティング ## 定義 エニキャストルーティング(Anycast Routing)は、同一のIPアドレスを複数の地理的に分散したサーバー(フロントエンド・PoP)で共有し、BGPのベストパス選択によりユーザーのリクエストを「最近接」のサーバーへ自動的に誘導する手法である。CDNでは、エニキャストアドレスを100以上のPoP全体でアナウンスすることで、明示的なDNSリダイレクションなしに低レイテンシルーティングを実現する。 Microsoft の Odin の観察では、エニキャストは60%のリクエストを最適フロントエンドへ送信するが、20%は最適より25ms以上悪いフロントエンドへ送信する([[@2018__NSDI__Odin - Microsoft's Scalable Fault-Tolerant CDN Measurement System]])。 **エニキャスト vs DNSリダイレクション**: - **エニキャスト**: BGPルーティングがFE選択を決定。ユーザーのLDNSとHTTPリクエストが同一FEに向くとは限らない - **DNSリダイレクション**: 権威DNSがLDNS単位でFEを指定。LDNSが広域分散ユーザーを服するとパフォーマンス低下 - Microsoft は2種を複合: ファーストパーティCDNにエニキャスト + ユニキャストパッチ、Azure TrafficManagerにDNSリダイレクション ## 横断的知見 - **エニキャストの性能盲目性**: BGPはネットワーク性能を考慮せずベストパスを選択するため、循環ルーティングや遠隔FEへの誘導が発生する。Odinの計測では20%のリクエストが最適より25ms以上悪いFEへ送信される。DNS転送との複合でこの弱点を補完できる——両者の性能悪化要因は相関しないため(Source: [[@2018__NSDI__Odin - Microsoft's Scalable Fault-Tolerant CDN Measurement System]]) - **ユーザー・LDNS分離問題**: エニキャストとDNSリダイレクションをリージョナルに組み合わせると、ユーザーのLDNSと自身が異なるリージョンのFEに誘導される場合がある(Figure 6の3シナリオ)。グラフ分割でリージョンを設計してもP75で約3%のレイテンシ劣化が生じる(Source: [[@2018__NSDI__Odin - Microsoft's Scalable Fault-Tolerant CDN Measurement System]]) - **EDNS Client Subnet(ECS)の普及不足**: ECSはユーザープレフィックス粒度のDNSリダイレクション決定を可能にするが、大手パブリックリゾルバ以外ではほぼ採用されていない。Odinの計測が示す実態(Source: [[@2018__NSDI__Odin - Microsoft's Scalable Fault-Tolerant CDN Measurement System]]) - **エニキャストリングによる負荷分散**: 複数のエニキャストIPアドレス(リング)を設計し、過負荷時にDNSでより小さいリングへ誘導する方式(FastRoute、Odin/Microsoft)が実用化されている。リングの設計にはFEごとの制御可能性(HTTP・DNS要求の相関)計測が必要(Source: [[@2018__NSDI__Odin - Microsoft's Scalable Fault-Tolerant CDN Measurement System]]) ## 未解決の問い - BGPルーティング変化でlong-lived TCP接続が切断される問題(anycast TCP session disruption)をアプリケーション層透過的に解決する手法は? - エニキャストとDNSリダイレクションの複合で、ECS普及後の世界でどう設計が変わるか? - グローバルエニキャストからリージョナルエニキャストへの移行で、高パーセンタイル(P90/P99)のレイテンシ劣化が経時増加する原因と対策は? ## 関連 - [[CDN計測システム]]: エニキャスト性能を継続計測・パッチするOdinの仕組み - [[ネットワーク監視]]: データセンター内ネットワーク監視(エニキャストはWAN領域で補完的) ## 出典 - [[@2018__NSDI__Odin - Microsoft's Scalable Fault-Tolerant CDN Measurement System]]: エニキャストCDNの性能特性と計測ベースのパッチ適用の一次資料