Scalability is the ability of a system to grow in its capacity to meet the rising demand for its services offered. System scalability criteria could include the ability to accommodate increasing number of
· transactions per millisecond,
· Number of SQL statements that can run and provide results simultaneously.
I know many small and large applications having the scalability issues, mainly due to the lack of good requirements specifications, besides not having a sound architecture necessary for the scalability.
How important are the scalability requirements? Today, where the database sizes are growing left and right, the system performance expectations are growing equally rapidly. Keep in mind, no matter how efficient the hardware and the processers are, sound system architecture which can make optimal use of it is equally important. What I mean, for example is that the database architecture needs to be scalable to serve the anticipated increase in number of similar type of SQL queries submitted by online users, with no noticeable performance decrease and without any errors or holds or locks. On the other hand, it should accommodate the growing number of batch transactions without overstraining the batch processing time.
In a recently deployed software application that I know, a concept of event based triggers was implemented. Each event of change to the case data was recorded as a trigger, to be later consumed by batch processes. After the initial deployment of less than fifty thousand caseload, the application started generating swelling number of triggers day and night. It became a bottleneck and severely affected the performance. Finishing the batch processing cycle in time became a challenge! Within few months of operation, a breakdown occurred in the middle of batch processing. The system couldn’t manage the triggers explosion. Ironically, this system was touted as capable of holding a million of case load in its full capacity.
Incorrectly defined scalability requirements could adversely impact the software usage.
Scalability requirements could be broadly categorized based on the things such as user audiance, database usage, critical performance needs etc. For a highly user centric web application for example, the scalability requirement needs to be in terms of the concurrent number of users the system can support today, as well as in future, without letting the performance degrade. While these are categorized as the user scalability, the database scalability is the ability to respond to the increasing number of queries within the desired time concurrently vis-à-vis the ever growing database’s performance against the multi-transaction batch processing. The system scalability discusses requirements belonging to the server capabilities scalable to support the anticipated future number of open connections, the response time per user request etc.
The advantage of identifying scalability requirements early in the software life cycle is that it allows the architectural framework to become sound enough as the development proceeds. There are measures available to address the scalability, such as:
· efficient hardware resources to counter the user needs,
· database schema definitions, partitioning,
· complexity of the database queries and optimization techniques, etc.
However, it’s a difficult task to establish the benchmarks, and to simulate the test conditions to match them.
Scalability is an act of balance amongst the requirements, the software architecture, performance configurations and the choice of environments.