Scalability is the property of a system to handle a growing amount of work by adding resources to the system. In computing, scalability is a characteristic of computers, networks, algorithms, networking protocols, programs and applications. An example is a search engine, which must support increasing numbers of users, and the number of topics it indexes. Webscale is a computer architectural approach that brings the capabilities of large-scale cloud computing companies into enterprise data centers.
Types of Scalability
Horizontal (scale out) and vertical scaling (scale up)
Resources fall into two broad categories: horizontal and vertical.
Horizontal or scale out
Scaling horizontally (out/in) means adding more nodes to (or removing nodes from) a system, such as adding a new computer to a distributed software application. An example might involve scaling out from one web server to three. High-performance computing applications, such as seismic analysis and biotechnology, scale workloads horizontally to support tasks that once would have required expensive supercomputers. Other workloads, such as large social networks, exceed the capacity of the largest supercomputer and can only be handled by scalable systems. Exploiting this scalability requires software for efficient resource management and maintenance.
Vertical or scale up
Scaling vertically (up/down) means adding resources to (or removing resources from) a single node, typically involving the addition of CPUs, memory or storage to a single computer. Larger numbers of elements increases management complexity, more sophisticated programming to allocate tasks among resources and handle issues such as throughput and latency across nodes, while some applications do not scale horizontally.
scale up vs scale out
The advantage of scale-up system is that no data copying is needed. In general, many applications can run faster on scale-up systems because all data are located directly in-memory and available to all processors. In addition, applications can use extra memory without the need to distribute data across multiple systems. Perhaps the biggest advantage of scale-up systems is that the decision to add extra resources (memory or processors) to an application is always optional not required. In addition, there is no need to expand to multiple machines for extra memory or processors. Finally, scale-up systems are easily upgradable with little or no impact on users.
As compared to scale-out systems, scale-up systems have limits on scalability. (i.e. the number of processors and total memory size is much lower than can be achieved with scale-out systems). It should be noted that these limits are normally quite large and do not represent an issue for many applications. Scale-up systems do present a single point of failure, however they are usually well engineered and designed with redundant features to reduce the impact of any hardware issues. Finally, because memory is shared, there can be cases where locked portions of memory may cause processors to stall while waiting for access.