# エニキャストルーティング
## 定義
エニキャストルーティング(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の性能特性と計測ベースのパッチ適用の一次資料