Implementamos nuestra aplicación de rieles en EC2. En nuestra configuración, tenemos dos proxies en instancias pequeñas detrás del DNS round-robin. Estos ejecutan equilibradores de carga nginx para una granja de servidores web en crecimiento y contracción dinámica. Cada servidor web también ejecuta nginx con un grupo de mongrels. El nginx aquí se encarga del contenido estático y del equilibrio de carga de los mestizos.Lentitud de SSL en EC2
De todos modos, nuestro tráfico en general es HTTPS. Tenemos los 2 proxies que se ocupan de SSL. Me di cuenta de que el rendimiento de nuestra red en esas instancias se limita a solo 60 Mbps aproximadamente. Para contrastar, en las pruebas puedo obtener 700+ Mbps en una instancia pequeña a través de HTTP regular. De hecho, esto es lo mismo que puedo obtener en una gran instancia. Similar a lo que obtuvieron los chicos de Right Scale en their testing. (Amazon dice que una pequeña obtiene E/S de red "moderada", mientras que una grande se "eleva". Si tuviera que especular, creo que esta es solo su forma de decir que hay más instancias pequeñas por caja física que comparten una tarjeta de red . No estoy seguro si esto significa que un gran tamaño tiene una interfaz de red dedicada, pero lo dudaría).
En las pruebas, pude obtener una instancia grande para obtener aproximadamente 250 Mbps SSL. Esto me dice que la CPU o algún otro recurso es el cuello de botella. Sin embargo, nuestros gráficos de supervisión no muestran que la CPU en nuestros servidores proxy esté particularmente ocupada.
Mis preguntas son:
- ¿Es mi instinto sobre SSL siendo más lento debido a la CPU correcta y nuestros gráficos de monitoreo que están mal? ¿O podría algún otro recurso ser el factor limitante?
- ¿Deberíamos tomar el costo adicional y poner los servidores proxy en instancias de CPU de alta? ¿O sería mejor simplemente agregar más instancias pequeñas?
- ¿Deberíamos descargar la terminación SSL a los servidores web? Sin embargo, esto introduce un problema más: ¿cómo obtenemos la dirección IP del cliente en nuestra aplicación? En este momento nuestro proxy lo establece en el encabezado X-FORWARDED-FOR, pero obviamente esto no sería posible si no se está descifrando SSL.
Me encantaría saber acerca de cualquier configuración similar. Juzgamos un poco con su Elastic Load Balancer, pero creo que básicamente nos pone en la misma situación que el n. ° 3 anterior. ¿Alguien más ha hecho el cambio a ELB y ha encontrado que vale la pena?