Cloudflareは、コンテンツ配信ネットワークをRustで書かれたことで注目されている「Pingora」プロキシを使用するように移行すると発表した。この新しいプロキシは、NGINXサーバーベースの構成をLuaスクリプトに置き換え、1日あたり10億以上のリクエストを処理するという。
専用プロキシ「Pingora」への移行により、新機能の実装や、メモリを安全に扱うことによるセキュリティの向上だけでなく、パフォーマンスの大幅な向上やリソースの節約につながったと、同社は述べている。
Pingoraベースのソリューションでは、Luaを使用する必要がなく、Cloudflareの負荷最適化アーキテクチャを使用しているため、同じ量のトラフィックを処理しながら、CPUリソースを70%、メモリを67%削減することができます。
Cloudflare
長い間、NGINXとLuaスクリプトをベースにしたユーザーとエンドサーバー間のトラフィックプロキシシステムがCloudflareのニーズを満たしていたが、ネットワークの成長と複雑化に伴い、パフォーマンスの面でも、拡張性や顧客の新しい機会の実装における限界の面でも、ユニバーサルソリューションでは十分ではなくなってきた。
特に、単純なゲートウェイやロードバランサー以上の機能を追加することには困難があった。例えば、サーバーがリクエストを処理できない場合、別のサーバーにリクエストをリダイレクトし、別のHTTPヘッダーを提供する必要があった。
Pingoraは、リクエストを個別の作業プロセス(ワーカー)に分割するアーキテクチャではなく、マルチスレッドモデルを採用しており、Cloudflareの利用シナリオ(統計的変化の大きい異なるサイトからのトラフィックが集中)では、CPUコア間のリソース配分がより効率的であることが示されている。
特に、nginxで偏ったリクエストをプロセスにバインドすると、CPUコアの負荷が偏り、その結果、リソースを多く消費するリクエストやI/Oのブロックが他のリクエストの処理を遅くしてしまうという問題がありました。
また、ドライバプロセスに接続プールをバインドすると、すでに確立された他のドライバプロセスからの接続を再利用できないため、ドライバプロセス数が多い場合に効率が低下することがありました。
Cloudflare
Pingora の導入により、新規接続確立のオペレーションが160倍に減少し、再利用されるリクエストの割合が87.1%から99.92%へと増加した。再接続の減少やCPUコアの効率的な利用に加え、新しいプロキシの性能向上は、主にnginxで使われていた低速なLuaドライバを排除したことによるものだ。
Rust言語が選ばれた理由は、高いパフォーマンスとメモリーセーフツールの利用が可能であるためだ。Cloudflareのエンジニアの高い資質とコードレビューにもかかわらず、C言語で書かれたプログラムでは、メモリ問題につながるバグ(HTML パーサーの脆弱性など)を回避することができなかったと述べている。
新しいコードについては、Pingoraのクラッシュ解析で、アプリケーションの問題ではなく、Linuxカーネルのバグやハードウェアの故障が原因であることが判明している。
さらに、Linus Torvalds氏が、LinuxカーネルにRust言語のサポートが含まれることについて、先日開催されたOpen-Source Summit Europeのカンファレンスで表明したコメントも注目される。カーネル6.0 は、Rustでのデバイス ドライバーを開発するパッチが含まれていないが、Torvalds氏によると、それはカーネル 6.1 では、統合を利用しないように受け入れられる可能性が高い。
Rustのサポートを追加する理由として、セキュリティへの好影響に加え、Torvalds氏は、ベテランが高齢化する中で重要な、新規参入者のカーネルへの取り組みへの関心を高める機会にもなると考えているようだ。
最後に、ご興味のある方は、以下のリンク先で詳細をご確認頂きたい。
Source
コメントを残す