Posts Tagged Azure
Update: This post was written in 2011 when Windows Azure was PaaS only. The Spring 2012 IaaS features now allow more direct comparisons, but the PaaS principles discussed in this post are still relevant.
AWS is the market leader of cloud computing, by virtue of its early entry, rapid innovation and monopolisation of the definition of cloud computing. Microsoft is a viable contender with their established customers, channels and developers as well as a sound offering backed by a company that is “All in”.
Little surprise then that customers, particularly those with a Microsoft bias, that are looking at public cloud platforms want to compare the de-facto standard of AWS with the apparently familiar world of Windows Azure. Business then turns to technical people for an opinion and a simple explanation of the differences between them.
On the surface, a technical person can draw parallels. Windows Azure (AppFabric) Queues map to Amazon Simple Queue Service. SQL Azure maps to Amazon Relational Database Service and, more recently, Windows Azure AppFabric Caching maps to Amazon ElastiCache, and so on. But those are services offered on the platform, so while you can compare and map individual services, it becomes difficult to provide a technical comparison of the overall platforms.
The fundamental building block of AWS applications is the EC2 instance and on Windows Azure it is the compute role (mostly web and worker roles). EC2 is a fully fledged virtual machine and Azure roles are containers for compute resources. (Drawing parallels between EC2 and Windows Azure VM Roles does a disservice to EC2, as Azure VM roles are not the building block of Azure applications.)
The importance of EC2 as a basic building block breaks down most of the technical comparisons between the two platforms. One may, for example map Windows Azure Table Storage, as a NoSQL database, to Amazon SimpleDB. But, with EC2 as a building block, SimpleDB is not the popular NoSQL choice on AWS, where MongoDB and Redis run well. Also, EC2 allows anything to be run (although some may not be recommended), giving EC2 an unfair edge over Windows Azure. You can, for example, run SOLR on Linux for search on EC2 and it manifests itself as a first class service, whereas no search service exists on the Windows Azure platform.
In turn, Windows Azure roles, as the container for applications and the basic building block, have advantages over EC2. Windows Azure roles require significantly less hand holding, configuration and management than EC2. There is no Chef for Windows Azure. The Windows Azure AppFabric takes care of keeping the roles running smoothly. (AWS is catching up with CloudFormation and the Java oriented Elastic Beanstalk, but it still cannot be compared to the Windows Azure fabric controller).
It would be easy to say that Windows Azure is PaaS and Amazon Web Services is IaaS, so that is where the comparison should be made. But, firstly AWS is not IaaS, and secondly all cloud vendors are moving further up the stack, providing more services that can be consumed instead of the infrastructure services. Amazon’s ElastiCache is a good example of this, where a component that previously had to be hosted in EC2 instances is now made available as a service. AWS will continue, I am sure, to add more services and the infrastructure appearance of their model will be unimportant in a few years’ time. At the same time, Microsoft has the opportunity and engineering resources to add really good services and even entire application suites to their platform — further confusing the comparisons.
So when business asks for a comparison between the two, work with them to do a higher level comparison that makes sense in their particular environment. Don’t cheat by trying to map low level services, features and prices — they look eerily similar at that level and you won’t find the droids you are looking for. Rather try something like this,
- Map out a general architectural picture for each of the platforms
- Decide which components are less architecturally significant, so that compromises can be made (and there are always compromises)
- Factor in the business and internal IT attitude towards Microsoft, anti-Microsoft and Amazon
- Look at existing IT support processes and how they would fit in with each platform.
- Work out, more or less, what the development, hosting and support costs will be for each platform. Comparing EC2 pricing to Azure Role pricing is not enough.
- Look at the application roadmap to determine if it looks like it will add high degrees of specialisation, forcing it down the AWS route, or integration with existing services and applications, tending it more towards Windows Azure.
- Get internal IT on board, they probably won’t like either of them, so you need to get working on them early.
Steve Ballmer really seems to be struggling to find someone to head up his push to the cloud agenda. Ray Ozzie, the original Azure steward left last year and now Bob Muglia is on his way out. It seems that Muglia and BAllmer didn’t see eye to eye, despite the server and tools business doing very well under Muglia.
I think that one of the problems (I am sure there are many) is that Ballmer is trying to push this cloud thing and the rest of the organization simply doesn’t get it. Just saying ‘to the cloud’, as the cringeworthy MS advert says, is not enouhg to change the culture of all the people, distribution channels, support and partners. STB was doing very well selling server licenses into the enterprise, thank you very much, so why do we need this pesky cloud business?
In the 90’s IBM developed the PC, but didn’t get it. They still wanted fancy PC’s manufactured at high levels of quality and sold through a complex distribution channel and it made sense for all involved, except for the customer who wanted something that was cheap and ‘IBM compatible’. There are parallels between IBM of the 90’s and MS now.
As good as the Azure platform is and as good as Microsoft is at operating large web properties, Azure has been languishing in the last year while competitors have been racing ahead. Part of that languishing is that the entire Microsoft channel, from product strategists to the enterprise developers that code in .NET, simply fail to see what all the cloud computing fuss is about.
Maybe Bob Muglia was one of those.
Dryad, Microsoft’s MapReduce implementation, has finally found it’s way out of Microsoft Research and is now open to a public beta. Surprisingly it is a quiet blog announcement, with no accompanying name change that is typical of Microsoft such as ‘Windows Server 2008 R2 High Performance Distributed Compute Services’ – or something equally catchy. Unsurprisingly for an enterprise software vendor, Dryad is limited to Windows HPC (High Performance Compute) Server – which means high-end tin and expensive licences. While most of the MapReduce secret sauce for the Dryad implementation probably comes from the HPC OS, it is disappointing that there is still no generally available MapReduce on the Microsoft stack on the horizon.
I recall more that a year ago wishing for Dryad (and DryadLINQ) on Azure to query Azure Table Storage (the Azure NoSQL data store) and generally thinking that Azure would get some MapReduce functionality as a service (like Amazon Elastic MapReduce – a Hadoop implementation on AWS) out of the Dryad project. But it seems that Microsoft is focussing on the enterprise MapReduce market for now.
I’m not that sure about the market for enterprise MapReduce and defer to the experts, wherever they may be. I thought that MapReduce was about using cheap resources (commodity hardware and open source licences) in order to scale out compute power. Surely if you have to pay Microsoft and high end hardware tax the case for scale out drops and you are better off just scaling up already expensive servers? I am sure the research market will still go for Hadoop or similar, and maybe Microsoft sees something in the deep pockets of financial services.
Had Microsoft brought Dryad to Azure, as ‘MapReduce as a Service’ then there would be something worth looking into on the Microsoft stack, but until then MapReduce for the masses is likely to remain on Hadoop. Hadoop is the de facto MapReduce implementation for non-specialists and as MapReduce gains traction as a way of solving problems, Microsoft will find it impossible to catch up.
Microsoft has quietly released the November 2010 SDK, without being accompanied the fanfare at it’s PDC launch. One of the big changes to Windows Azure is the VM Role which allows you to upload and run a Windows Server VHD. Although it smells like IaaS, it is not – as described by Microsoft’s Steve Plank,
The way to look at the VM Role is that the entire thing is a Windows Azure application. You don’t send a .cspkg file, but instead, the package is a .vhd file. Now, because these files are likely to be huge in comparison to a .cscfg, Windows Azure has created a method of updating with differencing disks, but that’s just an implementation detail. You can think of a VM Role application package as the .vhd file.
One of the best features about Windows Azure is (was?) that it implemented a PaaS model and forced you to build systems that were architected for the cloud from the ground up. Legacy doesn’t scale and Windows Azure made it difficult to lift and shift legacy apps, while at the same time allowing for a lot of re-use of existing code, skills and even, with SQL Azure, data access and storage.
The VM Role was probably quite easy to implement, after all, web and worker roles are VM’s anyway and was done, apparently, in response to demands from customers. I question whether or not those customers actually understood what they were asking for and now have the option, not just to lift and shift legacy applications, but to build legacy applications from scratch – and that is a problem for cloud computing.
AWS, on the other hand, is unashamedly IaaS and seems to have created an environment for cloud architectures to flourish with all the cloud frameworks that people are enthusiastically building on top of AWS. I don’t think Windows Azure will be able to pull the same stunt – after all you can’t run a Linux instance in the same datacentre as your Azure application.
With the VM role Windows Azure hasn’t built a good IaaS offering, they have taken a good PaaS offering and injected confusion, removed their product differentiation, encouraged bad architectures and corrupted the fundamental DNA of their PaaS offering. Microsoft is really battling to sell Windows Azure and convince people to use the platform – the VM role may seem to be good in the short term, but it does break the product.