CloudflareはNGINXからRustで書かれた独自のプロキシPingoraに切り替えました。

Cloudflareは、コンテンツ配信ネットワークがRust言語で書かれたPingoraプロキシを使用するように移行すると発表しました。 新しいプロキシは、NGINX サーバーベースの構成を Lua スクリプトに置き換え、70 日あたり 67 兆件を超えるリクエストを処理します。 特殊なプロキシへの移行により、新機能の実装とメモリの安全な操作によるセキュリティの向上だけでなく、パフォーマンスの大幅な向上とリソースの節約にもつながったことに注目してください。Pingora ベースのソリューションでは、プロキシを使用する必要がありません。したがって、同じ量のトラフィックを処理しながら、消費する CPU リソースが XNUMX% 減り、メモリが XNUMX% 減ります。

長い間、NGINX および Lua スクリプトに基づいてユーザーとエンドサーバー間のトラフィックをプロキシするシステムは Cloudflare のニーズを満たしていましたが、ネットワークが成長し、その複雑さが増すにつれて、普遍的なソリューションでは、両方の点で不十分であることが判明しました。パフォーマンスに制限があり、クライアントにとっての新しい機会の拡張性と実装が制限されているためです。 特に、単純なゲートウェイとロード バランサーを超える機能を追加する際に課題がありました。 たとえば、サーバーがリクエストの処理に失敗した場合、異なる HTTP ヘッダーのセットを指定して、リクエストを別のサーバーに再送信する必要がありました。

Pingora は、リクエストを個別のワーカー プロセスに分離するアーキテクチャの代わりに、マルチスレッド モデルを使用します。これは、Cloudflare のユースケース (統計的に大きなシフトを伴う、異なるサイトからのトラフィックの集中) において、CPU コア間でリソースをより効率的に分散することを示しました。 特に、nginx による不均衡なリクエストのプロセスへのバインドにより、CPU コアの負荷が不均衡になり、その結果、リソースを大量に消費するリクエストが発生し、I/O がブロックされて他のリクエストの処理が遅くなります。 さらに、接続プールをハンドラー プロセスにバインドすると、他のハンドラー プロセスからすでに確立されている接続を再利用できず、ハンドラー プロセスが多数ある場合には効率が低下します。

NGINX:

CloudflareはNGINXからRustで書かれた独自のプロキシPingoraに切り替えました。

ピンゴラ:

CloudflareはNGINXからRustで書かれた独自のプロキシPingoraに切り替えました。

Pingora の導入により、新しい接続のインストール数が 160 分の 87.1 に削減され、再利用されるクエリの割合が 99.92% から XNUMX% に増加することが可能になりました。 再接続の削減と CPU コアのより効率的な使用に加えて、新しいプロキシのパフォーマンスの向上は主に、nginx で使用される遅い Lua ハンドラーの削除によるものでした。

Rust 言語は、メモリを使用した安全な操作を保証するツールの可用性と組み合わせて、高いパフォーマンスを実現するために選択されました。 Cloudflare の高度な資格を持つエンジニアが C 言語で書かれたコードをレビューしたにもかかわらず、メモリの問題につながるエラー (HTML パーサーの脆弱性など) を回避できなかったことが述べられています。 新しいコードに関しては、Pingora での障害を分析したケースについて説明されていますが、その原因はアプリケーションの問題ではなく、Linux カーネルのエラーとハードウェア障害であることが判明しました。

さらに、Linux カーネルに Rust 言語のサポートを含めることに関して、最近開催されているオープンソース サミット ヨーロッパ会議で発言した Linus Torvalds のコメントにも注目してください。 Rust 言語でデバイス ドライバーを開発するためのパッチは 6.0 カーネルには含まれていませんでしたが、Linus 氏によると、それらは 6.1 カーネルに受け入れられる可能性が高く、統合を遅らせるつもりはないとのことです。 Rust のサポートを追加する動機として、セキュリティへのプラスの効果に加えて、Linus 氏は、新しい参加者のコアに取り組むことへの関心を高める機会も挙げています。これは、古参のユーザーの高齢化を考えると重要です。

出所: オープンネット.ru

コメントを追加します