Growing your business at "Internet speed" means scaling your web application according to business and market requirements. The unique value proposition of Cloud Computing creates new opportunities to align IT and business goals. In order to consume and use Cloud Computing resources to their best advantage, it is incumbent upon business owners, IT managers, startup founders, and senior developers to understand the options that Cloud Computing provides. Using the complete range of Cloud and traditional resources will assure that your web and IT infrastructure can expand to meet your business needs even in high growth situations.
Scalability is a measure of the ability of an application to expand to meet your business needs. Generally, you can scale a given application by adding more (or bigger) resources when needed. Resources can be many things including servers, storage, and networking bandwidth.
Be careful! Not all applications are scalable by default.
Scalable applications are able to operate normally as they grow and can have more resources added at any time to service more customer demand. Applications that are not scalable encounter performance and service availability problems as demand increases. These kinds of applications may not be able to take advantage of more resources. The design of your architecture is up to you, but this document will help you understand how your infrastructure choices can affect how you grow an application through its lifecycle.
All web applications scale just a little bit differently. The reason is that everyone's business is also a bit different. While two businesses may grow similarly, in general, one web application doesn't scale in the same manner as another. Differences in business models or architectures mean differences in scalability.
For example, two photo sharing websites like Flickr and SmugMug will have many similar kinds of technology challenges they need to overcome in order to meet customer demands, like resizing uploaded images in real time and storing large amounts of image data. In comparison, a very different web application like Amazon.com has no image uploads, but does need to build customer purchasing data to provide relevant product recommendations. Gathering, collating, and processing this data is very different from resizing images and brings its own challenges.
While true that not all web applications meet customer demands in the same way, it's also true that not all web applications are capable of being scaled well. Twitter, and others, has had notorious issues with growing to meet customer demand. Applications that grow well have generally been designed for scalability, but occasionally architectural challenges make this difficult. The only way to know how your application will perform under increased customer load is to understand where your scaling points are, use capacity planning to measure load on these points, and to add more resources when they are needed.
Although web applications don't perform in the same way, there are very common areas where resources become constrained called 'scaling points.' For example, it's very unlikely you will have a web application that can grow to meet all of your growth on a single server. At some point you will need two, ten, or more. The same is generally true of storage, networking, and other scaling points.
A starting list of scaling points includes:
This is far from a complete list. Understanding how your web application consumes resources, how it behaves under high load, and what happens for all of the potential scaling points of the entire system is critical to understanding how your web application performs.
Well-designed web applications allow you to add more capacity to each scaling point as customer demand increases, growing your capacity to exactly meet demand.
Despite the hype, cloud computing is not a panacea. What cloud computing does provide are resources on-demand for many of the typical scaling points that a web application needs including servers, storage and networking. The on-demand nature of cloud computing combined with the pay-as-you-go model means that as your application demand grows, so can the resources you use to service that demand. In this situation, your capacity equals exactly your demand as long as your application was designed properly and its architecture is amenable to scaling well.
The diagram to the right highlights how web infrastructures were grown before cloud computing.
Essentially, you had to take a best guess at your 'maximum' capacity and build out to that capacity in advance because you had no way to add new resources on-demand. This meant you were in one of two modes: either under-buying or overbuying. When underbuying, your customers would see service impacts where your website was slow or even down. When overbuying, you frequently had unused capacity and hence wasted capital.
In best case scenarios, with great staff, very good capacity planning techniques, and some luck you could minimize the amount of overbuying, but the nature of hardware ordering and provisioning lead-times means that you were almost always purchasing 1-2 months in advance.
Using cloud computing it is possible to simply add capacity as needed, typically with lead times of only 10-20 minutes or less. Since you pay only for what you provision and use, your capacity can very closely match your demand curve like in the diagram to the right.
Clearly, cloud computing provides a new compelling mechanism for dealing with web infrastructure scalability, but you still need to make sure that your web application code and architecture are scalable as well.
Download the Whitepaper and learn how Cloud Computing can help you achieve maximum scalability and how GoGrid is uniquely positioned to help your business succeed.