Digamos que quiero iniciar un nuevo servicio de chat. Mi inicio usaría solo los servicios de AWS. ¿Cómo podría estimar la cantidad / tamaño de los recursos de AWS (EC2, S3, DynamoDB, Lambda, etc.) que pueda necesitar? No tengo ninguna estimación sobre el número de suscriptores que podría obtener.

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:

  • 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.

Depende en gran medida de los recursos que utilice su sistema de chat que escriba. Por ejemplo, C altamente optimizado probablemente podría servir a muchos más usuarios concurrentes que algo escrito mal en algo como Ruby.

La mayoría de las personas comienzan con poco y aumentan sus servicios de AWS a medida que crecen y lo que necesitan. Esa es una de las grandes ventajas de AWS. Puede comenzar poco a poco y pagar costos mensuales bajos o nulos, y cuando crezca, puede obtener más recursos de ellos, pero con suerte ha monetizado su plataforma a medida que crece y el costo de más infraestructura de AWS es solo un porcentaje de sus ingresos

Sin embargo, una advertencia: con Slack, HipChat y Discord, no estoy muy seguro de qué tan preparado esté el ecosistema de chat para otro competidor.

He visto esto tan a menudo con equipos / startups, que se ven atrapados en perfeccionar el proceso de estimación (precisión) tanto que pierden el foco en sacar un prototipo. Por ejemplo, a menos que tenga un prototipo funcional en AWS, es posible que ni siquiera sepa qué servicios aprovechará en última instancia y qué servicios necesitará estimar. Por lo tanto, haga que su prototipo en AWS funcione primero, ábralo a un público limitado y continúe desde allí.

En cuanto al tamaño, una de las mayores victorias para AWS ha sido su escala de habilidades. No necesita tener una estimación del tamaño. La mayoría de los servicios se escalan automáticamente o se pueden escalar con relativa facilidad.

Depende en gran medida de las tecnologías que elija. Digamos que está utilizando solo API Gateway, Lambda y DynamoDB. Para determinar la cantidad de recursos, simplemente cree un MVP de aplicación de chat simple pero funcional y mida la cantidad de solicitudes a su punto final API, su tamaño, el tamaño de almacenamiento de DynamoDB, si está guardando mensajes, etc. para un usuario en particular. Por lo tanto, al final tendrá un modelo simple, que le muestra una serie de recursos, que necesita uno de sus clientes potenciales.

Use la misma lógica para calcular los recursos necesarios en otras pilas de tecnología.

Respondí una pregunta similar en la respuesta del usuario de Quora a ¿Cuánto costaría para el alojamiento en la nube para una aplicación de medios sociales como Snapchat con 5 millones de usuarios? Es un cálculo de muestra.

El truco consiste en dividir los costos para que tenga una idea para cada usuario o cada 1000 usuarios, como dijeron los otros coroanos.

Sin embargo, es posible que desee reconsiderar el uso de AWS. Es mucho más costoso que configurarlo usted mismo. A menos que su propósito sea aprender sobre la administración y los productos de AWS.