New Windows Azure Feature Announced at PDC 2010

This morning, I received a newsletter from the Windows Azure Platform Team. Besides the fact that it’s formatting is horrible as usual since all German umlauts are displayed as some weird unreadable symbol, it contained a lot of new and exciting features for Windows Azure. Also be sure to check out this video which provides a fast overview of new features for Windows Azure.

Extra Small Instances

This is one of the features I was really waiting for. Before this announcement, the smallest instance size was Small, having a price tag of $0.12 per hour. Now there is an Extra Small instance size with $0.05 / hour.

I went ahead and replicated the table from this Microsoft web site to have the most current overview on my blog. This should come in handy, at least for me because I will keep forgetting this stuff.

Compute Instance Size CPU Memory Instance Storage I/O Performance Cost per hour
Extra Small 1.0 GHz 768 MB 20 GB Low $0.05
Small 1.6 GHz 1.75 GB 225 GB Moderate $0.12
Medium 2 x 1.6 GHz 3.5 GB 490 GB High $0.24
Large 4 x 1.6 GHz 7 GB 1,000 GB High $0.24
Extra large 8 x 1.6 GHz 14 GB 2,040 GB High $0.96

As explained in this video, Extra Small Instances share resources (CPU, memory) with other VMs on the same node. Furthermore, the network bandwidth is capped at around 5 Mbps. This is not the case with larger instance sizes, where CPU and memory are not shared and your service can leverage unused bandwidth.

I believe this is a very good idea. Amazon’s smallest Windows instance (Micro Instance) is available at a cut-price $0.03 per hour, but we can’t compare these offerings 1:1 because Azure offers more functionality. We don’t have to pay extra for load balancing services and we don’t have to worry about OS updates etc. Besides, Azure’s Extra Small instance has 155MB more RAM, which could make a lot of difference.

This is why I like this new instance size so much: It means that it just got easier to get a small service running without downtime. By that I mean that I can now pay 2 extra small instances for a small service which gives me the ability to enable rolling upgrades without downtime. This includes automatic OS updates as well as my own updates to my service when delivering new features. This is still cheaper than having one small instance without all these benefits. I would expect this to activate the SLAs also, but I’m not sure about that. This won’t be the case while this feature is still in beta.

Things I Believe Windows Azure is Missing

Lately I was in the comfortable situation of having some time to dig deeper into some features of Windows Azure. While I am really excited about what Azure means to me as a .NET developer who wants to leverage PaaS and not IaaS, I also feel that some very important features are still missing.

Some missing features require workarounds, others are simply showstoppers. For example, this week I hit a wall with Table Storage. Ouch. I was really happy about the approach I used with it and had even already applied some workarounds to my solution when, suddenly and sadly, I had to realize that Table Storage just doesn’t support case insensitive search.

Without going into much detail, let me put all this into a list. While it may seem that this post is essentially a rant about Windows Azure, that is not true. The rant is really only about documentation, see below. Everything else are just features I want to have and I believe the Azure platform needs to have ASAP if MS doesn’t want to get left behind. Some other big players in Cloud Computing are doing a splendid job of throwing new features at developers almost monthly and letting them know as soon as possible.

So all this boils down to: Deliver crucial new features. Do it fast. Let everyone know about it.

Table Storage

There is no support for secondary indexes. Amazon SimpleDB has it. Missing this kind of feature means we will have to store information redundantly, just to be able to query efficiently for them. This results in additional development effort as well as increased storage costs. Since storage is cheap, this is ok. Since when done properly, Table Storage can do an enormous scale out, I am even willing to invest some more time to get this right. So this is not necessarily a showstopper.

There is no support for case insensitive search. This means that I would have to store a lowercase version of whatever I need to search for, together with the version containing the correct spelling.

There is also no way for doing full text searches on the storage. There is a workaround for StartsWith() but none for EndsWith() or Contains(). And I’m not talking about not being able to do that efficiently. I’m talking about not being able to do that. Because the LINQ provider just doesn’t support these kinds of queries. And no, doing that on the client side is not always an option.

So MS, please, don’t tell me that Table Storage is missing all those features by design and that it was always intended to be only a very simple way of storing data. Just don’t. Give it a few more features and make it a powerful No-SQL storage. I’m not asking for making it support all the relational stuff like cascading deletes and the like. I understand that it is non-relational. But don’t stop on half the way. Continue, quickly.

Hosting

Yes I know this one is probably just for devs trying to grok the way Azure works or maybe small startups, but still … hosting a small service on Azure is just too expensive. As already mentioned, this is not a problem when you put your virtual machine’s power to good use, but the pay-as-you-grow model has a flaw here – the inital price might be too high if your needs are too low. Ah yes, Amazon has that, too.

Sending Emails

Did I mention that Amazon has a feature called SNS? This is not sufficient for sending emails to your customers, but it is perfectly acceptable for anything else, including email messaging in case of failure etc. There are solutions for that, but these are merely workarounds.

Caching

While I am happy that there are projects like CloudCache that are based on Memcached, I really hope that support for Velocity a.k.a. AppFabric Cache is coming soon. And by soon I do not mean PDC 2011. If there is no announcement (with specific date) at PDC 2010, I will go with Memcached.

Fixed IPs

IPs seem to remain fixed over the lifetime of a deployment. While this may be true, there is no official statement from Microsoft saying that this behavior is supported. To some, that might seem fair enough since you don’t have to bother about that anyway, right? Well, say you’d have to communicate with some other service that requires your IP to be whitelisted. Not your domain but your IP. Then assume that it will take some time to get another whitelist entry in case something happens to your first IP. You could try to get a ‘backup IP’ whitelisted parallel to your real IP, but this would require another deployment to run on a different production slot, so this is also a clumsy workaround.

And Amazon has the concept of – ah, never mind.

Documentation

Honestly. This is just too hard. Its not surprising the Azure community keeps on providing link lists and compilations of Azure resources. Information is scattered, insufficient and sometimes out-dated.

And I’m getting tired of saying this, but compared to Microsoft’s approach, Amazon’s is really centralized. You find a long list of documentation for every feature AWS offers on the starting page for that feature and from there on, you can follow links to complementary information.

There is a monthly AWS newsletter saying “we are happy to announce”. Well, I am happy if there is ANY way for me to figure out what Microsoft is up to in the next few months with regard to Azure. Why is communication so bad on this topic?

Last time I checked, the official voting forum for Windows Azure Feature Requests lists 8 completed requests and 1 accepted request (secondary indexes for Table Storage). Even then, there has been no further information on secondary indexes since like 11 months. No, let me check that again, this can’t be true … aargg, it is true. There are a lot of other very important requests but none of them made it to ‘accepted’. Does this mean the Azure team is not currently working on any of these feature requests? I hope not! Really, I hope not.

I would like to see that Microsoft uses this platform (or any other means, just DO it) to communicate upcoming changes to developers and decision makers. That way, everybody would be able to plan ahead and be less frustrated. Developers like me would have a central way of being kept in the loop and appreciate new features instead of being angry for not being told.

Only they don’t. So they won’t. So they are not. And we haven’t. So I am not (at least to a certain degree).

And I definitely believe it is not a good idea for MS to keep roadmaps and timelines as secret as possible, wait a whole year until next PDC and only then make information about all that publicly available. That being said, I really hope there will be some interesting announcements at PDC 2010. I need certain new features to make it easier for me to get customers adopt Azure. Otherwise they will rather go with Amazon.