Włączyłem SSL na moim serwerze proxy i odkryłem, że wydajność spadła z około 17 tys. Żądań na sekundę do 5 tys. Żądań na sekundę. Postępowałem zgodnie z kodem w bezpiecznym czacie Netty i nie sądzę, abym zrobił coś inaczej.Jak mogę zwiększyć wydajność serwera SSL
Napisałem fałszywy serwer, aby sprawdzić, czy popełniłem błędy w moim proxy. Uruchamianie fałszywego serwera SSL w normalnym trybie http jest w stanie wykonać około 50k żądań na sekundę. Kiedy włączam SSL na fałszywym serwerze, który spada do 28 tys. Żądań na sekundę.
Czy jest coś, co robię źle? Czy jest coś, czego mi brakuje?
Używam JDK 6 do kompilacji kodu, działającego na JDK 7u4. Używam również Netty-3.5.0. Używam zeusbench do uruchomienia testu. Parametry badań są: zeusbench -n 10000 -c 100 -k -C RC4_SHA "https: ///"
Źródło: http://pastebin.com/iahqr3zT
Edit 1: Zabrakło mi obojętne poprzez serwer JProfiler. Wywołanie SSLContext.createSSLEngine w fabryce potoków zajmuje (średnio) 55.005 mikrosekund (ta średnia została obliczona z 540 wywołań metody).
Wywołanie SslHandler.handshake w channelConnected zajmuje (średnio) 46 284 mikrosekund (tę średnią obliczono na podstawie 540 inwokacji metody).
Rozumiem, że Netty niewiele może zrobić w związku z wywołaniem tworzeniaSSLEngine, ale czy SslHandler.handshake może być lepiej dostrojony? Zajmuje prawie tyle samo czasu, co generowanie samego silnika.
Czy masz możliwość zakończenia protokołu SSL, zanim żądanie dotrze do Twojego serwera? Najlepiej byłoby użyć dedykowanego sprzętu do zakończenia SSL. Także Amazons Elastic Load Balancer może to zrobić. Jaka jest długość klucza SSL? Długość klucza ma wpływ na wydajność http://www.javamex.com/tutorials/cryptography/rsa_key_length.shtml –
@JohnP Dzięki za odpowiedź. Kończenie protokołu SSL przed dotarciem do mojego serwera nie jest możliwe. Dzięki za podpowiedź na temat długości klucza SSL, jego 2048 – blucas