Tuesday, July 14, 2009

Scalability – The simple explanation

Scalability is not a newly coined term; hence this article does not try to explain “scalability” in general rather it focuses on terms generally attached to it by technocrats.

To start with, let me give a simple definition of scalability:
“Scalability is the ability of the software system to graciously accommodate increasing demand without making any modifications to the system itself; also without compromising system’s performance, reliability and availability”

Scalability has two distinct flavors:
• Vertical Scalability – where you increase resources (cpu, memory, disk, etc) on the same box. For example, by expanding storage by adding RAID/SAN
• Horizontal Scalability – where you increase “units of resources (server box)”. For example, in clustering environment, adding hardware Load Balancers, Firewalls, Web Servers, App Servers.
The other term technocrats coined these days is Linear Scalability.

Linear Scalability
To understand Linear Scalability, you need to first understand “Scalability Factor”. For example, if scalability factor is “0.8” then you add “2 new CPU units”, you will be able to take advantage of “2 units x 0.8” of total processing capacity. In other words, you loose 20% of processing power on addition of each unit.

A True Linear Scalable system will have scalability factor of “1” (meaning scalability factor is always constant); hence you will be able to take 100% advantage or capacity of increased resources.
For example, SBA (Space Based Architecture) systems, like GigaSpaces, offers true Linear Scalability.

Levels of Scalability
Scalability also needs consideration at many levels:
• Firewalls (single firewall may cause delays)
• Web (or HTTP) Server
• Hardware-level Scalability (Load Balancers, IP Sprayers)
• Application Servers (special COTS like Teraacotta for special handling of scalability or GigaSpaces XP Server)
• Component Level Scalability (ex EJB)
• Database Level Scalability

The most important point while considering the level of scalablity required in your software system is to identify the number and growth rate of prospective users (concurrent or others) of your system in the future.

Disclaimer:
All data and information provided on this site is for informational purposes only. This site makes no representations as to accuracy, completeness, currentness, suitability, or validity of any information on this site and will not be liable for any errors, omissions, or delays in this information or any losses, injuries, or damages arising from its display or use. All information is provided on an as-is basis.This is a personal weblog. The opinions expressed here represent my own and not those of my employer or any other organization.