¿Cómo se mide la escalabilidad del software?

21

Se me pidió que hiciera una pequeña presentación técnica sobre la escalabilidad de aplicaciones específicas. La aplicación está desarrollada utilizando Java, Spring MVC, Hibernate. Tengo acceso al código fuente de la aplicación.

¿Cómo puedo medir la escalabilidad del software (usando fuentes) y qué métricas debo tener en cuenta al medir la escalabilidad del software?

artjom
fuente

Respuestas:

8

Comenzaría leyendo el artículo de Wikipedia sobre el tema.

En resumen, la escalabilidad es cómo crece el rendimiento del sistema al agregar más recursos o, como alternativa, cómo crece la utilización de los recursos al aumentar la carga . Por ejemplo, ¿cuántos usuarios concurrentes puede manejar su sitio hasta que el tiempo de respuesta crezca más allá de 0.3 segundos? La misma pregunta después de duplicar la RAM / disco / CPU / etc. disponible. Probablemente pueda usar su conocimiento de los componentes internos de la aplicación para decidir qué parámetros vale la pena verificar.

Configure un banco de pruebas con una máquina servidor y una o más máquinas cliente. Use alguna herramienta para limitar la cantidad de recursos disponibles para el servidor (por ejemplo ulimit) o ejecute alguna aplicación que interfiera en el servidor. Mida cómo el servidor maneja las solicitudes de los clientes. Repita lo anterior aumentando / disminuyendo gradualmente la carga interferente / recursos disponibles. Al final obtienes espacio n-dimensional con puntos en él. Puede ser más simple cambiar solo un parámetro a la vez mientras se fijan todos los demás en algún valor típico (o un par de valores). En este caso, puede representar el resultado como un conjunto de gráficos 2D con rendimiento del servidor (por ejemplo, número de usuarios / solicitudes) en un eje y utilización / disponibilidad de recursos en el otro.

Hay escenarios más complejos en los que su aplicación usa varios servidores para varias partes de la aplicación y puede variar su cantidad y proporción, pero supongo que no es su caso. A lo sumo, es probable que desee variar la cantidad de subprocesos / procesos, si esto es importante.

Si mide toda la aplicación, generalmente no necesita acceso al código fuente. Sin embargo, puede ser interesante medir alguna parte específica del código (por ejemplo, solo DB o UI). Luego puede usar el código fuente para exponer solo este módulo para mediciones y ejecutar sus pruebas. Esto se llama microbenchmark .

Si está buscando ejemplos, hay muchos en artículos académicos. Busque en Google Académico la evaluación de desempeño + sus términos preferidos.

Ilia K.
fuente
1

La escalabilidad no es realmente una propiedad cuantificable para aplicaciones reales.

En términos prácticos, la escalabilidad se trata de poder soportar cargas de trabajo que están aumentando en varias dimensiones.

Para comenzar, la aplicación admitirá las crecientes cargas de trabajo con los recursos de hardware existentes. Pero hay varios puntos donde alcanzas los límites; por ejemplo, la cantidad de memoria, el número de núcleos, la contención en las estructuras de datos, el rendimiento de la base de datos, etc. Cada vez que alcanza uno de estos límites, debe adoptar un enfoque diferente para soportar cargas de trabajo crecientes. La escalabilidad se trata de cuánto tiempo puede seguir aumentando la carga de trabajo antes de alcanzar un límite insuperable, o si necesita realizar un rediseño importante.

Stephen C
fuente