You might be wondering how people are putting clouds to use. I’ve collected some (but definitely not all) of the most common use cases, starting simple and building to the more complex.
Hosting Static Web Sites and Complex Web Applications
The cloud can easily host a static web site built from static HTML pages, CSS style sheets, and images. In fact, the simplest of such sites can be hosted using only cloud storage, perhaps aided by a content distribution system.
More complex web sites, often with substantial server-side processing and access to a relational database, can also be hosted in the cloud. These sites make use of cloud storage and processing, and often require substantial processing and storage resources to attain the required scale.
Software Development Life Cycle Support
The cloud is a good match for the resource requirements of each phase of the software development life cycle.
During development, using the cloud can ensure that developers have adequate resources for their work. Suppose that a team of developers are building a classic three-tier web application with web, application, and database tiers, each destined to reside on a separate physical server at deployment time. Without AWS, each developer would be supplied with three complete servers, each of which would sit idle for much of the day. Costs grow quickly when new developers are added to the project. Moving to the cloud means that each developer can spin up servers in the morning, develop and test all day, and then return the servers to the cloud at the end of the working day.
The cloud is also valuable during software testing. Developers can spin up testing servers and run unit tests on them without burdening their development servers. If there are numerous unit tests, multiple parallel servers can be used to spread the load around.
The cloud can be used to support a continuous integration environment. In such an environment, each source code commit operation initiates a multistep process of rebuilding, unit testing, and functional testing. If the code is being written for multiple target environments (several different versions or variants of Linux) or platforms (Windows and Linux), the cloud can be a very cost-effective alternative to owning your own infrastructure.
Load and performance testing can be done throughout each development cycle using cloud computing resources. If the application itself will run on the cloud, the testing will ensure that it performs well under a heavy load, adding additional resources as the load grows and removing them as it dissipates.
Testing the performance of a web application intended for public or enterprise deployment becomes easier when the cloud can supply the resources needed to conduct a test at a scale representative of the expected load. Several companies use cloud resources to generate loads that are the equivalent to hundreds of thousands of simultaneous users.
Once the application has been deployed (perhaps also to the cloud), the cloud can supply the resources needed to perform compatibility tests when application middleware layers or common components are updated. Thorough testing can help establish the confidence needed to make substantial upgrades to a production system without the risk of downtime.
The cloud can supply the short-term resources needed to support various types of training programs.
If students are learning how to install, run, and monitor the three-tier application described in the previous section, they can use their own laptops to access cloud resources allocated for the duration of the class. When the class is over for the day the resources are returned to the cloud. The students can start from a single “master” machine image and avoid wasting time (theirs or the instructor’s) installing and configuring required packages and applications.
Traditional training classes must impose limits on class size corresponding to the restricted amount of physical hardware that they have available. Leading companies are now conducting online training seminars, backed by per-student cloud-based resources where an additional server is launched as each new student joins the class. This technique has been used by application and database software vendors with impressive results.
Resources drawn from the cloud can be used to host and deliver demos and trial versions of packaged software applications. Vendors can place demos into the hands of potential customers while the lead is “hot,” rather than after the usual protracted delay while a suitable test environment is prepared. Application vendors can create and provide access to a server hosted in the cloud at low cost and on short notice. The sales cycle is shortened and customers have a good experience with the use of cloud-based resources. In some cases, cloud-based demos actually lead to cloud-based deployment.
The cloud is a good place to store private or public data. Scalability, long-term durability, and economy of scale are of paramount importance for this use case. The stored data could be as simple and compact as a few personal files for backup, or it could be as large and complex as a backup of a company’s entire digital assets, or anything in between.
Often, use of storage in the cloud turns out to be an excellent first step, a step that inspires confidence and soon leads to considering the cloud for other, more complex, use cases.
Disaster Recovery and Business Continuity
Enterprises with a mission-critical dependence on IT resources must have a plan in place to deal with any setback, be it a temporary or permanent loss of the resources or access to them. The plan must take into account the potential for fires, floods, earthquakes, and terrorist acts to disrupt a company’s operations. Many businesses maintain an entire data center in reserve; data is replicated to the backup center on occasion and the entire complex stands ready to be activated at a moment’s notice. Needless to say, the cost of building and running a duplicate facility is considerable.
Cloud computing, once again, offers a different way to ensure business continuity. Instead of wasting capital on hardware that will never be put to use under normal circumstances, the entire corporate network can be modeled as a set of cloud resources, captured in template form, and then instantiated when trouble strikes. In this particular use case, you’ll need to work with your cloud provider to ensure that the necessary resources will be available when you need them.
Once the corporate network has been modeled for business continuity purposes, other interesting uses come to mind. Traditionally, widespread deployment of updated versions of middleware and shared applications components require substantial compatibility and performance testing. This task is fraught with peril! Many companies find themselves slowly slipping behind: they’re unable to deploy the newest code due to limitations in their ability to fully test before deployment, and unwilling to risk facing the consequences of a failed deployment.
Imagine spinning up a full copy (or a representative, scaled-down subset) of the corporate network, along with specified versions of the application components to be tested, and then running compatibility and load tests on it, all in the cloud, and at a very reasonable cost.
Media Processing and Rendering
A number of popular web sites support uploading of media files: music, still images, or videos. Once uploaded the files undergo a number of processing steps, which can be compute-intensive, I/O intensive, or both. Files of all types are scanned for viruses and other forms of malware. Music is fingerprinted (to check for copyright violations) and then transcoded to allow for playback at different bit rates. Images are scaled, watermarked, checked for duplication, and rendered in different formats. Videos are also transcoded and scaled, and sometimes broken into shorter chunks. Finally, the finished objects are stored and made available for online viewing or downloading.
Rendering uses a scene description to generate frames for an animated movie. Each frame can be rendered independently of the others. There’s comparatively little input data, but plenty of output data. The process is compute-intensive, since each pixel of each frame must be computed, taking into account light, shadow, color, and motion.
Cloud computing is ideal for processing and rendering use cases due to the amount of storage, processing, and internet bandwidth they can consume.
Business and Scientific Data Processing
Scientific and business data processing often involves extremely large-scale data sets and can consume vast amounts of CPU power. Analysis is often done on an on-demand basis, leading to over-commitments of limited internal resources. In fact, I’m told that many internal scientific compute grids routinely flip between 0% usage (absolutely no work to be done) and 100% usage (every possible processor is in use). This is a particularly acute problem on university campuses, where usage heats up before the end of the semester and before major conferences.
Business data processing can be ad hoc (unscheduled) or more routine; monthly payroll processing and daily web log processing come to mind as very obvious use cases for cloud computing. A large, busy web site is capable of generating tens of gigabytes of log file data in each 24-hour period. Due to the amount of business intelligence that can be mined from the log files, analysis is a mission-critical function. Gaining access to the usage data on a more timely basis enables better site optimization and a quicker response to changes and trends. The daily analysis process starts to take long and longer, and at some point begins to take almost 24 hours. Once this happens, heavily parallel solutions are brought to bear on the problem, consuming more resources for a shorter amount of time—a perfect case for cloud computing.
As companies begin to understand the benefits that cloud computing brings, they look for solutions that allow them to use their existing IT resources for routine work, while pushing the extra work to the cloud. It’s like bringing in temporary workers to handle a holiday rush.
Overflow processing allows companies to become comfortable with the cloud. They find more and more ways to use the cloud as their confidence level increases, and as the amount of vital corporate data already present in the cloud grows.