¿Cómo calculo los requisitos del servidor para una aplicación web?

9

Estoy desarrollando un back-end en el que expondré API para mi aplicación móvil. Los usuarios pueden registrarse, agregar productos, compartir los enlaces de productos a través de correo electrónico / sms / en cualquier lugar y otros pueden hacer clic en él y comprar el producto. Este es el flujo de trabajo simple de la aplicación móvil. La aplicación es una aplicación intensiva de imágenes que tendrá cargas y recuperación de imágenes que será realizada por un servicio en la nube de terceros. Entonces, la parte de la imagen no es manejada por mi backend.

Ahora soy del equipo de desarrollo y tengo poca experiencia en el lado del servidor de hardware. Cuando les di el requisito de la infraestructura, me dieron las siguientes preguntas.

  1. Aplicación / rendimiento de almacenamiento
  2. Rendimiento de la aplicación (número de conexiones concurrentes en 3 meses, 6 meses y 1 año)
  3. Capacidad de almacenamiento (crecimiento de datos en 3 meses, 6 meses y 1 año)
  4. Requisito de HA
  5. Requisito de DR

No estoy seguro de cómo pronostico los 3 puntos anteriores. ¿Cómo se calculan los puestos de venta? Según las estimaciones, tendré 10000 usuarios registrados en mi aplicación en el primer mes, de los cuales 5000 serán usuarios activos. En un inicio de sesión promedio en la aplicación, habrá 10 visitas a la API por usuario, lo que generará 5000 * 10 = 50,000 visitas al mes, que serían 1 visita a la API por minuto, es decir, ~ 2 conexiones concurrentes en el primer mes.

¿El cálculo es así? ¿Y cómo calculo el crecimiento de los datos? ¿Significa que un usuario se registra, crea un producto y si totalizo el tamaño de la base de datos consumido para eso, es eso lo que se llama crecimiento de datos?

Esta pregunta parecería patética, pero realmente necesito ayuda para descubrir cómo se calculan los rendimientos para los requisitos del servidor.

Ajeesh
fuente

Respuestas:

7

Los primeros tres puntos son la planificación de la capacidad. La organización está tratando de presupuestar y predecir para el futuro. Por desgracia, no existe una forma simple o aceptada de predecir el rendimiento y la escalabilidad. Cada aplicación y entorno es diferente. Por lo tanto, la mejor manera de responder esto es medir.

Específicamente:

  1. Discuta con su gerencia o propietarios de productos cuál será el crecimiento probable de los usuarios y los tipos de usuarios diferentes. Si no lo saben, adivine pero documente que se trata de conjeturas.
  2. Cree una ejecución automatizada de rutas comunes de su aplicación. Puede registrar la actividad o ingresar la suya en aplicaciones de prueba de carga como JMeter .
  3. Cree un entorno de prueba que coincida con su hardware actual o proyectado. Preste mucha atención a cosas como el ancho de banda, el almacenamiento, SSL, el registro u otros aspectos frecuentemente olvidados que podrían afectar el rendimiento. Si puede, puede burlarse del servicio de imágenes de terceros, utilizando imágenes más pequeñas o representativas.
  4. Use la aplicación de prueba de carga para crear los números de usuarios propuestos para los proyectados en diferentes momentos.
  5. Utilice una herramienta de gestión del rendimiento de la aplicación, como AppDynamics o DynaTrace , para medir el rendimiento e identificar cuellos de botella.

Además de los requisitos anteriores, esto puede ayudarlo a:

  1. Confirme que su entorno admite la carga solicitada.
  2. Encuentre la carga máxima que admite su entorno.
  3. Encuentre los cuellos de botella que limitan su rendimiento o escalabilidad.
  4. Experimente con diferentes configuraciones para ver cómo funcionan o escalan.
  5. Observe cómo funciona el sistema cuando desencadena fallas.

Los dos últimos puntos, requisito de HA (alta disponibilidad) y DR (recuperación ante desastres, presumiblemente RPO (objetivo de punto de recuperación) y RTO (objetivo de tiempo de recuperación) ), son más difíciles de predecir, ya que estos son realmente requisitos comerciales. Discuta con su gerencia o propietarios de productos las posibles fallas y cuánto costarán mitigar o reparar . Si ambos son nuevos en esto, esperen muchas suposiciones y noches tarde de su parte.

akton
fuente
2

Propondría una base más objetiva. Vaya a sus registros HTTP existentes. Suponiendo que se trata de una actualización de una aplicación que ya está en el campo, simplemente extraiga los registros y examine las solicitudes HTTP que se incluyen. Esto proporciona una base objetiva absoluta para su modelado de carga en lugar de un dedo mojado en el aire para probar el viento.

