私は最近、小さな EC2 インスタンス (m1.small) で 1 秒あたり約 2,000 の新しい接続要求を処理することがテストされている Node.js ベースの Web ソケット サーバーをセットアップしました。m1.small インスタンスのコストと、複数のインスタンスを HAProxy などの WebSocket 対応プロキシ サーバーの背後に置く機能を考慮すると、結果には非常に満足しています。
ただし、SSL を使用したテストをまだ行っていないことに気付き、いくつかの SSL オプションを調べました。プロキシ サーバーで SSL 接続を終了することが理想的であることが明らかになりました。これは、プロキシ サーバーがトラフィックを検査し、X-Forward-For などのヘッダーを挿入して、サーバーが要求の送信元の IP を認識できるようにするためです。
そこで、私は Pound、stunnel、スタッドなどの多くのソリューションを調べました。これらはすべて、443 で着信接続を終了できるようにし、ポート 80 で HAProxy に渡し、次に接続を Web サーバーに渡します。しかし残念なことに、c1.medium (高 CPU) インスタンス上の SSL ターミネーション プロキシ サーバーにトラフィックを送信すると、すべての CPU リソースが非常に速く消費され、1 秒あたり 50 リクエスト程度しか消費されないことがわかりました。上記の 3 つのソリューションをすべて使用してみましたが、いずれも OpenSSL に依存していると思われるのとほぼ同じように動作しました。64 ビットの非常に大きな High CPU インスタンス (c1.xlarge) を使用してみましたが、パフォーマンスはコストに比例してしか変化しないことがわかりました。したがって、EC2 の料金に基づくと、1 秒あたり 200 件の SSL リクエストに対して約 600 ペンス/月を支払う必要があります。1 秒あたり 000 件の非 SSL リクエスト。1 秒あたり 1,000 または 10,000 のリクエストを受け入れることを計画し始めると、前者の価格は経済的にすぐに実行不可能になります。
また、Node.js の https サーバーを使用して SSL を終了しようとしましたが、パフォーマンスは Pound、stunnel、およびスタッドと非常に似ていたため、そのアプローチに対する明らかな利点はありません。
だから私が誰かに助けてもらいたいのは、SSL接続を提供するために吸収しなければならないこのばかげたコストを回避する方法をアドバイスすることです. ハードウェアは SSL の暗号化と復号化用に設計されているため、SSL ハードウェア アクセラレータのほうがはるかに優れたパフォーマンスを提供すると聞いていますが、現在すべてのサーバーに Amazon EC2 を使用しているため、個別のデータがない限り、SSL ハードウェア アクセラレータを使用することはできません。物理サーバーを備えたセンター。私は、Amazon、Google、Facebook などの企業が SSL 経由ですべてのトラフィックを提供する方法を理解するのに苦労しています。SSL のコストが非常に高い場合です。そこにはもっと良い解決策があるはずです。
アドバイスやアイデアをいただければ幸いです。
ありがとうマット