同じページのhttpと比較して、httpsのパフォーマンスヒットはおおよそどれくらいかかりますか?私がabc.phpの1000リクエスト/秒を処理できると仮定すると、https経由でアクセスした場合、どれだけ減少しますか?これはハードウェア、構成、OSなどに依存している可能性があることはわかっていますが、一般的な経験則/概算を探しています。
クイック&ダーティーテスト(つまり、最適化はまったくありません!)のために、ローカルUbuntu 9.04で単純なUbuntu Apache2のデフォルトのWebサイト(「動作する」とだけ表示されます)をhttpとhttps(自己署名証明書)の両方で有効にしましたVMで、Apacheベンチマーク "ab
"を実行し、10,000リクエスト(同時実行なし)で実行しました。クライアントとサーバーは同じマシン/ VM上にありました:
httpの結果( "ab -n 10000 http://ubuntu904/index.html
")
httpsの結果( "ab -n 10000 https://ubuntu904/index.html
"):
single requestのtcp/ip通信を(tcpdumpやWiresharkなどで)詳細に調べると、httpのケースで必要なことがわかります。クライアントとサーバー間のパケット数は10ですが、httpsには16が必要です。 (レイテンシの重要性についての詳細 ここ )
キープアライブの追加(ab
オプション-k
)をテストすると、すべてのリクエストが同じ接続を共有するようになるため、状況が改善されます。つまり、SSLオーバーヘッドは低くなりますが、httpsの測定速度は低下します。
httpの結果とキープアライブ( "ab -k -n 10000 http://ubuntu904/index.html
")
httpsの結果とキープアライブ( "ab -k -n 10000 https://ubuntu904/index.html
"):
結論:
最近のサーバーでは、ボトルネックは暗号化ではなくネットワークとアプリケーションになると思います。 ApacheのTLS/SSLはかなり最適化されたCで記述されるため、特にデータベースアクセスなどを行う場合は、PHPコードによって小さくなります。静的ファイルの提供は暗号化はプロセス全体の大きな部分となるため、おそらくより大きな影響があります。具体的な数値を示すことはできませんが、5%を超えていて、おそらく数パーセントに近いのではないかと思います。
Nginxの2番目の推奨事項。私自身のテストでは、専用のSSLオフローダーとしてうまく機能しました。
最近のハードウェアでは、プロセッサ(計算)にバインドするよりも、特定のトランザクションにI/Oバインドする可能性が高いことがわかりました。これは、圧縮と暗号化について話すときに特に当てはまります。最近の128ビット暗号化は簡単です。私は通常、SSLを使用するよりも送信ページの構築と配信が非常に難しくなり、数年でhttpトラフィックとhttpsトラフィックのパフォーマンスに大きな違いがあることに気づきませんでした。
もちろん、SSL処理が大きな影響を与えた場合は、常にそれをサーバー外の専用ボックスに移動できます。 here を介してnginxでこれを行うことについての素晴らしい記事があります。これは、高負荷のレイヤー7負荷分散サーバーで行ったものです。
私の経験から、一般的なルールは、公開鍵の大きさに直接関係しています(たとえば、2048、4096、8192など)。ただし、デスクトップ環境の違いにはほとんど気づきませんが、モバイルは計算能力を必要とするため、違いを見ることができます。
一般的には残念なことですが、SSLには常に、そしておそらくは常に大きなパフォーマンスの低下が伴います。
含まれる他のすべての要素(スクリプト、ネットワークなど)と比較して、暗号化のために追加される負荷が非常に小さいことが確認できます