Wie viel Performance-Hit für https vs http für Apache?

50

Wie viel Leistung bringt https im Vergleich zu http für dieselbe Seite? Angenommen, ich kann 1000 Anfragen / s für abc.php verarbeiten. Um wie viel wird sich die Anzahl verringern, wenn über https darauf zugegriffen wird? Ich weiß, dass dies möglicherweise von Hardware, Konfiguration, Betriebssystem usw. abhängt, aber ich suche nur nach einer allgemeinen Faustregel / Schätzung.

erotsppa
quelle
2
Es wäre schön, eine akzeptierte Antwort darauf zu sehen.
Hyppy

Antworten:

57

Für einen Quick & Dirty-Test (dh überhaupt keine Optimierung!) Habe ich die einfache Ubuntu apache2-Standardwebsite (die nur "It works!" Sagt) mit http und https (selbstsigniertes Zertifikat) auf einer lokalen Ubuntu 9.04-VM aktiviert und den Apache ausgeführt Benchmark " ab" mit 10.000 Anfragen (keine Parallelität). Client und Server befanden sich auf demselben Computer / VM:

Ergebnisse für http (" ab -n 10000 http://ubuntu904/index.html")

  • Testdauer : 2.664 Sekunden
  • Anfragen pro Sekunde: 3753.69 (# / Sek.)
  • Zeit pro Anforderung: 0,266 ms

Ergebnisse für https (" ab -n 10000 https://ubuntu904/index.html"):

  • Testdauer : 107.673 Sekunden
  • Anfragen pro Sekunde: 92.87 (# / Sek.)
  • Zeit pro Anfrage: 10.767ms

Wenn Sie sich die TCP / IP-Kommunikation einer einzelnen Anfrage genauer ansehen (z. B. mit tcpdump oder wireshark), werden Sie feststellen, dass der http-Fall 10 Pakete zwischen Client und Server erfordert, während https 16 erfordert: Die Latenz ist bei https viel höher. (Mehr über die Wichtigkeit der Latenz hier )

Das Hinzufügen von Keep-Alive ( abOption -k) zum Test verbessert die Situation, da jetzt alle Anforderungen dieselbe Verbindung verwenden, dh der SSL-Overhead ist geringer - aber https ist immer noch langsamer messbar:

Ergebnisse für http with keep-alive (" ab -k -n 10000 http://ubuntu904/index.html")

  • Testdauer : 1.200 Sekunden
  • Anfragen pro Sekunde: 8334.86 (# / Sek.)
  • Zeit pro Anforderung: 0,120 ms

Ergebnisse für https mit keep-alive (" ab -k -n 10000 https://ubuntu904/index.html"):

  • Testdauer : 2.711 Sekunden
  • Anfragen pro Sekunde: 3688.12 (# / Sek.)
  • Zeit pro Anfrage: 0.271ms

Fazit :

  • In diesem einfachen Testfall ist https viel langsamer als http.
  • Es ist eine gute Idee, den https-Support zu aktivieren und Ihre Website einem Benchmark zu unterziehen, um festzustellen , ob Sie für den https-Overhead zahlen möchten.
  • Verschaffen Sie sich mit wireshark einen Eindruck über den SSL-Overhead.
knweiss
quelle
1
+1 Gute Arbeit dort. Vielen Dank für die Veröffentlichung der Nummern.
MN
Können wir Angaben zur Hardware dieser Maschine machen? Die Verschlüsselung hängt stark von der Prozessorleistung ab.
Matt Simmons
1
Ich habe in letzter Zeit viele Tests mit einem VPS durchgeführt, und das Einzige, was die Leistung beeinträchtigte, war die verwendete Verschlüsselung. Wenn Sie die Verschlüsselung auf 128 Bit beschränken, sollten Sie in der Lage sein, ungefähr 500-600 Anfragen pro Sekunde zu erhalten. Bei Verwendung einer 256-Bit-Verschlüsselung, die auf <100 fällt, werden pro Sekunde Anforderungen gestellt. Ich glaube, als ich meine eigenen Tests durchgeführt habe, waren es 30 Anfragen pro Sekunde. Offensichtlich hängt die tatsächliche Anzahl von Ihrer Maschine ab.
Covert
Matt Simmons, ich habe eine 64-Bit-Ubuntu 9.04-VM mit 2 Kernen (VMware Fusion) verwendet, die auf einem Mac Pro von Anfang 2008 mit zwei Quad-Core-Intel Xeon-CPUs mit 2,8 GHz ausgeführt wurde.
Knweiss
Ihre Antwort hat mich daran gehindert, eine Frage zu stellen, die innerhalb von 20 Sekunden geschlossen worden wäre. Vielen Dank!
MonkeyZeus
10

Auf modernen Servern würde ich sagen, dass Ihr Engpass das Netzwerk und Ihre Anwendung ist, nicht die Verschlüsselung. Das TLS / SSL in Apache wird in ziemlich optimiertem C geschrieben, wird also von Ihrem PHP-Code in den Schatten gestellt, besonders wenn Sie Dinge wie den Datenbankzugriff tun. Das Bereitstellen statischer Dateien wird wahrscheinlich größere Auswirkungen haben, da die Verschlüsselung einen größeren Teil des gesamten Prozesses ausmacht. Ich kann Ihnen keine konkreten Zahlen nennen, aber ich wäre überrascht, wenn es mehr als 5% und wahrscheinlich ein paar Prozent näher wäre.

David Pashley
quelle
2
David hat recht, es hängt von der Art des Inhalts ab, den Sie haben. Der beste
radius
Was ist mit dem SSL-Handshake, abgesehen von der Verschlüsselungsgeschwindigkeit, das sich auf die Serverleistung und den Durchsatz auswirkt?
Erotsppa
Der SSL-Handshake fügt der Vorderseite einer Verbindung ein paar Pakete hinzu. Die Auswirkungen hängen massiv von der Latenz der Verbindung zwischen Server und Client ab. HTTP-Keepalives reduzieren die Auswirkungen dieses Handshakes.
David Pashley
8

Nimm nichts an, teste es selbst! Natürlich auf Ihren spezifischen Web-Apps.

SaveTheRbtz
quelle
1

Ich stelle fest, dass bei moderner Hardware die Wahrscheinlichkeit größer ist, dass ich für eine bestimmte Transaktion E / A-gebunden bin, als dass ich prozessorgebunden (rechnergebunden) bin. Dies gilt insbesondere für die Komprimierung und Verschlüsselung. Die 128-Bit-Verschlüsselung ist heutzutage trivial - ich werde im Allgemeinen viel härter beim Erstellen und Bereitstellen der ausgehenden Seiten als bei der Verwendung von SSL getroffen und habe in einigen Jahren keinen signifikanten Unterschied in der Leistung zwischen http- und https-Verkehr bemerkt.

Keith
quelle
1

Ich stimme der Empfehlung für Nginx zu. In meinen eigenen Tests hat es sich als dedizierter SSL-Offloader gut behauptet.

Chris
quelle
0

Natürlich können Sie die SSL-Verarbeitung, wenn sie stark ausfällt, jederzeit vom Server in eine dedizierte Box verschieben. Es gibt einen schönen Bericht darüber, wie man das hier mit Nginx macht . Dies haben wir auf hoch ausgelasteten Servern mit Layer 7-Lastausgleich getan.

Coops
quelle
0

Ich kann bestätigen, dass der zusätzliche Aufwand für die Verschlüsselung im Vergleich zu allen anderen enthaltenen Elementen (Scripting, Netzwerk, ...) sehr gering ist.

Francesco Abeni
quelle
0

Nach meiner Erfahrung hängt die allgemeine Regel direkt davon ab, wie groß Ihr öffentlicher Schlüssel ist (z. B. 2048, vs 4096, vs 8192), und das alles dauert erheblich länger. Ich kann jedoch kaum einen Unterschied in einer Desktop-Umgebung feststellen, aber bei Mobilgeräten ist ein Unterschied festzustellen, da dies Rechenleistung erfordert.

Im Allgemeinen ist es bedauerlich, aber SSL hat immer und wird wahrscheinlich immer einen enormen Leistungsverlust mit sich bringen.

Areeb Soo Yasir
quelle