In the last couple of years there has been a lot of buzz about the terms “Cloud Computing” and “Software-as-a-Service” (SaaS). While these terms are sometimes used as synonyms, they mean something completely different:
It is an approach to software design and delivery infrastructure that relies on computing power hosted somewhere on the Internet and can rapidly scale to meet users demand and be paid for “on demand”. Cloud services can include computation services, storage services, data services, networking services or any other services needed to build and deliver one (or more) applications to end users.
Is a paradigm for delivery of software applications that does not require any local copy of software to be installed on the user’s machine. The user relies on the browser alone to access all the functionalities of the application.
At Microsoft we believe the SaaS concept can be greatly improved by taking a more comprehensive and balanced “Software-plus-Services” (S+S) approach where the Cloud Computing services can be accessed via either a web browser or a rich client application to maximise the flexibility developers will have in delivering more compelling solutions. A typical example of extremely successful S+S approach is Xbox and Xbox LIVE which counts millions of users worldwide who enjoy accessing cloud services (Xbox LIVE) using the software deployed on their machines (Xbox). More details on Microsoft’s vision for S+S are available on theS+S website.
At the last Professional Developers Conference we announced theAzure Services Platform, which is “an internet-scale cloud services platform hosted in Microsoft data centres, which provides an operating system and a set of developer services that can be used individually or together”. The Azure Services Platform is composed of a number of foundation services and cloud applications ready for consumption by customers.
Windows Azure is the “cloud operating system” that serves as the development, service hosting and service management environment for the Azure Services Platform and on top of which all the other services run. The most important aspect of Windows Azure is that it provides on-demand computing power and storage that can scale as required by the load at any given moment in time.
Windows Azure applications has multiple instances that run in their own 64 bit Windows Server 2008 Virtual Machines (VM). The VMs are not directly accessible by the application and the developers don’t need to worry about the underlying OS. The VMs provide two roles for the application, a Web Role and a Worker Role.
As the name suggests, the Web Role will accept HTTP requests (or HTTPS) via Internet Information Server (IIS) 7 and can be implemented using any .NET technology (ASP.NET, WCF, etc.). This role sits behind a load balancing service which allows to “scale out” (i.e. by adding additional instances of the Web Role) when required.
The Worker Role does not accept any connection from the outside world but it receives commands from the Windows Azure Fabric via a queuing mechanism and can send the result of its processing back to the fabric or to the outside world (output connections are allowed).
So, in order to take full advantage of the built-in scalability of the Azure Services applications on the Web Role must be stateless, so any state information must either be stored in the Storage fabric or passed back to the client using a cookie.
The storage fabric is not a relational database (such as SQL Server) but because it is designed specifically for Windows Azure it is a simpler and more scalable store that allows storing Binary Large Objects (blobs), simple tables and queue services to communicate between different application components.
While blobs and tables are focused on storing data and developers should select the appropriate one based on the type of data that needs to be stored, queues have the purpose of providing a way for Web role instances to communicate with Worker role instances. When a user performs an action which requires a Worker Role to be executed, a message is written into the queue, picked up by the first available Worker Role, processed and the result is passed back either as another message in the queue or handled in a different way. While this may sound complicated, it also guarantees scalability of the application and means that each instance of the application itself will not be a single point of failure.
We believe understanding this paradigm of writing applications and the concepts of cloud computing will be a growing requirement for developers and as such are working on creating curricula to help teaching this to Computer Science students as well as providing access to the software and the systems for academic institutions.
In future issues of this newsletter we’ll dig deeper in how applications for Windows Azure are developed, provide code examples and examine also the other components of the overall Azure Services Platform. In the meantime, if you are interested in learning more, want to receive access codes to the Community Technology Program or plan to add this to your curricula, please feel free to get in touch with us.