Ile uderzeń wydajności dla https vs. http dla apache?

50

Z grubsza, ile uderzenia wydajności zajmie https w porównaniu do http dla tej samej strony? Załóżmy, że mogę obsłużyć 1000 żądań / s dla abc.php, o ile to zmniejszy się, gdy uzyskasz dostęp przez https? Wiem, że może to zależeć od sprzętu, konfiguracji, systemu operacyjnego itp., Ale szukam tylko ogólnej zasady.

erotsppa
źródło
2
Byłoby miło zobaczyć na to przyjętą odpowiedź.
Hyppy,

Odpowiedzi:

57

Dla szybkiego i brudnego testu (tj. Bez jakiejkolwiek optymalizacji!) Włączyłem prostą domyślną stronę Ubuntu apache2 (która mówi tylko „działa!”) Zarówno z http, jak i https (certyfikat z podpisem własnym) na lokalnej maszynie wirtualnej Ubuntu 9.04 i uruchomiłem apache test porównawczy „ ab” z 10 000 żądań (bez współbieżności). Klient i serwer znajdowały się na tej samej maszynie / maszynie wirtualnej:

Wyniki dla http („ ab -n 10000 http://ubuntu904/index.html”)

  • Czas potrzebny na testy: 2,664 sekundy
  • Liczba żądań na sekundę: 3753,69 (# / s)
  • Czas na żądanie: 0,266 ms

Wyniki dla https („ ab -n 10000 https://ubuntu904/index.html”):

  • Czas potrzebny na testy: 107,673 sekund
  • Liczba żądań na sekundę: 92,87 (# / s)
  • Czas na żądanie: 10,767 ms

Jeśli przyjrzysz się bliżej (np. Za pomocą tcpdump lub wireshark) komunikacji tcp / ip pojedynczego żądania , zobaczysz, że przypadek http wymaga 10 pakietów między klientem a serwerem, podczas gdy https wymaga 16: Opóźnienie jest znacznie większe w przypadku https. (Więcej o znaczeniu opóźnienia tutaj )

Dodanie testu aktywności ( abopcja -k) poprawia sytuację, ponieważ teraz wszystkie żądania korzystają z tego samego połączenia, tj. Obciążenie SSL jest niższe - ale https jest nadal mierzalny wolniej:

Wyniki dla http with keep-alive („ ab -k -n 10000 http://ubuntu904/index.html”)

  • Czas potrzebny na testy: 1.200 sekund
  • Liczba żądań na sekundę: 8334,86 (# / s)
  • Czas na żądanie: 0,120 ms

Wyniki dla https z keep-alive („ ab -k -n 10000 https://ubuntu904/index.html”):

  • Czas potrzebny na testy: 2,711 sekundy
  • Liczba żądań na sekundę: 3688.12 (# / sec)
  • Czas na żądanie: 0,271 ms

Wniosek :

  • W tym prostym teście https jest znacznie wolniejszy niż http.
  • Dobrym pomysłem jest włączenie obsługi protokołu https i przetestowanie witryny, aby sprawdzić, czy chcesz zapłacić za narzut https.
  • Użyj wireshark, aby uzyskać wrażenie narzutu SSL.
knweiss
źródło
1
+1 Dobra robota. Dzięki za opublikowanie liczb.
MN
Czy możemy uzyskać specyfikację sprzętu tej maszyny? szyfrowanie jest wysoce zależne od mocy procesora.
Matt Simmons,
1
Niedawno przeprowadziłem wiele testów na VPS i jedyną największą rzeczą, która wpłynęła na wydajność, był używany szyfr. Jeśli ograniczysz szyfrowanie do 128 bitów, powinieneś być w stanie uzyskać około 500-600 żądań na sekundę. Za pomocą 256-bitowego szyfru, który spadnie do <100 żądań na sekundę. Uważam, że kiedy przeprowadziłem własne testy, było to 30 próśb na sekundę. Oczywiście rzeczywiste liczby zależą od twojej maszyny.
kovert
Matt Simmons, użyłem 2-rdzeniowego 64-bitowego Ubuntu 9.04 VM (VMware Fusion) działającego na Macu z początku 2008 roku z 2x czterordzeniowymi procesorami Intel Xeon 2,8 GHz.
knweiss,
Twoja odpowiedź uniemożliwiła mi opublikowanie pytania, które zostałoby zamknięte w ciągu 20 sekund. Dzięki!
MonkeyZeus,
10

Na nowoczesnych serwerach powiedziałbym, że twoim wąskim gardłem będzie sieć i twoja aplikacja, a nie szyfrowanie. TLS / SSL w Apache będzie napisany w dość zoptymalizowanym C, więc będzie mniejszy od twojego kodu PHP, zwłaszcza jeśli będziesz robił takie rzeczy jak dostęp do bazy danych. Udostępnianie plików statycznych prawdopodobnie będzie miało większy wpływ, ponieważ szyfrowanie stanie się większą częścią całego procesu. Nie mogę podać żadnych konkretnych liczb, ale byłbym zaskoczony, gdyby było to więcej niż 5% i prawdopodobnie kilka procent bliżej.

David Pashley
źródło
2
David ma rację, zależy to od rodzaju posiadanych treści. Dobrym sposobem byłoby przeprowadzenie testu porównawczego za pomocą apache bench httpd.apache.org/docs/2.2/programs/ab.html
promień
Oprócz szybkości szyfrowania, co z uzgadnianiem protokołu SSL, czy będzie to miało wpływ na wydajność i przepustowość serwera?
erotsppa
Uzgadnianie SSL doda kilka pakietów z przodu połączenia. Wpływ tego będzie zależał w dużej mierze od opóźnienia połączenia między serwerem a klientem. Keepalives HTTP zmniejszą wpływ tego uzgadniania.
David Pashley
1

Uważam, że na nowoczesnym sprzęcie bardziej prawdopodobne jest, że będę związany operacją wejścia / wyjścia dla określonej transakcji niż procesorem (obliczeniem). Jest to szczególnie prawdziwe, gdy mówimy o kompresji i szyfrowaniu. 128-bitowe szyfrowanie jest obecnie trywialne - generalnie trafia mnie znacznie trudniejsze budowanie i dostarczanie stron wychodzących niż przez SSL, i od kilku lat nie zauważyłem znaczącej różnicy w wydajności między ruchem HTTP i https.

Keith
źródło
1

Drugie zalecenie dla nginx. W moich własnych testach zachowywał się dobrze jako dedykowany odciążający SSL.

Chris
źródło
0

Oczywiście, jeśli przetwarzanie SSL mocno uderzy, zawsze możesz przenieść je poza serwer do dedykowanego pola. Jest miły napisać w ten sposób z nginx ponad tutaj . Jest to coś, co zrobiliśmy na wysoce obciążonych serwerach z równoważeniem obciążenia warstwy 7.

Coops
źródło
0

Mogę potwierdzić, że dodatkowe obciążenie związane z szyfrowaniem jest bardzo małe w porównaniu z każdym innym dołączonym elementem (skrypty, sieć, ...)

Francesco Abeni
źródło
0

Z mojego doświadczenia wynika, że ​​ogólna zasada jest bezpośrednio związana z tym, jak duży jest twój klucz publiczny (np. 2048, w porównaniu z 4096, w porównaniu z 8192), wszystko zajmuje znacznie dłużej. Jednak prawie nie zauważam różnicy w środowisku Desktop, ale mobilność jest tam, gdzie widzisz różnicę, ponieważ wymaga mocy obliczeniowej.

Zasadniczo jest to niefortunne, ale SSL zawsze i najprawdopodobniej zawsze będzie pociągał za sobą wysoką wydajność.

Areeb Soo Yasir
źródło