Además, tenga en cuenta desde una perspectiva de control de calidad. No puede ser dueño del requisito y la validación. Por lo tanto, puede usar los datos objetivos de los registros para ayudar a construir la información del modelo de carga, pero alguien en el negocio debe firmar la definición real. ¿Por qué? Debido a que está inyectando un requisito en la secuencia que hasta ahora no ha estado disponible para los desarrolladores, los arquitectos, los administradores de la plataforma, etc.

¿Qué puedes sacar de los troncos?

  • Mayor tasa de transacción por hora (recuento de solicitudes bloqueadas por hora)
  • Mayores usuarios por hora (cuenta la dirección IP bloqueada por hora)
  • Flujos de datos de usuario (consulte la etiqueta de referencia en las solicitudes para crear un árbol de solicitudes anteriores)
  • Tiempos de respuesta existentes (si tiene habilitado el campo w3c time-time para sus llamadas de servicios web). Esto se puede utilizar para establecer expectativas para futuras versiones sobre una base objetiva para alcanzar o superar el modelo actual
  • Piense en los tiempos de demoras entre solicitudes por IP. Puede modelar los puntos de muestra en el tiempo entre dos solicitudes cualquiera tomando la etiqueta de referencia y bloqueando por dirección IP para construir un conjunto de muestra. A continuación, puede obtener estadísticas de esas muestras para tiempos de pensamiento mínimos, máximos, promedio y percentil 90. Heck, algunos paquetes de estadísticas incluso le proporcionarán una función en la que puede insertar un número aleatorio para obtener una distribución apropiada para la producción
  • Si tiene registros para períodos de tiempo anteriores, puede proyectar modelos de crecimiento para proyecciones observadas versus deseadas (proyecciones de ventas o uso)

Prefiero Splunk para este tipo de trabajo. Para la mayoría de las organizaciones, debería poder ingresar registros por 30 días en el nivel gratuito sin tener que preocuparse por configurar una media docena de aplicaciones diferentes juntas como lo hace con la pila ELK.

Si no cumple con los requisitos, puede estar persiguiendo fantasmas de ingeniería que nunca ocurrirían en la producción y que en realidad no reducirían ningún riesgo. Asegúrese de que alguien en el lado comercial cumpla con sus requisitos o bien podría tener excedentes presupuestarios individuales para perseguir los defectos.

James Pulley
fuente
1

Realmente me gusta tu pregunta. Es una buena. No creo que haya una respuesta real a esto, pero lo intentaré. Al crear / diseñar un nuevo servidor, lo más importante es elegir el
entorno y los métodos correctos . No todos los entornos son escalables, la mayoría solo de forma limitada. Lo que el equipo de hardware está tratando de calcular es qué tipo de sistemas de archivos e interfaces pueden usar. Algunos sistemas de archivos son fáciles de configurar pero difíciles de expandir. Otros son difíciles de configurar pero fáciles de administrar y expandir.

En mi opinión, lo mejor es ponerse en contacto con los que le hacen estas preguntas y explicarles por qué no puede responderlas en este momento. Al iniciar una nueva aplicación o sistema, nadie puede decir cómo evoluciona todo esto, especialmente cuando no hay otro sistema con el que pueda compararse. Pero usted tiene el conocimiento sobre la API que diseñó y el "Hardware-Man" tiene el conocimiento de cómo funcionan sus entornos / servidores. Juntos pueden resolver estas preguntas con seguridad.

Espero que esto te ayude.

Valentin Bauer
fuente
1
¿Qué quiere decir exactamente con "entornos y métodos"? ¿Puedes dar un ejemplo de un entorno escalable? Y por "Métodos", ¿te refieres a método de respaldo, método de autenticación, etc., o algo más?
Jay Elston
@JayElston Por Medio Ambiente y Métodos me refiero a la elección correcta de Arquitectura de Servidor. Algunas aplicaciones más pequeñas usan un servidor para ejecutar la aplicación y almacenar datos. Algunas aplicaciones más grandes no pueden hacer eso porque necesitan más espacio para datos. Por métodos tienes que pensar en todas esas cosas. Hablar de escalabilidad del Servidor Virtual es algo bueno. Pero tenga en cuenta: agregar RAM o más espacio resuelve los problemas por un corto tiempo, pero no es una solución general. También tienes que escalar horizontal y verticalmente. Ver aquí: en.wikipedia.org/wiki/Scalability
Valentin Bauer