Hola,
Todos los enfoques muy interesantes sobre los comentarios anteriores, y una buena base sobre la cual construir.
Conocer cómo se comporta es el objetivo aquí. Los patrones de tráfico, el tamaño del conjunto de datos manejado por las solicitudes, el tiempo necesario para interactuar con servicios externos, el uso de recursos, todo ayudará a tener que escalar una aplicación.
- ¿Diferencia entre un sitio web y una página web?
- Después de HTML y CSS, ¿debería aprender Javascript o Python primero?
- Cómo obtener proyectos de sitios web
- ¿Cómo es mi sitio web www.gstmadeeasy.com?
- Cómo hacer que una página web avance a la siguiente página web usando PHP
En cuanto a la ejecución en AWS (o cualquier nube que proporcione máquinas virtuales), querrá tener un equilibrador de carga HTTP / HTTPS al frente para distribuir el tráfico a una granja de instancias que ejecutan un servidor HTTP / HTTPS (idealmente Nginx) y el servidor de aplicaciones del Rail . Al ejecutarse de esta manera, tendrá la flexibilidad del servidor HTTP / HTTPS para atender las solicitudes que no sean de Rails (como la búsqueda de activos), lo que proporcionará terreno para agregar una CDN en el futuro, dejando a la aplicación Rails el trabajo que hace mejor.
Si la aplicación se basa en una base de datos de cualquier tipo, a medida que aumenta el uso de db, puede considerar dividir las solicitudes de escritura y lectura, con la primera yendo a una instancia de base de datos maestra y la segunda a réplicas de solo lectura.
Muchas aplicaciones de Rails ‘subcontratan’ trabajos en segundo plano para poner en cola el procesador como Delayed Job, Resque o Sidekiq. Dependiendo de su crítica, uso de recursos, tiempo de ejecución, etc., puede considerar ejecutarlos también en instancias dedicadas.
Una cosa a tener en cuenta también, que puede parecer obvio al principio pero que tendemos a olvidar cuando hablamos de escalabilidad, son los costos operativos. A veces, usar un conjunto de instancias más grande y distribuir el trabajo entre ellas tiene más sentido económico / financiero que administrar un grupo más grande de otras más pequeñas. Además, las instancias basadas en el crédito como la familia t2 de AWS pueden mantener bajos los costos para cargas como trabajos en segundo plano que se ejecutan solo durante un período fijo de tiempo.
Saludos,
Daniel Valfre