So, the first day of PDC 2008 is over and the buzzword around the conference is Windows Azure (we're expecting tomorrow a new wave of announcements related to the client side of things - Windows 7, Silverlight, and the likes). Naturally, everybody is debating the ultimate topic: what is Windows Azure after all?
Perhaps the simplest definition of all is: Windows Azure is THE Microsoft operating system for the cloud. Think of it as the modern version of Hal designed to harness the awesome power of the hardware located in geographically distributed datacenters. Those of you who are curious enough to dig under the apparent simplicity of this definition, will find out that this cloud OS aims to abstract the complexity of infrastructure management while providing a rich API for developers. On one hand, you'll get an abstracted execution environment, a shared file system, resource allocation, and of course a programing environment. On the other hand, you'll get 24/7/365 operation, a pay as you use billing model, and the much praised simpler/transparent administration.
Of course, we're talking here about a CTP, so expect lots of changes by the time this stuff goes gold. Even those who are behind Azure acknowledge there are still things to figure out. Among them, issues like the billing model, legal challenges, localization/local issues, data privacy questions. What strikes me in a very positive way is the openness of the architects of Windows Azure. Instead of being slippery with issues like the previously mentioned ones, all speakers, with no exceptions, admitted that Azure is work in progress, and because of that, the final shape of the product will depend a lot on customer input/feedback.
Besides these types of concerns, the question asked most of the times was: will Azure be available for independent deployment by other organizations than Microsoft? The response from Microsoft is that knowledge gained in Azure will be eventually transferred into server products which in turn will be (as they are already today) available for on-premises deployment. My understanding is that Microsoft is not yet prepared to address/discuss the issue. If you take into consideration the fact that after all we're talking about a CTP, that seems a perfectly valid position.
Another interesting debate that is shaping up is the one related to on-premises vs. cloud services paradigms. As one would expect, cloud services are bringing inevitable shifts in the mindset of architects and developers as well. Think about the long way we've gone from monolithic software in the 70s, client/server in the 80s, web apps in the 90s, SOA today, to services (which are just under tomorrow's horizon). Every single step of this evolution came with the inherent paradigm shift. I'll get into more details about this subject in a future post.
Let me get back a bit to the definition of Windows Azure... there's one buzzword there that deserves close attention. Yes, you're right :) ... it's the CLOUD. What a heck is after all this cloud we're all talking about? Well, if you ask me, I'd say the cloud is basically a bunch of connected servers that enable you to install and run services on one hand, and storing and retrieving data on the other hand. Do we already have clouds today? Sort of... The catch is that today, the datacenter component of the cloud gets most of our attention while the business logic is usually the part that gets too little attention at the end of the day. By the datacenter component, I understand things like addressing HW failures, accommodating traffic fluctuation, scaling capacity, handling service failures, patching, upgrading, localization, and the list can go on and on. The big promise of the cloud is to free us from most of this pain. Still, as I already mentioned, there's going to be a price to pay for this luxury, and I'm not talking about the service fee :) Some will be ready to pay it, some not.
So far so good, but let's take a look now to the core Azure features which are:
- Automated service management
- Service hosting environment
- Scalable and available storage
- Rich developer experience
Automated service management is all about developing, modeling, deploying, running, and maintaining the health of services. Stuff like defining service topology, size, health constraints, and config settings is already available in the current CTP.
The service hosting environment is based on fundamental components like servers, load balancers, as well as concepts like virtualized and/or direct execution.
Blobs, tables, and queues are the basic primitives of the scalable and available storage. While not being exposed in the current CTP, there are also others like streams, caches, and locks. Perhaps the most important thing to understand about the storage feature of Azure is that it is not a db service in the cloud. From what I've seen so far, there are many who have a real problem understanding this fundamental aspect. Microsoft set some pretty impressive goals for Azure storage: massive scalability, high availability and durability, as well as geo-distribution and geo-replication. It's going to be pretty interesting to see how they meet these goals as they are closing to the first Azure release.
Last but not least, there is the developer experience. Since we're talking Microsoft here, everybody expects it to be exceptional. At this point, it certainly looks set to be. We're talking here about ASP.NET support, Visual Studio integration (the current CTP), and native code support, PHP support, Eclipse integration (in future CTPs). Did I mention there's also a complete cloud environment on the desktop which enables us to develop Azure applications offline?
Well, that's about it... :) I don't know how the future looks for Windows Azure, but I definitely know that we have pretty interesting times ahead. The cloud wars have just entered a new stage.