Service-oriented architecture (SOA) has been dominating the enterprise IT world for the past few years by promoting the idea of loosely coupled services. Cloud computing is the latest IT trend that is changing how enterprise applications are deployed and delivered to consumers.
Visit any software vendor's website and you will notice that it is decorated with clouds. If you have recently interviewed for a job, your prospective employer would be shocked if you had not heard of this jargon. In this article, I will provide an introduction to cloud computing and offer a few best practices for building an application that you plan to deploy in the cloud.
What Is Cloud Computing?
It is very difficult to define cloud computing or come up with a definition that everyone will agree on. However, here is how the National Institute of Standards and Technology (NIST) defines it:
"Cloud computing is a model for enabling convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction."
From a business owner perspective, he or she does not need to worry about building and maintaining computing resources such as hardware, middleware, databases, or applications -- these are offered as services via the Internet. Also the availability, reliability, scalability and performance of the resources are the responsibilities of the cloud vendor. As a developer, you focus on building applications while the other concerns are addressed by the cloud provider.
Characteristics and Benefits of Cloud Computing
Several characteristics of cloud computing benefit IT organizations. Some of the main characteristics and benefits are:
- Pay per use -- One of the most important characteristics of cloud computing is its rental and pay-as-you-go model. This greatly lowers startup costs and total cost of ownership. You do not have to worry about purchasing expensive hardware and software licenses nor worry about availability, scalability, reliability and security aspects of your infrastructure, platform or application. You will be charged by the cloud vendor based on the actual usage of resources. This helps companies to focus on innovation and greatly reduces the time required to launch new products.
- Computing resources available on the Internet -- The hardware and software resources are available on the Internet. These can be accessed by either developers to build and deploy applications or end users to perform their regular work.
- On-demand and self-service -- The services are available on-demand and users can provision their services themselves. For instance, if you are a developer and you need an application server instance such as WebLogic Server for building and deploying your Java application, you can start a virtual machine running WebLogic Server from a self-service portal within a few minutes. You do not have to worry about locating hardware and installing software. This greatly improves productivity and leads to customer satisfaction.
- Resource pooling, multitenancy and virtualization -- One of the important concepts of cloud computing is treating the hardware as a resource pool and using it based on demand. Virtualization helps effective usage of computing resources by treating them as a resource pool and promoting multi-tenancy. Multi-tenancy promotes the ability to share the same computer by multiple organizations without compromising their security and privacy. This leads to effective usage of hardware resources and lowers cost of ownership.
- Elastic in nature -- Cloud computing encourages elasticity in the application platform. By elasticity, I mean the actual resources used by the application may grow or shrink based on the load on the application. For example, the number of instances of virtual machines running an application may dynamically grow during the peak load and may shrink automatically in the off-peak hours. This provides automatic scaling of applications without intervention from the application administrator and leads to effective usage of resources based on demand.