Until now Windows Azure was synonymous with PaaS: Microsoft built a reputation as arguably one of the most successful PaaS providers. This is about to change with Microsoft’s announcement of Windows Azure 2.0, which adds a slew of improvements and new capabilities on top of their existing offering. Most notable among the new capabilities is the addition of IaaS (infrastructure cloud), allowing us to support Windows Azure on par with other clouds. We will be releasing all our core ServerTemplates very shortly – yes, that’s Windows and Linux based ones – including a SQL Server 2012 ServerTemplate complete with replication and snapshot backup support.
The adoption of IaaS vs. PaaS across the cloud industry has shown that large-scale cloud usage requires IaaS. This fits with what we are seeing in that workloads being ported to the cloud by our services team are consistently increasing in complexity. Nowadays very few deployments are satisfied with pre-built configurations. That does not mean that PaaS is irrelevant – far from it – but rather that PaaS by itself is rarely sufficient. For both technical and non-technical reasons, key parts of large-scale deployments require more control, which is currently only available at the IaaS level. Being able to move these key application components into an infrastructure cloud is often times a prerequisite for moving anything to the cloud. One interesting outcome is that adding IaaS should actually help increase the usage of PaaS as it lets users pick and choose the right tool for the right component.
Our journey in integrating Windows Azure into RightScale began a few years ago when the stateless “VM role” was introduced. We provided detailed feedback to Microsoft at that time about the roadblocks we encountered. The kickoff for the current integration was a call with the new Windows Azure IaaS team where they walked us through their proposed API to ensure we could be successful. During this call it became clear that the IaaS effort is an all-out initiative and on equal footing with the PaaS offering. In the intervening years we significantly increased our portfolio of Windows solutions on other clouds, which we were then able to port to the new Windows Azure IaaS. All this made the decision to fully support Windows Azure relatively straightforward.
Microsoft is now in a unique position offering both PaaS and IaaS services through a consistent set of tools and APIs. It’s not just about the tools though, it’s also and foremost about the platform itself: Windows Azure makes it possible to run PaaS applications and IaaS servers on shared infrastructure. To give an example: “Web role” instances (i.e., hosted ASP.NET, PHP or Node.js web applications) can now run on the same private network as “IaaS VMs” that may run the backend database. You get to choose: Use the simple deployment but prescriptive solution that is SQL Azure or get the full power – and complexity – of managing your own database. This is a very powerful story that has many applications. What makes this story especially good on Windows Azure is the completeness of the IaaS offering: Microsoft’s first stab at it is quite impressive from a feature set point of view. Aside from the “traditional” VMs, Windows Azure IaaS includes support for attachable disks and virtual networks.
Quick Tour of Windows Azure IaaS
Windows Azure supports Linux. For real. One of the telling moments for me was when I walked into a design event at Microsoft and saw a whole slew of program managers and even Scott Guthrie using MacBooks, bash and git to showcase the new features of Windows Azure. I took a quick look around: Yes, I was indeed at Microsoft, yes I was awake, yes, these guys are in it with both feet, yes, when they say that the new prerogative is openness they are taking it seriously. Microsoft has partnered with the leading distributions to make sure that they would all be represented.
At the low level, the API actually supports configuration elements that are specific to Linux, such as specifying key pairs to enable SSH access. Microsoft has also been contributing to the Linux kernel to make sure that recent versions work well on their Hyper-V hypervisor used in Windows Azure. Finally they have developed a special agent that runs on Linux servers that takes care of smoothing out any discrepancy in behavior between Windows and Linux servers, for example, when the server is being moved because of hardware failures. The upshot of all this is that we will be releasing all our core Linux CentOS ServerTemplates on Windows Azure in our initial release!
As one would expect, the Windows integration is top notch. Microsoft images include the latest 2008R2 and SQL Server 2012, which we’ve used to create RightImages – these are images that include our configuration management and monitoring agent and that we have tested to work with our ServerTemplate solutions. Our ServerTemplates take this to the next level and add replication, snapshot backups, and other management features. Thanks to the integration between the Hyper-V hypervisor and the Windows 2008R2 OS, Microsoft is able to pull some interesting tricks such as moving VMs between hosts while keeping the same network IP. The API also allows specifying the LUN when attaching disks, which makes it easier to predict the drive letter of an attached disk, something that has given us grief on other clouds and is mundane but required for any non-trivial automation. We’ve been able to work around these issues on other clouds using our agent running on the server but it’s nice not to have to rely on that for Windows Azure.
Being able to run MySQL or SQL Server in the cloud efficiently requires a high-performance disk subsystem with snapshot backup. Windows Azure delivers by leveraging the pre-existing Windows Azure storage service. This is an interesting case of IaaS being implemented on top of PaaS. Going “down” to the PaaS API makes it possible to read/modify/copy the raw blobs backing both “OS” and “data” disks directly. This also means that the disk performance on Windows Azure benefits from all the work done by the PaaS storage team. In particular Windows Azure storage implements what amounts to “dynamic striping” where the service will transparently split a disk into multiple disks in overload situations. The white paper from Brad Calder et al. goes into great details about how the Windows Azure Storage service is implemented and is a great read if you want to understand the details.
The end result is that with both its PaaS and IaaS services, Microsoft is allowing a wide range of workloads to run, making a compelling solution for a much wider audience than its previous offering.
RightScale Support of Windows Azure
Out of the box, RightScale makes available on Windows Azure all the Windows ServerTemplates that currently exist on other clouds, including Base, IIS, and SQL Server 2012. We’ve also ported the LAMP AIO and HAProxy Linux ServerTemplates and are hard at work porting others, including the Database Manager for MySQL. These ServerTemplates unlock new scenarios on Windows Azure. For example, it is now possible to pick between running a PaaS web role or running a server array of IIS application servers. The second option is needed when guaranteed performance becomes an issue, when other software needs to be installed next to IIS, or components need to be plugged into IIS that can’t be placed into a web role container. Similar tradeoffs arise when comparing SQL Azure vs. running a SQL Server ServerTemplate. Using a ServerTemplate unlocks the full performance of running a dedicated SQL Server 2012 server with a dataset size that is only limited by the size of the disk.
During the development of our support for Windows Azure, we worked very closely with the Windows Azure IaaS team to navigate some of the challenging areas. One of them is that you can’t just launch a VM on its own. Rather, a VM is a “role” in either the “production deployment” or the “staging deployment” of a “hosted service.” These abstractions come with features that are mostly relevant in a PaaS environment and frankly get in our way. In the end, each of Window Azure’s deployments has a single public IP address, which is not practical if you put multiple VMs into it. After a good amount of back-and-forth with the Windows Azure team, we concluded that the best path forward is to put each VM into its own hosted service. Not ideal, but it works and some of the constraints are being remedied. The good news is that we took care of this so you don’t need to battle the details yourself.
The virtual network feature set supported by Windows Azure is impressive and provides a great deal of flexibility in configuring services and VMs into networks. Subnets defined in the cloud can be linked to customers’ data centers through hardware VPN clients hosted on-premise whose configuration files are generated by the cloud. Unfortunately this is one of the areas where we struggled the most with the API because it hooks into the PaaS functionality in the back-end. The result is that any network configuration change must be performed by uploading an XML description of the entire network, causing concurrency issues as well as creating ill-defined corner cases. Fortunately, once we brought up the issues to the Windows Azure team, they were very open to our feedback. Through this experience it has been very interesting to see how differently we approach systems management from the PaaS mindset, (or at least the one of Windows Azure PaaS): With a PaaS, users upload full-system descriptions and restart everything while we tend to perform many incremental changes over long periods of time to effect changes in deployments.
Our partnership with Microsoft has also allowed us to glean some best practices for running Microsoft’s newest application stacks in the cloud. For example, the next release of our SQL Server ServerTemplates (available on Windows Azure but also on many other clouds) uses a new setup flow that allows for more customization and improves startup times. This leverages the fact that SQL Server 2012 includes multiple optional services which can be enabled independently. There are more Windows-based ServerTemplates in the pipeline that are a direct result of these interactions, so stay tuned!
All in all we have learned a lot through this partnership and we have been able to provide lots of input to the Windows Azure team. This is great news for everyone: A better cloud and a better integration means the ability to deploy more workloads faster. From all our experience thus far, Windows Azure 2.0 is very impressive. The number of improvements that went in is staggering and it marks the start of a new chapter in the cloud story at Microsoft. Obviously, at the end of the day, what you will make of it will dictate how successful Windows Azure becomes, and we can’t wait to see all the workloads you have in store! Let us know if you would like to participate in the Windows Azure with RightScale beta.