For novice system administrators probably it will be probably unclear what is the difference between Horizontal and Vertical Scaling. In the following article we have tried to simplify the two terms-
Vertical scaling refers to adding more resources (CPU/RAM/DISK) to your server (database or application server is still remains one) as on demand.
Vertical Scaling is most commonly used in applications and products of middle-range as well as small and middle-sized companies. One of the most common examples of Virtual Scaling is to buy an expensive hardware and use it as a Virtual Machine hypervisor (VMWare ESX).
Vertical Scaling usually means upgrade of server hardware. Some of the reasons to scale vertically includes increasing IOPS (Input / Ouput Operations), amplifying CPU/RAM capacity, as well as disk capacity.
However, even after using virtualization, whenever an improved performance is targeted, the risk for downtimes with it is much higher than using horizontal scaling.
Horizontal Scaling is a must use technology – whenever a high availability of (server) services are required
Scaling horizontally involves adding more processing units or phyiscal machines to your server or database. It involves growing the number of nodes in the cluster, reducing the responsibilities of each member node by spreading the key space wider and providing additional end-points for client connections. Horizontal Scaling has been historically much more used for high level of computing and for application and services.
Although this does not alter the capacity of each individual node, the load is decreased due to the distribution between separate server nodes.
Some of the reasons why organizations should choose to scale horizontally include increasing I/O concurrency, reducing the load on existing nodes, and increasing disk capacity.
The Internet and particular web services have boosted the use of Horizontal Scaling. Most giant companies that provide well known web services like Google (Gmail, YouTube), Yahoo, Facebook, EBay, Amazon etc. are using heavily horizontal scaling.
In a nut shell,
Horizontal-scaling is often based on partitioning of the data in which each node contains only part of the data. In the case of vertical-scaling, the data resides on a single node. Scaling here is done through multi-core by spreading the load between the CPU and RAM resources.
Which is more Feasible?
Horizontal-scaling or scale dynamically is quite easy as you can add more machines into the existing pool. Vertical-scaling on the contrary is often limited to the capacity of a single machine. Scaling beyond that capacity results in downtime and comes with an upper limit.
One of the good example of horizontal scaling is Cassandra, MongoDB and that of vertical scaling is MySQL. Scaling vertically can be achieved easily by switching from small to bigger machines. But this involves downtime.
If you need to achieve superior performance issues you can use either vertical scaling or horizontal scaling or both in cloud environments. There are few auto scalable models that are comparatively far better than traditional scaling models and are known to offer best performances without any down time.