Cloudflare のエンジニアは、Linux ネットワーキングスタック内で soft-unicast 機能を拡大する際に重大な課題に直面しました。これは冗長性を確保するための複雑なルーティングと anycast 設定によるものです。先進的なソケットオプションを使用して制限を回避しようとする試みは、最終的にシンプルなプロキシソリューションに戻りました。この経験は、大規模ネットワーキング要件向けに Linux をカスタマイズする難しさを浮き彫りにしています。
Cloudflare のネットワークインフラは、Linux ネットワーキングスタックの限界を試す複雑なルーティングと設定に依存しています。エンジニアの Chris Branch による最近のブログ投稿で詳述されているように、同社は anycast を多用して外部ネットワークに冗長性を分散させるため、soft-unicast 機能を強化しようとしました。
主な問題は、Netfilter の接続追跡モジュール(conntrack として知られる)と Linux ソケットサブシステムによるパケット書き換え処理で発生しました。soft-unicast は複数のプロセスが同一接続を認識する必要がありますが、Linux の設計により効果的なパケット書き換えが不可能でした。最初に、チームはこの処理をローカルプロキシで実装しましたが、パフォーマンスオーバーヘッドが発生しました。
これに対処するため、エンジニアは仮想マシンのネットワーク接続移行に通常使用される TCP_REPAIR ソケットオプションの悪用を検討しました。これによりソケット接続状態を完全に記述し「修復」できました。TCP Fast Open と組み合わせ、TFO クッキーを使って標準ハンドシェイクを回避しました。これらの革新にもかかわらず、問題が残り、初期の demux メカニズムを部分修正として提案しました。
結局、複雑さが大きすぎました。チームは TCP 接続を終了しローカルソケットにトラフィックをリダイレクトするシンプルなローカルプロキシ方式を選択しました。この決定は、インターネットインフラの最前線に立つ Cloudflare でさえ、Linux ネットワーキングスタックから完全に脱却することが依然として大きな課題であることを示しています。