Necesitas dar más información.
Si solo son 10000 zócalos inactivos, entonces no se necesitan recursos. Si se trata de renderizar páginas con E / S pesadas, es más.
Proporcione su caso de uso en un comentario aquí e intentaré responder más específicamente.
Si le gusta mi respuesta, vote por favor y sígame para obtener más respuestas a preguntas para las que no sabía que necesitaba una respuesta.
Actualización después de la elaboración en los comentarios:
Su aplicación tiene mucha lectura y los datos escritos se están grabando y no se distribuyen. Esto significa que podemos almacenar mucho en caché.
He dividido la arquitectura en 4 capas distintas. Estas capas se pueden escalar independientemente unas de otras, horizontal y verticalmente.
Capa de entrada :
La primera capa que encuentra el usuario es la capa de entrada. En este caso, un equilibrador de carga que distribuirá las solicitudes recibidas entre los servidores API. Si está utilizando un proveedor de la nube que ofrece un equilibrador de carga administrado, puede dejarlo así. Si está haciendo su propio equilibrador de carga, necesita una conmutación por error. Si ejecuta un repuesto dinámico (copia) del equilibrador de carga principal o tiene una imagen que puede cargar de forma rápida y preferiblemente automática, si falla su equilibrador de carga principal.
Capa de proceso :
Aquí está la lógica. La aplicación debe estar sin estado, por lo que puede agregar y eliminar y procesar a voluntad. Me imagino que una plataforma educativa no necesita funcionar 24/7. Por lo tanto, puede agregar procesos automáticamente durante el día y reducir la escala durante la noche, donde presumiblemente tiene menos usuarios. También durante los exámenes el uso sería mayor.
Tenga en cuenta que digo procesos y no servidores. Cada servidor puede contener tantos procesos node.js como núcleos de CPU. Reorganizar las solicitudes de E / S de un lado a otro no requiere mucha CPU o RAM, pero requiere muchos ciclos de CPU. Entonces tiene sentido extenderlo. Aún así, debe tenerlo extendido en al menos 2 servidores, para protegerse contra fallas de hardware. En esta configuración, considero que 3 servidores con 4 núcleos cada uno deben tener un equilibrio adecuado entre rendimiento y estabilidad. Puedo recomendar PM2 · para administrar los procesos node.js en los servidores individuales.
Capa de caché :
Su aplicación es tan leída con datos que no cambian con frecuencia (al menos los datos que está leyendo la mayoría de los usuarios), que tiene sentido intentar acelerar la entrega de datos. En este ejemplo, he puesto un servidor Redis en la mezcla. Redis es un caché en memoria, lo que significa que es realmente muy rápido.
Por lo tanto, su capa de procesamiento primero debe verificar si el bit de datos ya está en el caché y, si lo está, devolverlo desde allí. De lo contrario, recójalo de MongoDB y póngalo en el caché. Los datos pueden caducar automáticamente, por lo que nunca es anterior a, por ejemplo, 30 segundos, pero eso ahorrará una gran cantidad de solicitudes a MongoDB.
Capa de datos :
Esta es la única capa persistente. Los datos se almacenan en MongoDB y se replican en un clúster. No necesita ser muy grande. El tráfico de escritura es minúsculo y la capa de caché mitiga en gran medida el tráfico de lectura. Pero, de nuevo, debe usar un mínimo de 2 servidores con 2 réplicas, para garantizar una mayor disponibilidad.
Conclusión
Es difícil decir exactamente cuántos recursos necesita. Una vez que se active, debe sobreescalarlo y luego retroceder lentamente hasta encontrar la cantidad correcta de servidores. Para la configuración inicial, recomendaría 1 equilibrador de carga (con respaldo), 3 servidores de procesamiento con 8–12 procesos de servidor, 1 servidor de caché (es rápido reemplazar y llenar de nuevo) y luego 2–3 servidores MongoDB en la capa de datos .
Una nota sobre el desarrollo de Node.js: esta arquitectura supone que la cantidad de lógica en la capa de procesamiento es limitada. Si necesita un procesamiento pesado, como importar grandes conjuntos de datos, debería considerar descargar esta tarea en un servidor separado, que puede procesar los datos e insertarlos en la capa de datos, sin tomar recursos en la API pública.
Espero que esta explicación “breve” le haya dado algunos consejos sobre cómo diseñar su aplicación.
Si desea probar la configuración, puede intentar configurarla en un proveedor de la nube, por ejemplo DigitalOcean: Computación en la nube diseñada para desarrolladores. Registrarse usando ese enlace te da $ 10 de crédito gratis para jugar.