Hola gente de desbordamiento de pila,
Recientemente implementé mi aplicación de nodo en AWS utilizando la solución MEAN proporcionada por bitnami para configurar el entorno y esta es mi primera aplicación implementada aquí.
Una de las funcionalidades de las aplicaciones es consultar mongodb (~20k registros) y luego realizar un análisis en cada registro que recorre la matriz que contiene este registro (aproximadamente 30 objetos en la matriz).
Espero que te hagas una idea de la intensidad relativa en recursos para esta operación y ahora viene el problema que no me deja dormir por la noche:
Todo este proceso toma alrededor de 27 segundos en mi propia máquina (i5 3.4ghz cpu, 16gb ram, Samsung 840 evo SSD, linux mint OS) pero cuando lo ejecuto en una instancia de AWS (actualmente estoy usando t2.small, pero intenté ejecutar esta misma operación usando una de las instancias más grandes disponibles con una cantidad ridícula de recursos que arrojaron el mismo resultado), el proceso toma alrededor de 90 segundos. Solo la consulta para filtrar y recuperar los 20k objetos toma alrededor de 30 segundos en AWS, mientras que en mi máquina tarda menos de 9 segundos. Al mirar los recursos mientras se ejecuta, puedo ver que la CPU no está al 100%, por lo que la CPU no es un cuello de botella (los créditos de mi CPU están constantemente cerca del máximo). Agregar más ram al cambiar a una instancia enorme tampoco ayudó...
No es que mi máquina sea muy poderosa ni nada por el estilo, pero la diferencia de rendimiento es increíble y esto hace que esa funcionalidad en particular no se pueda usar en AWS.
También intenté cambiar mi volumen de AWS a IOPS pero sin suerte.
Por favor, los expertos de este foro: ayúdenme con este gran dolor de cabeza de un problema...
Elija la instancia correcta con el tamaño correcto. Tengo experiencia t2.small, toma mucho tiempo bajo una carga pesada.
No explicó en su pregunta, por lo que, en base a su propia experiencia con AWS, le recomendaré que
Verifique el espacio libre de RAM en su instancia
uso de CPU
Espacio en disco duro
Para evitar estos problemas, consulte la recomendación del portal MongoDB
Antes de alojar en AWS, debe comprender la arquitectura de AWS Algo que afecta el rendimiento
El tamaño lo es todo: elija el tipo de instancia adecuado
Según nuestra experiencia ayudando a implementar y respaldar las implementaciones de MongoDB en AWS, hemos descubierto que los tipos de instancias M4, I2 y R3 de Amazon ECW tienden a ser los más exitosos y ampliamente utilizados en las implementaciones de los clientes.
EBS es el tipo general de almacenamiento que recomendamos para EC2 para MongoDB y profundizaremos en la mejor manera de configurarlo. Al elegir sus discos, debemos pedirle a AWS que garantice nuestras operaciones de entrada/salida por segundo (IOPS) solicitando IOPS provisionadas (PIOPS).
Redes
Debido a que MongoDB puede beneficiarse de un alto rendimiento de paquetes por segundo y una red de menor latencia entre instancias, la característica de redes mejoradas de Amazon puede proporcionar un rendimiento y una consistencia significativamente mejorados. Si su tipo de instancia es compatible con la función Redes mejoradas, le recomendamos que la habilite.
Para obtener más detalles Maximizar el rendimiento de MongoDB en AWS
No sé si ha revisado su código NodeJS por problemas de configuración. Por ejemplo, ¿hay alguna conexión de fondo a otra base de datos que falla y retrasa la respuesta? ¿Hay algún otro servicio al que la aplicación esté tratando de conectarse, por ejemplo, un servicio de correo externo, etc. Cualquier cosa que requiera conectividad a cualquier otra cosa en AWS requiere una configuración correcta de VPC/enrutamiento, no digo que este sea el problema, solo cubriendo todas las bases.