Vertical Scaling is the addition of extra resources to the servers in a network. For example, a business runs up against storage capacity limits, so they choose to add extra or larger hard drives to their existing servers. It is the old fashioned approach, and it tends to be significantly more expensive than the horizontal scaling we’re going to look at below. If a company expects to be vertically scaling their existing hardware, then that hardware has to be built with the possibility in mind. It has to have excess capacity, extra drive bays, and so on, that will end up sitting idle until the moment of expansion comes. Such hardware tends to be significantly more expensive than commodity hardware: hardware prices don’t scale linearly.
Vertical scaling is also fairly inefficient when it comes to resource reallocation. Because servers tend to be dedicated to particular tasks, it can be hard to reallocate the spare resources of a server to other, more pressing tasks. That’s why virtualization has become so popular.
Horizontal Scaling, on the other hand, involves adding more nodes to the system as it scales, rather than beefing up the existing nodes. This is by far the most popular scaling strategy in modern times. Google, Facebook, and other huge enterprises rely on using many nodes of relatively inexpensive commodity-class hardware, which they can add to and retask as the need arises. Because horizontal scaling is the growth method of choice for very large Internet enterprises, software has been developed that makes distributing file serving, databases, and virtualization across an expanding pool of nodes practical. For example, Google’s Spanner is a distributed database that is designed to scale at globally. The increasingly popular Hadoop software framework has horizontal scaling as a key design principle.