Capacity Planning: Crear un modelo matemático sencillo

Actualización – 10 Dic 2012


Puedes encontrar más información sobre Capacity Planning en el sitio del libro:

www.capacity-planning-it.com


Uno de los problemas a los que nos enfrentamos cuando estamos ejecutando un Capacity Planning es la representación de los modelos que hemos construido y como dicha representación nos ayudará a trasmitir la información necesaria para el propósito del Capacity Planning. Como comentamos en el post anterior, se puede optar por construir un modelo matemático o por lo menos que parte del modelo sea simulado matemáticamente.Crear un modelo matemático del comportamiento de un sistema no es una tarea sencilla y conlleva varios riesgos, de los que debemos ser conscientes, para que nuestro Capacity Planning tenga exito.

Hay 3 principio que sigo cuando ejecuto un Capacity Planning y son los 3 consejos que doy a aquellas personas que me preguntan sobre cómo construir un Capacity Planning:

  1. Un Capacity Planning es un proceso vivo durante la vida de un proyecto o una plataforma, por lo que debemos ser sumanete cuidadosos a la hora de construir un modelo, ya que éste debe ser lo suficiente versatil para adaptarse a las modificaciones en la plataforma o proyecto, a lo largo de su vida.
  2. El Capacity Planning es el medio no el fin.  no debemos complicanos la vida construyendo de un modelo demasiado complicado, ya que el Capacity Planning es una herramienta para conseguir un fin. Por lo tanto,  debemos construir la herramienta, lo mas sencilla posible.
  3. El modelo de representación de la realidad que costruyamos en un Capacity Planning debe emular la con la mayor realidad posible el comportamiento de la plataforma. Este modelo es nuestro banco de pruebas,  por lo que debemos tener cuiado al construir el modelo porque nos puede dar información sesgada.

Cómo construir un modelo matemático sencillo

Como buen ingeniero, intento utilizar las matemáticas de una forma moderada considero que son una herramienta muy útil, pero desde la perspectiva de un Capacity Planning, no podemos basar la toma de decisión sobre nuestra plataforma únicamente en un modelo matemático. Por lo general los ingenieros usamos las matemáticas para crear modelos de simulación y esta es una de las tareas de un Capacity Planning, aunque como veremos en el ejemplo por muy buena que sea tus matemáticas, nadie construye un puente solo con una navaja suiza.

Nuestro ejemplo es tremandamente sencillo, pero nos permitirá entender cual es el procedimiento para crear un modelo matemático. Dicho procedimiento podremos aplicarlo en nuestro Capacity Planning extrapolando las tareas al número de elementos y variables de nuestro sistema.

El procedimiento es tan sencillo como:

  1. Elegir las variables que deseamos modelizar
  2. Estudiar la relación entre las variables y con el sistema.
  3. Calcular las funciones necesarias para el modelado.
  4. Realizar los cálculos con nuestro modelo.

Elegir las variables que deseamos modelizar

Para el ejemplo vamos a construir un sencillo modelo que nos permita conocer el comportamiento de 2 variables:

  • El porcentaje de uso de CPU.
  • El número de peticiones que puede recibir nuestro sistema.

Con nuestro modelo, podremos saber cuantas se necesita para que el sistema pueda atender un número de peticiones determinadas y de esta forma poder tomar una decisión sobre la forma de crecimiento y las limitaciones del sistema.

Tenemos el siguiente conjunto de muestras que hemos recogido durante 24 horas.

 

%CPU

Peticiones A

Peticiones B

0:00:00

38

14

14

1:00:00

34

12

12

2:00:00

14

5

5

3:00:00

12

4

4

4:00:00

11

4

4

5:00:00

11

4

4

6:00:00

11

4

4

7:00:00

11

4

4

8:00:00

12

4

4

9:00:00

13

5

5

10:00:00

19

7

7

11:00:00

39

14

12

12:00:00

46

16

13

13:00:00

47

17

14

14:00:00

70

25

14

15:00:00

