2012-06-05 21 views
5

He habilitado SSL en mi servidor proxy y he descubierto que el rendimiento ha disminuido de alrededor de 17k solicitudes por segundo a 5k solicitudes por segundo. Seguí el código en el ejemplo de chat seguro de Netty y no creo que haya hecho algo diferente.Cómo puedo aumentar el rendimiento SSL del servidor

He escrito un servidor ficticio para ver si he cometido algunos errores en mi proxy. Ejecutar el servidor SSL ficticio en el modo http normal es capaz de alrededor de 50k solicitud por segundo. Cuando habilito SSL en el servidor ficticio que cae a 28k solicitudes por segundo.

¿Hay algo que esté haciendo mal? ¿Se me escapa algo?

Estoy usando JDK 6 para compilar el código, ejecutando en JDK 7u4. Estoy usando Netty-3.5.0 también. Estoy usando zeusbench para ejecutar la prueba. Los parámetros de ensayo son: zeusbench -n 10000 -c -k 100 -C RC4_SHA "https: ///"

Fuente: http://pastebin.com/iahqr3zT

Edición 1: me he encontrado el servidor simulado a través JProfiler. La llamada a SSLContext.createSSLEngine en la fábrica de tuberías lleva (en promedio) 55,005 microsegundos (ese promedio se ha calculado a partir de 540 invocaciones del método).

Llamada SslHandler.handshake en el canal Toma conectada (en promedio) 46,284 microsegundos (ese promedio se ha calculado a partir de 540 invocaciones del método).

Entiendo que Netty no puede hacer gran cosa acerca de la llamada para crearSSLEngine, pero ¿podría SslHandler.handshake ajustarse mejor? Su toma casi tan larga como la generación del motor en sí.

+0

¿Tiene la posibilidad de finalizar el SSL antes de que la solicitud llegue a su servidor? Lo ideal sería utilizar hardware dedicado para terminar el SSL. Amazons Elastic Load Balancer puede hacer esto también. ¿Cuál es la longitud de la clave SSL? La longitud de la clave tiene un impacto en el rendimiento http://www.javamex.com/tutorials/cryptography/rsa_key_length.shtml –

+0

@JohnP Gracias por la respuesta. Terminar el SSL antes de llegar a mi servidor no es una posibilidad. Gracias por la sugerencia sobre la longitud de la clave SSL, es 2048 – blucas

Respuesta

-1

Encriptación/Descifrado w/java es muy lento.
No debe usar la implementación SSL w/java para el rendimiento.
Hay varias maneras de evitar java para conexión SSL: servidor proxy

  1. Configurar que proporcionan una conexión SSL delante de su servidor java
  2. implementar SSL handshake biblioteca w/openssl utilizar la biblioteca de código de Netty por JNI
+2

realmente lento en comparación con qué? Hay millones de sitios web funcionando, p. Tomcat con SSL que son contraejemplos de estas afirmaciones. He estado ejecutando uno por varios años. – EJP

+0

Aquí hay una fuente para el comentario "java is slow" en esta respuesta: http://netty.io/wiki/requirements-for-4.x.html#benefits-of-using-openssl – cdeszaq

0

Puede intentar volver a utilizar las sesiones de SSL para las conexiones existentes, esto reduce el apretón de manos ssl y debería darle un impulso general.

+0

Esto ya sucede de manera predeterminada. Tienes que salirte de tu camino para evitarlo. – EJP

Cuestiones relacionadas