How is software scalability measured

metricsscalability

I was asked to make some small technical presentation about specific application scalability. The application is developed using Java, Spring MVC, Hibernate. I have access to the application source code.

How can I measure software scalability (using sources) and what metrics do I need to look after when measuring software scalability?

Best Answer

I would start with reading Wikipedia article on the subject.

In short, scalability is how system performance grows with adding more resources or, alternatively, how the resource utilization grows with increasing load. For example, how many concurrent users can your site handle until response time grows beyond 0.3 sec? The same question after you double the available RAM/disk/CPU/etc. You probably can use your knowledge of the application internals to decide which parameters are worth checking.

Setup a test bench with a server machine and one or more client machines. Use some tool to limit the amount of resources available to the server (e.g. ulimit) or run some interfering application on the server. Measure how the server deals with client requests. Repeat the above gradually increasing/decreasing interfering load/available resources. At the end you get n-dimensional space with dots in it. It may be simpler to change only one parameter at a time while fixing all the others at some typical value (or a couple of values). In this case you can represent the result as a bunch of 2D graphs with server performance (e.g. number of users/requests) on one axis and resource utilization/availability on the other.

There are more complex scenarios where your application uses several servers for several part of the application and you can vary their amount and ratio, but I guess it's not your case. At most, you probably may want to vary the number of threads/processes, if this matters.

If you measure the whole application you usually don't need source code access. However, you may be interesting in measuring some specific part of the code (e.g. only DB or UI). Then you can use the source code to expose only this module for measurements and run your tests. This is called a microbenchmark.

If you're looking for examples, there is a plenty of them in academic articles. Search the google scholar for performance evaluation + your preferred terms.

Related Topic