Cloudflareが発表されました 最近 誰が移行しているか プロキシを使用するためのコンテンツ配信ネットワーク «ピンゴラ»、 Rustで書かれていることで際立っています。 の 新しいプロキシが置き換えられました Lua スクリプトを使用した NGINX サーバーベースの構成で、XNUMX 日あたり XNUMX 億件を超えるリクエストを処理します。
特殊なプロキシ«Pingora»への移行により、新しい機能を実装し、メモリを使用した安全な作業によりセキュリティを強化できるだけでなく、パフォーマンスとリソースの節約が大幅に向上したことに注意してください。
Pingora ベースのソリューションは、Lua を使用する必要がなく、Cloudflare の負荷最適化アーキテクチャを使用して、同じ量のトラフィックを処理しながら、70% 少ない CPU リソースと 67% 少ないメモリを消費します。
長い間、 NGINX スクリプトに基づくユーザーとエンド サーバー間のトラフィック プロキシ システム とルア Cloudflareのニーズを満たしました、しかし、ネットワークが成長し、その複雑さが増すにつれて、 普遍的な解決策では十分ではありませんでした、拡張性と顧客のための新しい機会の実装におけるパフォーマンスと制限の両方の観点から。
特に、単純なゲートウェイとロード バランサー以外の機能を追加するのは困難でした。 たとえば、サーバーがリクエストを処理できなかった場合、リクエストを別のサーバーにリダイレクトして、別の HTTP ヘッダー セットを提供する必要がありました。
アーキテクチャの代わりに 個別の作業プロセス (ワーカー) に分割されたリクエストで、 Pingora はマルチスレッド モデルを使用します、Cloudflare の使用シナリオ (異なるサイトからのトラフィックが集中し、大きな統計的シフトがある) では、CPU コア間のリソースのより効率的な分配が示されました。
特に、nginx で不均衡なリクエストをプロセスにバインドすると、CPU コアの負荷が不均衡になり、その結果、リソースを大量に消費するリクエストと I/O ブロッキングにより、他のリクエストの処理が遅くなりました。
また、接続プールをコントローラ プロセスにバインドすると、他のコントローラ プロセスからすでに確立されている接続を再利用できず、多数のコントローラ プロセスがある場合に効率が低下します。
ピンゴラの導入で運用回数を160分のXNUMXに削減 新しい接続の確立 再利用されるリクエストの割合を 87,1% から 99,92% に増やします。 再接続の削減と CPU コアのより効率的な使用に加えて、新しいプロキシのパフォーマンスの向上は、主に nginx で使用される遅い Lua ドライバーの削除によるものでした。
Rust 言語が選択された理由は、高いパフォーマンスを可能にするためです メモリセーフツールの可用性と組み合わせて。 優秀な Cloudflare エンジニアとコード レビューにもかかわらず、C 言語で記述されたプログラムは、メモリの問題 (HTML パーサーの脆弱性など) につながるバグを回避できなかったことが言及されています。
新しいコードについては、Pingora でのクラッシュ解析事例について話しましたが、これはアプリケーションの問題ではなく、Linux カーネルのバグとハードウェア障害が原因であることが判明しました。
さらに、Linus Torvalds が、最近開催された Open-Source Summit Europe カンファレンスで表明された、Linux カーネルに Rust 言語のサポートを含めることについてコメントしたことも注目に値します。 カーネル 6.0 には、Rust 言語でデバイス ドライバーを開発するためのパッチは含まれていませんでしたが、Linus によると、それらはカーネル 6.1 で受け入れられる可能性が高く、統合を利用するつもりはありません。
Rust のサポートを追加する理由として、セキュリティへのプラスの影響に加えて、Linus はまた、老朽化したベテランのコンテキストでは重要な、新規参入者からカーネルに取り組むことへの関心を高める機会を利用しています。
最後に あなたがそれについてもっと知りたいなら、詳細はで確認できます 次のリンク。