(Reproduced from an article I wrote for a newsletter)
Gartner identified Cloud Computing as the No. 1 strategic technology for 2011. Companies like Microsoft, Google and Amazon are pumping lots of money into it. And more and more companies are moving their online presence and applications to the cloud.
So, what is this “cloud”? And what is all this hype surrounding it.
If you look up Wikipedia, you will find the National Institute of Standards and Technology (NIST)’s definition of what Cloud computing is:
“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.”
Confused? Here is my simplistic definition –
“It is computing power that can be shared over the internet, with several advantages like reliability, scalability, ease of maintenance and most importantly – low cost.”
Anything that you make available over the internet, whether it is a simple website, a complex application or set of services can be hosted in the cloud.
The concept of cloud computing can be best explained with an analogy. Let us assume that you are a tour guide showing people around Melbourne. What you bring to the table is your knowledge of the city of Melbourne, but you are dependent on a transport mechanism (let’s say, a car, van or even bus) to show people around. Obviously, buying your own van or bus requires a lot of upfront cost. And you may have days where there are a lot of people interested in going on a tour and days where you hardly have anyone. And what if your vehicle breaks down when you have a lot of people signed up?
Wouldn’t it be awesome, if you could just pay someone for a vehicle every day? And if you could get a bigger or smaller vehicle depending on the number of people on the tour – and pay accordingly? Maybe even have more than one vehicle if there is big group interested in a tour. And what if you even had a back up to these vehicles in case something goes wrong? This is the kind of scenario in which cloud computing comes to your aid. Companies that offer cloud computing provide the “vans” and “back-up vehicles” for you to run your “tour-guide” business. You take care of your “tour-guide” business, while the cloud company takes care of size of the vehicle or number of vehicles (scaling) and providing backups (availability/reliability), and making sure that the vehicles are maintained in top condition. As a tour operator, you get very good pricing, and the cloud company uses some of the seats in the van to service other customers, thereby increasing their own profitability.
Pricing, reliability and on-demand scalability is what makes cloud a very attractive option.
The analogy provided is a simplistic view of the cloud, and when people talk about the cloud, they generally refer to three specific models – Platform as a service (PaaS), Infrastructure as a service (IaaS) and Software as a service (Saas).
Cloud implementations such as Windows Azure fall into the Platform as a Service model. What Windows Azure provides is a platform in which you can write and deploy applications to. These applications need to follow a set of rules and be designed in a specific way to run in this platform. Conforming to these rules is easy if you use the right tools (such as Visual Studio) and SDK provided by Microsoft. Once you deploy an application that plays by the platform rules, the platform takes care of other things like load balancing, reliability, etc. To keep up with the tour guide analogy, the company providing the van lays down rules saying that only people are allowed into their vans. If you wanted to transport other things such as equipment, you can’t do it.
This is where Infrastructure as a service comes into play. This is the equivalent of the cloud company saying – “I am going to give you a van to run your tours and I don’t care what you do with the van – you run and manage it yourself”. You can then transport anything you want – people, equipment, whatever. But this brings additional responsibility in managing things such as availability and scalability, which you didn’t have to worry with the PaaS model. Amazon EC2 is an example of a very popular IaaS implementation that charges customers a certain amount based on the virtual machine they want. In addition, you also pay for things like storage costs and data transfer cost.
The Software as a Service model, on the other hand, lets cloud companies provide software that can be used for a fee. This is particularly useful if running certain software involves a lot of infrastructure and running costs, which could be prohibitive for smaller companies. But because of the cost savings and scalability this model provides, it is also useful for medium to large size companies. Popular SaaS implementations such as SalesForce, provide users with advantages such as high adoption across multiple devices, lower initial costs, easier upgrades, low maintenance and high scalability. SaaS applications typically have no or very little installation that customers have to do – instead they access these applications as a service across the web.
Explaining SaaS using the tour guide analogy may be difficult, but think of it as the tour guide company providing its services for tour operators or airlines like Qantas to use. The airlines can then focus on their core business of running an airline, while it uses the tour guide company to run local tours.
The Windows Azure Platform
Microsoft has several offerings in the cloud space that is either already out or soon going to be out – Office 365 and Dynamics CRM Online are two such offerings. But the one developers need to be aware of is Windows Azure. Windows Azure is essentially Microsoft’s operating system for the cloud.
Windows Azure provides you the platform to develop and deploy applications that are hosted in Microsoft data centres around the world. The Windows Azure platform consists of the following components:
· Compute Services: This is responsible for running applications, whether they are web applications, services or long running code that needs to reside on the server. These applications are deployed into a concept called Roles. Roles are nothing but an abstraction of an application type running on a set of machines. Web applications run on a Web Role and background tasks and long running operations run on a Worker Role
· Storage Services: All applications need a place to store data. Azure storage provides them the capability to do that in the cloud. Azure storage supports Table Storage, which is a highly scalable way of storing data; and Blobs, which is a way of storing files – large or small. In addition, it provides Queues, which can be used as an asynchronous communication mechanism between different roles. In addition to this, SQL Azure can be used to store relational data in the form of tables. SQL Azure is version of SQL Server that has been modified to run in the cloud.
· Networking: When you start hosting applications in the cloud, you will soon find that you cannot move all your organisation’s applications and services to the cloud. Some of them have dependencies and sufficient reasons from preventing them from leaving the organisation’s data centre. But what if your roles in the cloud need to communicate with these services? Windows Azure Connect provides a way of connecting the two so that they can communicate. Apart from Connect services, Azure also provides the Azure Traffic Manager. The Traffic Manager provides a way of distributing incoming traffic to different hosted services, whether they are hosted in the same data centre or spread across different services around the world. This acts like a load balancer that diverts traffic at a more global scale.
· Caching: Apart from issues like scalability and reliability, performance is usually a very common requirement in most applications and it becomes even more important in the context of the cloud. Caching in Azure is provided using Content Delivery Networks and data caches. Azure’s Content Delivery Networks (CDN) is used to cache blobs at edge networks to speed up network access, and AppService caching can provide caching within Azure to speed up access to data.
· Security: Azure’s Access Control Service or ACS provides an infrastructure for Federation and user authentication using ADFS, Windows Live ID, Google, Facebook, etc.
Although, Azure provides a number of these components, when developers start working with Azure, they initially need to focus on just Azure Compute and Azure Storage.
So, how does one get started?
To get started, you need to download the Windows Azure Tools for Microsoft Visual Studio. This contains the Windows Azure SDK and extends Visual Studio by adding the necessary project templates and tools to run and test Azure applications. The Compute Emulator and Storage Emulator that are part of the download helps you run and test the Azure application locally in your own computer before you deploy it to the cloud. You also need to create an account and configure your subscriptions at http://windows.azure.com so that you can deploy your application to the cloud. The website provides a portal to manage all your azure subscriptions and your Azure services in one place.
So, what are you waiting for? Get cracking and move your first app to the cloud. I promise you, it won’t be your last.