71

25

15

16:00:00

72

26

15

17:00:00

65

23

13

18:00:00

52

19

5

19:00:00

29

10

2

20:00:00

26

9

5

21:00:00

30

11

11

22:00:00

36

13

13

23:00:00

35

13

13

para nuestro ejemplo vamos a ver 2 tipos de peticiones distintas.

  • Peticiones A, son peticiones las cuales consumen un cantidad fija de CPU, todas las petciones consumen la misma cantidad de CPU. Este tipo de peticiones son por ejemplo el número de bytes transferidos, el tiempo  de CPU que se emplea para transferir un byte es el mismo que para otro byte, siempre desde el punto de vista de sisteman simples.
  • Peticiones B, son peticiones que no consumen la misma cantidad fija de CPU. Este tipo de peticiones son por ejemplo ls petciones que recibe un servidor deAplicaciones o de Base de Datos, donde el uso de CPU de cada petición dependerá de la naturaleza de la misma.

Estos son los dos tipos de peticiones que podemos observar en cualquier sistema, peticiones fijas y peticiones variables.

cp_ii_grafico1.gif

Hemos representado ambos tipos de peticiones en el mismo gráfico para que podamos ver como. aunque se conserva el uso de CPU, el número de peticiones varía de una muestra a otra. En el gráfico podemos ver cómo las peticiones de tipo A y B emplean la misma cantidad de CPU, aunque desde las 10:00 hasta las 21:00 el número de peticiones de tipo B es inferior al de tipo A, es deci, durante este periodo de tiempo se producen peticiones que consumen mas CPU.

Estudiar la relación entre las variables y con el sistema.

En este paso debemos analizar la relación que existe entre las dos variables que estamos estudiando, el %CPU y el número de peticiones. Una forma sencilla es representar ambos conjuntos de datos en una gráfica donde tendremos en el eje de la X los valores de %CPU y en el eje de la Y los valores con los número s de peticiones.

cp_ii_grafico2.gif

Podemos ver como los peticiones de tipo A y tipo B se distribuyen de forma distinta en el gráfico. Podemos utilizar alguna función de regresión para obtener una función que represente a la distribución de tipo A y B. Con cualquier programa de tipo hoja de cálculo podemos obtener una función de regresión. Para nuestro ejemplo hemos utilizado Excel y hemos obtenido:

  • Para las peticiones de tipo A tenemos la función  Fa(x)=0,357x
  • Para las peticiones de tipo B tenemos la función Fb(x)=5,6068Ln(x)-9,7538

Con esta información sabemos que la relación que existe entre el uso de CPU y el número de peticiones de tipo A es linea, es decir si una petición de tipo A consume un porcentaje de CPU, dos peticiones de tipo A consumen el doble de porcentaje de CPU.

La relación entre el uso de CPU y el número de peticiones de tipo B es NO linea y por lo tanto es mas difícil de estudiar.

Calcular las funciones necesarias para el modelado.

Una vez que conocemos la naturaleza de la relación entre las dos variables que estamos estudiando podems comenzar con el análsis para la obtención de las funciones que nos permiten definir el comportamiento de nuestro modelo.

Modelo lineal

Hemos visto que la relación entre uso de CPU y el número de peticiones de tipo A es lineal y hemos obtenido la función que describe dicha relación:

Fa(x)=0,357x

Es decir que cada petición consume el 2,8% del uso total de CPU.

Pero normalmente, los sistemas tienen una distribución a lo largo del tiempo que define el comportamiento del mismo. No es igual la carga que podemos añadir a un sistema a las 03:00 de la mañana que a las 17:00 de la tarde. Debemos recordad que uno de los objetivos del  Capacity Planning se dar respuesta a preguntas como ¿podrá mi sistema aguntar 50 usuarios mas? pero estos usuario tendrán una distribución en el tiempo. Por lo tanto debemos modelar el funcionamiento de nuestro sistema durante un periodo de tiempo.

