2012-06-05 18 views
5

Ho abilitato SSL sul mio server proxy e ho riscontrato che le prestazioni sono scese da circa 17k richieste al secondo a 5k richieste al secondo. Ho seguito il codice nell'esempio di chat sicuro di Netty e non penso di aver fatto nulla di diverso.Come aumentare le prestazioni SSL del server

Ho scritto un server fittizio per vedere se ho fatto degli errori sul mio proxy. L'esecuzione del dummy server SSL nella normale modalità http è in grado di circa 50k di richieste al secondo. Quando abilito SSL sul server fittizio che scende a 28k richieste al secondo.

C'è qualcosa che sto facendo male? C'è qualcosa che mi manca?

Sto usando JDK 6 per compilare il codice, eseguito su JDK 7u4. Sto usando Netty-3.5.0 pure. Sto usando zeusbench per eseguire il test. I parametri di prova sono: zeusbench -n 10000 -c 100 -k -C RC4_SHA "https: ///"

Fonte: http://pastebin.com/iahqr3zT

Edit 1: Ho eseguito il server fittizio attraverso JProfiler. La chiamata SSLContext.createSSLEngine nella factory della pipeline impiega (in media) 55.005 microsecondi (la media è stata calcolata da 540 invocazioni del metodo).

La chiamata SslHandler.handshake in channelConnected richiede (in media) 4484 microsecondi (la media è stata calcolata da 540 invocazioni del metodo).

Capisco che non ci sia molto che Netty possa fare per la chiamata a creareSSLEngine, ma il SslHandler.handshake può essere ottimizzato meglio? Ci vuole quasi quanto la generazione del motore stesso.

+0

Avete la possibilità di terminare SSL prima che la richiesta raggiunga il vostro server? Idealmente potresti usare hardware dedicato per terminare l'SSL. Anche Amazons Elastic Load Balancer può farlo. Qual è la lunghezza della chiave SSL? La lunghezza della chiave ha un impatto sulle prestazioni http://www.javamex.com/tutorials/cryptography/rsa_key_length.shtml –

+0

@JohnP Grazie per la risposta. Terminare l'SSL prima di raggiungere il mio server non è una possibilità. Grazie per il suggerimento sulla lunghezza della chiave SSL, il suo 2048 – blucas

risposta

-1

Codifica/Decrittografia con Java è molto lenta.
Non si deve utilizzare l'implementazione SSL w/java per le prestazioni.
Ci sono diversi modi per evitare java per la connessione SSL: server proxy

  1. Configura che garantisce collegamenti SSL Infront di server Java
  2. implementazione di SSL handshake biblioteca w/openssl utilizzare la libreria nel codice Netty da JNI
+2

Davvero lento rispetto a cosa? Esistono milioni di siti web in esecuzione, ad es. Tomcat con SSL che sono contro-esempi a queste asserzioni. Ne ho eseguito uno io stesso per diversi anni. – EJP

+0

Ecco una fonte per il commento "java è lento" in questa risposta: http://netty.io/wiki/requirements-for-4.x.html#benefits-of-using-openssl – cdeszaq

0

Si potrebbe provare a riutilizzare le sessioni ssl per le connessioni esistenti, questo riduce l'handshake SSL e dovrebbe darvi un impulso generale.

+0

Questo succede già per impostazione predefinita. Devi fare di tutto per impedirlo. – EJP

Problemi correlati