Por lo general, al estimar las necesidades de servicios de escalado, intentamos trabajar las matemáticas en términos de recursos / usuario.
Esto significa que, por usuario, tratará de calcular qué aspecto tienen los usuarios promedio, el mejor y el peor de los casos (y las sesiones de usuario, más sobre esto a continuación) en términos de utilización del ancho de banda (cuánta red tráfico que espera que envíen / reciban a sus servicios), requisitos de almacenamiento y planificación (cuántos datos se necesitan para representar a un usuario, y cómo los respaldará, restaurará, etc.), y luego los requisitos de CPU / memoria por sesión activa.
Profundizando un poco:
- ¿Cuáles son los principales servicios de AWS que ha utilizado?
- ¿Cuáles son los mejores proveedores de servicios en la nube para el alojamiento QuickBooks Pro?
- En el mercado de la nube de IaaS, ¿quién es el mejor, Microsoft Azure o Amazons AWS?
- Soy un principiante en el desarrollo de la nube web azul, estoy confundido sobre el 'precio de pago por uso' de azure.
- ¿Existe un proveedor de almacenamiento en la nube que brinde a los usuarios ilimitados un almacenamiento limitado por una tarifa mínima?
- Ancho de banda: ¿está sirviendo datos directamente desde S3? ¿Usa CloudFront (probablemente deberías, o algunos CDN les gusta)? ¿Está entregando grandes activos como archivos de video o paquetes ejecutables, o imágenes de alta resolución? ¿Puede almacenar en caché cualquiera de estas cosas en el lado del cliente (es decir, en un almacenamiento local almacenado en caché del navegador o mediante una tecnología como Progressive Web-Apps? Tal vez su aplicación es una aplicación móvil?) ¿Qué significa una primera sesión parece (gran descarga para preparar?)? ¿Cómo se ve una sesión promedio? ¿Cómo se ve una sesión del percentil 95 (usuario avanzado)? ¿Datos dinámicos o estáticos, en su mayor parte?
- Almacenamiento: ¿cuántos datos necesita para describir completamente el estado del usuario? ¿Su servicio entrega mensajes entre usuarios (dado que es un servicio de chat, supongo que “sí”), ¿cuánto tiempo pueden durar esos mensajes y durante cuánto tiempo se le puede solicitar que persista? ¿Tiene su usuario algo como una “billetera” o un “carrito de compras”? ¿Qué tan grande es la suma total de esos datos? De nuevo, ¿para un usuario promedio frente a un usuario avanzado? ¿Pueden los usuarios crear y cargar su propio contenido? ¿Dónde y cómo se almacena eso? ¿Cuánto almacenamiento volátil (temporal / caché) necesitará para proporcionar datos nuevos / actuales para sesiones de usuario activas?
- CPU / memoria: ¿qué tipo de trabajo computacional realiza su servicio por usuario? Nuevamente, ¿qué significa una sesión promedio (tenga en cuenta que me estoy refiriendo a las sesiones aquí claramente de los usuarios: en su planificación de capacidad, generalmente solo necesitará planificar un número máximo de usuarios simultáneos y, a menudo, buscará aumentar / disminuir la escala) durante las horas pico / fuera de pico), ¿parece? ¿Cómo se ve un usuario del percentil 95? ¿Cuánta memoria “en vivo” necesita ser capaz de proporcionar para ejecutar un cálculo en el peor de los casos? ¿Qué tipo de requisitos de latencia tienes? Un juego o un servicio similar “en tiempo real” puede terminar con requisitos mucho más estrictos aquí. ¿Existe algún trabajo que pueda descargar a sus clientes? ¿Cuánto confía en sus clientes (sugiero comenzar con “no mucho” como respuesta, una vez más, dependiendo de la carga de trabajo)?
Realmente hay mucho que hacer en la planificación de la capacidad de esta manera, pero debería poder, a través de algunas pruebas de carga y esfuerzo computacional, ser capaz de al menos hacer una declaración como: “Nos costará alrededor de $ XYZ por mil usuarios por mes para ejecutar nuestro servicio “o algo así. Si realmente ha construido desde cero para un servicio escalable en primer lugar, muchas de estas preguntas ya deberían haber sido respondidas en el momento en que esté pensando en lanzar su producto. Luego aprenderá MUCHO más acerca de su servicio durante su (s) ciclo (s) de lanzamiento suave.