En el siguiente gráfico hemos representado la distribución del %CPU y las peticiones de tipo A.

cp_ii_grafico3.gif

Hemos incluido la función polinómica de grado 6 que podremos emplear para describir el comportamiento de la varible %CPU y número de peticiones.

Fcpu(x) = -1E-05×6 + 0,0016×5 – 0,0639×4 + 1,0062×3 – 5,8686×2 + 7,3204x + 25,136

Fpet(x) = -4E-06×6 + 0,0006×5 – 0,0228×4 + 0,3593×3 – 2,0959×2 + 2,6144x + 8,9772

Podemos ver que la relación que existe entre ambas funciones tiene un factor de 0,357.

Modelo NO lineal

En este cas, el conjunto de peticiones de tipo B no son iguales y además se distribuyen en el tiempo de una forma determinada, tenemos que encontrar la función que define la relación entre %CPU y número de peticiones.

En la siguiente table tenemos una columna para el %CPU, el número de peticiones de tipo B y el factor Fcpb.

Fcpb = %CPU / Peticiones B

%cpu Peticiones_2 Fcp B

0

38

14

2,80

1

34

12

2,80

2

14

5

2,80

3

12

4

2,80

4

11

4

2,80

5

11

4

2,80

6

11

4

2,80

7

11

4

2,80

8

12

4

2,80

9

13

5

2,80

10

19

7

2,80

11

39

12

3,25

12

46

13

3,54

13

47

14

3,36

14

70

14

5,00

15

71

15

4,73

16

72

15

4,80

17

65

13

5,00

18

52

5

10,40

19

29

2

14,50

20

26

5

5,20

21

30

11

2,80

22

36

13

2,80

23

35

13

2,80

En el siguiente gráfico representamos la columan FcpB para obtener la función polinómica de grado 6 que define su comportamiento.
cp_ii_grafico4.gif
Ya tenemos la función que relaciona ambas variables.

FcpB(x)=0,0000165639*x6- 0,0011982358*x5 + 0,03245624*x4 – 0,4095446*x3 + 2,4555428*x2 – 6,2596358*x + 7,574714
Ahora podemos calcular cuanta CPU utilizarán un número determinado de peticiones en un momento determinado. Pero tal como comentamos al principio, aunque hemos utilizado una función polinómica de grado 6, en este dicha función está cometiendo 2 errores importantes:

  • Primero, está sesgando el pico que se produce a las 19:00, por lo que podemos cometer un error al calcular el uso de CPU de un determinado número de peticiones en ese momento, las 19:00
  • Segundo ha aumentado en el factor de relación entre ambas variables en las horas 15:00, 16:00 y 17:00 por lo tanto si utilizamos esta función en esas horas, el uso de CPU o el número de peticiones que podemos calcular será erróneo.

Realizar los cálculos con nuestro modelo.

Una vez que tenemos el modelo construido y somos conscientes de los defectos que presenta el modelo, podemos hacer nuestros calculos dobre la capacidad, los siguientes gráficos muestran una simulación de un incremento de 0% de peticiones, de un 30% y de un 60%

cp_ii_grafico5_0.gif

cp_ii_grafico5_30.gif

cp_ii_grafico5_60.gif

Conclusión

En este post hemos visto como se puede crear un sencillo modelo mátemático, mediante la utilización de las funciones de regresión, en nuestro caso funciones polinómicas de grado 6 y como la utilización de este tipo de modelos tienen sus ventajas, como son poder crear un modelo totalmente teórico del comportamiento de la plataforma bajo unas circustancias determinadas, pero también presenta inconvenientes como pueden ser el sesgo de los datos o la modificación de ciertos factores que no coinciden con la realidad de nuestra plataforma.

Los modelos matemáticos no son malos, sencillamente son otra de las herramientas que podemos utilizar para la ejecución de un Capacity Planning y al igual que ocurren en otras ramas de la ingeniería, por ejemplo la obra civil, un puente no se hace solo con matemáticas.


@CapacityPlanIT