Introduction to Cloud Computing
Cloud computing is all the rage today. Each new day brings some announcement from yet another company desperately trying to get on the bandwagon. You see this every time there is a major movement in our industry. Remember Service Oriented Architecture (SOA)? Or how about Web Services or Business Process Modeling (BPM)? The list goes on and on. There will always be a new big movement, and companies will struggle to redefine themselves in terms that are relevant, and cloud computing is not an exception.
Because of all of this, your pointy haired boss is likely to come up to you someday and expect you to know all about cloud computing and ask for you to look into it. In this article, I will try to lay down some groundwork on what the cloud is, and how you can explain it to your boss. With all of the noise about cloud computing it is hard to really figure out what it really is, what it can really do, and how it is relevant to you and your company. You can't really rely on a vendor's definition of cloud computing, primarily because their definition will likely highlight what their platform does best (full disclosure, I work for Microsoft) and downplay the strengths of their competitors.
Defining Cloud Computing
There are also several industry definitions, and these are good, but like all industry standards, there are many, and most are hard to understand. For example, you can download the draft definition of cloud computing from NIST. While it is complete and thorough, I have an issue with a definition that is nearly 800 words long. Of course you can always try the cloud computing definition on Wikipedia.org. It is much shorter, and a bit easier to understand. If you need a formal definition then maybe those are your best sources to go to first. But, I know that when I work with customers and their pointy haired boss's, they don't want to spend time reading long, boring standards documents, they want a quick elevator pitch. They want something that is boiled down to the essentials.
To help you with this problem I am going to break it down into a simple definition. So Brian Prince's official short hand definition for cloud computing is:
"Cloud computing is just another place to run your applications. The cloud hides from you details of how your application is run. Different types of clouds hide different aspects of the environment from you. While losing some control and visibility into what is going on, you gain freedom from those details, and a lot of cost savings."
There is a spectrum of computing that you pick from when you decide where and how to deploy your applications. On the far left of this spectrum is the local experience, starting with a mobile device (like a Windows Phone or an iPad). This spectrum stretches to the right through the desktop, to the server room, to the hoster, and finally coming to s stop with the cloud on the right hand side.
Generally speaking, the more you moving from the left to the right the less control over the environment you have, while gaining economies of scale. Think of it this way, when you have to buy, maintain, and support all of the servers you need you have full control over everything. The hardware you select, how often you maintain and patch it, as well as how well you manage security, disaster recovery, and high availability. As you move to the right, towards the cloud, you lose control over HOW these aspects are provided, but you gain economies of scale in the features the vendor provides.
Many customers actually end up with a more secure and better managed platform when they move to the cloud because it is better than what they were able to previously afford (or not afford as the case may be). It is amazing how many companies I visit where their data center is a left over closet with the door propped open with a fan.
The vendor will likely provide for security, availability, and lots of other features and you won't necessarily know or care how that is achieved. That is ok, as long as it is documented in a contract, and an SLA, and you hold them to that SLA, that is all that matters. Ok, so the cloud is just another place to run my code. But why? Why do I want to use the cloud? The biggest reason is usually money. By moving systems to the cloud that you don't need a lot of control over (a customer facing portal for example) then you save a lot of money by leveraging the vendor's economy of scale.
Why Use Cloud Computing?
One of the key differentiators of the cloud is the dynamic allocation of resources from a shared pool to your application. When you site gets busy you can add servers, and as it becomes stagnant you can remove servers. This dialing up and down of resources makes it easier to save money. Cloud offerings are usually maintained like a utility. I can get as much as I want, when I want it, and pay for only what I use. These utility like aspects give your company a great degree of agility to respond to the demands on the system, and to the demands on the business.
As all of the vendors keep trying to woo you, remember that not everything needs to or can run in the cloud. There are going to be pieces of your IT that make complete sense to run in the cloud, and other parts that really show stay where they are. Look for a vendor that can meet these needs, a vendor that won't require you to completely rewrite your system in their language just to move a part to the cloud. Focus on a hybrid approach, picking the pieces that the cloud will provide the most value for, and moving those. Move the lowest hanging fruit first, that system that has the least risk to the business. Your vendor should have options for connecting your cloud components to your on premises components, and make them all work together.
Looking Deeper into Cloud Computing
This aritcle launches a new column that will be hosted on Codeguru.com. In this new column, you'll learn about the different types of clouds, when you should use them, and when you shouldn't. In the meantime, please leave any questions in the comments and we will do our best to get them answered!