Scalability is the capability of a system to expand from either existing configurations to handle increasing amount of load or by adding an extra hardware. There are mainly two types of scalabilities, horizontal and vertical. Horizontal scaling, is adding more servers to your application to spread the load. The simplest case of horizontal scaling may be to move your database onto a separate machine from your web server. Where as Vertical scaling is to add more RAM, more processors, more bandwidth, or more storage to your machine.
Horizontal scaling can only be applied to applications built in layers that can run on separate machines. Horizontal scaling applies really well to on-demand cloud server architectures, such as Amazon’s EC2 hosting platform. Horizontal scaling can also facilitate redundancy – having each layer running on multiple servers means that if any single machine fails, your application keeps running. While Vertical scaling can be a quick and easy way to get your application’s level of service back up to standard. On the negative side, vertical scaling will only get you so far. Upgrading a single server beyond a certain level can become very expensive, and often involves downtime and comes with an upper limit.
So what scaling strategy best suit your needs? It all comes down to the application it must be implemented on. There are many applications that can only scale vertically. They can only be run on a single server. You have a clear strategy choice with these applications! But, a well written application should scale horizontally very easily. An application that is designed to scale horizontally can also be scaled vertically. So your still left with an open choice. You can either weigh up the cost of vertically scaling with an extra bit of RAM vs horizontally adding a new server in your cluster.