What is cloud computing?
The question seems pretty innocuous and simple, but looks are deceiving. There are hundreds, if not thousands, of cloud computing definitions floating around the Web today. To answer this question adequately, it might be easier to first understand what cloud computing is not before we try to arrive at a definition.
Some will suggest that cloud computing is simply another name for the Software as a Service (SaaS) model that has been on the forefront of the Web 2.0 movement. Others say that cloud computing is marketing hype that puts a new face on old technology, such as utility computing, virtualization, or grid computing. This thinking discounts the fact that cloud computing has a wider scope than any of these particular technologies. To be sure, cloud solutions often includes these technologies (and others), but it's the comprehensive strategy that sets cloud computing apart from its predecessors.
For the purpose of this article, consider that cloud computing is an all-inclusive solution in which all computing resources (hardware, software, networking, storage, and so on) are provided rapidly to users as demand dictates. The resources, or services, that are delivered are governable to ensure things like high availability, security, and quality. The key factor to these solutions is that they possess the ability to be scaled up and down, so that users get the resources they need: no more and no less.
In short, cloud computing solutions enable IT to be delivered as a service.
Why cloud computing?
There are many reasons why more and more companies are shifting toward IT solutions that include cloud computing. First of all, cloud computing can cut costs associated with delivering IT services. You can reduce both capital and operating costs by obtaining resources only when you need them and paying only for what you use. In addition, by offloading some of the burden associated with managing various resources across the enterprise, your key personnel can focus more on producing value and innovation for the business. Finally, cloud computing models provide for business agility. Since the entire IT infrastructure can scale up or down to meet demand, businesses can more easily meet the needs of rapidly changing markets to ensure they are always on the leading edge for their consumers.
In many ways, cloud computing is the realization of combining many existing technologies (SOA, virtualization, autonomic computing) with new ideas to create a complete IT solution.
Anatomy of a cloud
With what is hopefully is an acceptable definition of cloud computing behind us, let's take a look at the layers of the cloud. Figure 1 is a distillation of what most agree are the three principle components of a cloud model. This figure accurately reflects the proportions of IT mass as it relates to cost, physical space requirements, maintenance, administration, management oversight, and obsolescence. Further, these layers not only represent a cloud anatomy, but they represent IT anatomy in general.
Figure 1. Cloud anatomy
The layers that make up a cloud include:
- Application services
This layer is perhaps most familiar to everyday Web users. The application services layer hosts applications that fit the SaaS model. These are applications that run in a cloud and are provided on demand as services to users. Sometimes the services are free and providers generate revenue from things like Web ads, and other times application providers generate revenue directly from the usage of the service. Sound familiar? It probably does since almost all of us have used them. If you've ever filed your taxes online using Turbo Tax, checked your mail using GMail or Yahoo Mail, or kept up with appointments using Google Calendar, then you are familiar with the top layer of the cloud. These are just a couple of examples of these types of applications. There are literally thousands of SaaS applications, and the number grows daily thanks to Web 2.0 technologies.
Perhaps not quite as apparent to the public at large is that there are many applications in the application services layer that are directed to the enterprise community. There are hosted software offerings available that handle payroll processing, human resource management, collaboration, customer relationship management, business partner relationship management, and more. Popular examples of these offerings include IBM® Lotus® Live, IBM Lotus Sametime®, Unyte, Salesforce.com, Sugar CRM, and WebEx.
In both cases, applications delivered via the SaaS model benefit consumers by relieving them from installing and maintaining the software, and they can be used through licensing models that support pay for use concepts.
- Platform services
This is the layer in which we see application infrastructure emerge as a set of services. This includes but is not limited to middleware as a service, messaging as a service, integration as a service, information as a service, connectivity as a service, and so on. The services here are intended to support applications. These applications might be running in the cloud, and they might be running in a more traditional enterprise data center. In order to achieve the scalability required within a cloud, the different services offered here are often virtualized. Examples of offerings in this part of the cloud include IBM® WebSphere® Application Server virtual images, Amazon Web Services, Boomi, Cast Iron, and Google App Engine. Platform services enable consumers to be sure that their applications are equipped to meet the needs of users by providing application infrastructure based on demand.
- Infrastructure services
The bottom layer of the cloud is the infrastructure services layer. Here, we see a set of physical assets such as servers, network devices, and storage disks offered as provisioned services to consumers. The services here support application infrastructure -- regardless of whether that infrastructure is being provided via a cloud -- and many more consumers. As with platform services, virtualization is an often used method to provide the on-demand rationing of the resources. Examples of infrastructure services include IBM BlueHouse, VMWare, Amazon EC2, Microsoft Azure Platform, Sun ParaScale Cloud Storage, and more.
Infrastructure services address the problem of properly equipping data centers by assuring computing power when needed. In addition, due to the fact that virtualization techniques are commonly employed in this layer, cost savings brought about by more efficient resource utilization can be realized.
Public, private, and hybrid clouds
Now that you have an idea about what cloud computing is and what makes up a cloud computing solution, let's take a look at the three major types of clouds. For the purpose of this article, we'll take a look at the types as they would relate to an enterprise consumer of cloud computing (Figure 2):
Figure 2. Cloud types
- Public clouds are cloud services provided by a third party (vendor).
They exist beyond the company firewall, and they are fully hosted and managed by
the cloud provider.
Public clouds attempt to provide consumers with hassle-free IT elements. Whether it is software, application infrastructure, or physical infrastructure, the cloud provider takes on the responsibilities of installation, management, provisioning, and maintenance. Customers are only charged for the resources they use, so under-utilization is eliminated.
However, this comes at a cost. These services are usually offered with "convention over configuration," meaning that they are delivered with the idea of accommodating the most common use cases. Configuration options are usually a smaller subset than what they would be if the resource was controlled directly by the consumer. Another thing to keep in mind is that since consumers have little control over the infrastructure, processes requiring tight security and regulatory compliance are not always a good fit for public clouds.
- Private clouds are cloud services provided within the enterprise. These
clouds exist within the company firewall and they are managed by the enterprise.
Private clouds offer many of the same benefits that public clouds do with one major difference: the enterprise is in charge of setting up and maintaining the cloud. The difficulty and cost of establishing an internal cloud can sometimes be prohibitive, and the cost of continual operation of the cloud might exceed the cost of using a public cloud.
Private clouds do offer advantages over the public variety. Finer-grained control over the various resources making up the cloud gives a company all available configuration options. In addition, private clouds are ideal when the type of work being done is not practical for a public cloud, because of due to security and regulatory concerns.
- Hybrid clouds are a combination of public and private clouds. These
clouds would typically be created by the enterprise, and management
responsibilities would be split between the enterprise and public cloud
provider. The hybrid cloud leverages services that are in both the public and
Hybrid clouds are the answer when a company needs to employ the services of both a public and private cloud. In this sense, a company can outline the goals and needs of services, and obtain them from the public or private cloud, as appropriate. A well-constructed hybrid cloud could service secure, mission-critical processes, such as receiving customer payments, as well as those that are secondary to the business, such as employee payroll processing.
The major drawback to this cloud is the difficulty in effectively creating and governing such a solution. Services from different sources must be obtained and provisioned as if they originated from a single location, and interactions between private and public components can make the implementation even more complicated. Since this is a relatively new architectural concept in cloud computing, best practices and tools about this pattern continue to emerge, and there could be a general reluctance to adopt this model until more is known.
SOA and cloud computing
Cloud computing predecessors are numerous and well-known technologies. There's utility computing, grid computing, virtualization, hypervisors, and a hosts of others. One technological concept that doesn't always enter the cloud conversation (but definitely should) is SOA. Service Oriented Architecture has played a role in enabling cloud computing to become what it is today, and it also should play a significant role in the evolution of cloud computing.
In many ways, cloud computing can be seen as an extension of SOA past applications and into application and physical infrastructure. As enterprises and cloud providers look to provide cloud solutions, their basic goal will be to enable the enterprise IT infrastructure as a service. The lessons that have been learned in order to integrate and provide enterprise applications as discrete services should also be applied as the infrastructure layers are organized and provided as services. The application and physical infrastructure, much like applications in SOA, must be discoverable, manageable, and governable. Ideally, much like with SOA, open standards will evolve that dictate how the services are discovered, consumed, managed, and governed. These standards would sum up the entire lifecycle of a cloud solution.
Figure 3 captures the idea of the three-layered cloud approach, and it shows how each of those layers are essentially offering services to an overall SOA. In some cases, the services in the bottom two layers are presented as part of an SOA, but the important part is that you recognize the service-based approach to all layers of the cloud.
Figure 3. Cloud services
Cloud matters to development
If you are a software developer or tester, you might think that this all sounds great but aren't quite sure if it matters to you. After all, this is for administrators, right? This is a common first opinion, but it doesn’t consider some clear benefits that cloud computing can provide development and test teams.
For example, one of the biggest inhibitors in both test and development is the ability to acquire, deploy, configure, and host environments in which to perform development unit testing, prototyping, and full product testing. Cloud computing solutions can be used to rapidly create and host such environments, removing the burden from test and development teams and putting the problem within the realm of the cloud. For development teams, this means that things like continuous code integration and prototyping become more easily achievable, since product updates and new code can be tested with relative ease. For test teams, more time can be spent testing the quality of a product, and less time is invested in enabling the testing.
In addition to providing runtime environments for development teams, there is another area of the cloud aimed squarely at developers. Tools as a service, a subset of SaaS, is the idea that development tools can be offered in the clouds. IDEs and simple code editors become hosted pieces of software that are accessible to developers with an Internet connection. This eliminates the need for developers to have local IDEs and corresponding licenses on every machine they own. As a developer, you can probably understand the potential value derived from being able to access common development environments from any machine at any time.
There is yet another impact of cloud computing on developers. It should be a clarion call for developer's to embrace standard programming model APIs when at all possible. All developers strive to be model programming citizens, adhering strictly to standards, but most have probably strayed from time to time. Perhaps you strayed because a proprietary API gave you some tangible benefit like performance; in another case, maybe you just wanted to "get it working." In the cloud, any deviance from standard APIs is especially dangerous, and the reason for this is fairly clear. Although consumers know they are getting a service they requested from a cloud provider, they might not be aware of the implementation details of that service.
For example, consider requesting a J2EE™ application server service from a cloud provider. The cloud provider produces the application server service, but you might be completely unaware of what vendor's server you are receiving unless you negotiated a specific agreement with the provider. Any application you choose to deploy onto the provided server should be free of vendor-specific code, because you might end up with an application server implementation that you weren’t expecting.
Tooling for the clouds
A major component in cloud computing touched on above is tooling. In many ways, this might be the most critical to the success of a cloud computing solution. There is significant technology present in the marketplace to deliver cloud computing solutions, but these technologies are often difficult to deliver due to a lack of comprehensive, understandable tooling.
Consider the application services layer in the cloud. Tooling in this layer could provide an environment that assists with cloud application development, and it should provide the means to package and deploy the application to a cloud infrastructure. We know that there are already many such tools that fit this description, but the problem is that they are nearly always tied to the cloud provider's infrastructure. Open standards are key to getting the most power and flexibility from this tooling. Developers cannot afford to incur the costs of learning new tools every time they switch cloud infrastructures; further, development shops cannot continually incur the cost of rewriting applications because they switched cloud infrastructures. For this reason, the tooling should aid application development, packaging, and deployment in a way that makes the finished project portable across multiple cloud infrastructures.
Tooling also has a very clear role in the infrastructure services layer. Building out the infrastructure for a cloud is not a trivial process. All of the physical assets for a cloud provider, whether that provider is internal or external, need to be considered such that the right physical resources are allocated to the cloud. Tools in this space should help companies visualize their IT assets so that no resources are left out of consideration for the cloud. However, it won't be enough to provide a visualization of the assets to the cloud constructor. The tooling in this space should offer some bit of intelligence toward the creation of the cloud. In the past, IT administrators have had a tough job of trying to match expected demand to physical resources. This has led to the problem of under-utilization of resources, and this issue is a huge catalyst for the cloud. Tools should guide users through the physical makeup of the cloud based on the expected demand characteristics of the system.
Cloud computing is poised to be a significant player in the tech industry now and in the foreseeable future. In its ultimate form, it will provide the means for IT to be delivered to consumers as a service. The number of products and services offerings in the cloud computing space continues to grow and underscores the fact that it is where things are heading. We are excited for the opportunities cloud computing presents our WebSphere developers, and in subsequent articles we will discuss what some of those opportunities are and look at some of the WebSphere solutions that are moving cloud computing from an idea to bottom-line returns for enterprises.
- More in this series
- Cloud Computing: Gain access to your Applications from anywhere, at any time
- Cloud Computing Journal A collection of stories, blog entries, and general information in cloud computing.
- Is there value in cloud computing?
- IBM developerWorks WebSphere
- Blog: A view from the clouds: Cloud computing for the WebSphere developer
- Space: Cloud Computing Central
- WebSphere Cloud Computing for Developers community discusses the cloud computing landscape as it relates to WebSphere developers.
- Group: Google cloud computing discussion group
- Follow us on Twitter