Traditional application architectures have relied on scaling to handle increases in load by adding more power to the server. This has meant increasing the amount of RAM, or moving to a faster, more powerful CPU. This is called scaling up. The shift to the cloud has changed the way application architectures are designed, and it has meant an increase in distributed systems. Distributed systems are built to scale out rather than up; this means adding additional servers to distribute the load across a multitude of nodes in the system. There are many benefits to scaling out, and this article walks through a few of them to explain the benefits to scaling out, rather than up.
Pitfalls of Scaling Up
There are many times when scaling UP is a valid option, and it still does have a valid place in cloud based systems. However, there are some drawbacks to relying solely on scaling up and the only option of scaling server resources. These drawbacks are the same in the cloud as they are on-premises, and have been on-premises forever.
Here are some drawbacks to solely relying on scaling up:
- Servers can only be made so big. Eventually you wont be able to add more resources necessary to scale properly.
- Scaling up may be able to add the necessary resources, but a single server is still a single point of failure that can bring and entire system down.
- Relying on moving to larger and larger servers can get very expensive, since it can mean (when running on-premises) abandoning old hardware and completely replacing it.
Benefits of Scaling Out
While scaling up has a place in the cloud, it’s generally better to architect solutions to support scaling out instead. Scaling out addes more server instances to a system and can achieve higher levels of redundancy and scalability.
Here are some benefits to scaling out:
- There’s no limit to the number of server you can add.
- Scaling out adds redundancy, and load balancing offers seamless failover for reaching high availability.
- Stateless systems are designed to scale out, and can benefit greatly from spreading the load across servers.
- Stateful systems may need extra services for state caching / sharing, and may require more work to scale out. But, once scaled out the first time, they generally are as easy to scale out as a Stateless system is.
Up and Out
Most enterprise systems will rely on 2 server to start. This give the system basic redundancy and failover ability to achieve a basic level of high availability. Generally when these systems go live into production for the first time they are using smaller server instance sizes. Then as the app grows in usage there is a need to add more server resources.
To add more server resources, there are 2 options: Up and Out. There are perfectly valid times when scaling either Up or Out will work for a given solution. Depending on how the enterprise system is architected, it may be valid to scale up or out with the same result in many cases. This is especially true if the system already has redundancy of 2 or more servers.
However, there are times when scaling Up or Out is a decision that needs to be considered carefully. Here are some scenarios to think about when deciding to scale:
- The hosting / operation cost of the system needs to be considered when scaling up or out. Sometimes it may be cheaper to one over the other giving your organization some cost savings on the monthly bill.
- Choosing to scale out can offer expanded redundancy and a higher level of availability with lower system downtime or degraded performance in case of a server or data center outage, or even a spike in load.
There are many other points to keep in mind when deciding how to scale. These are just a couple examples.