This is a typical question I get quite often, and therefore I decided to write a blogpost to get all the facts straight and talk a bit about the cons about running workloads in Azure and why it some cases is not possible or not the best option. But note there are many use cases for when to use Azure, but I just want to get people aware of some of the different limitations that are there.
So first of, what is Azure running on? the entire Azure platform is running on top of Windows Servers with a modified Hyper-V 2012 installed, and also since Azure is a PaaS/IaaS platform, Microsoft managed all of the hardware and hypervisor layer. Azure was built on 2008 R2 originally and now 2012 it still only supports VHD disks.
Virtual machines sizes in Azure are predefined, meaning that I cannot size a VM based on what I need, I can only use what Microsoft has predefined (Which you can see here –> http://msdn.microsoft.com/en-us/library/azure/dn197896.aspx ) and also depending on the VM instance size we have predefined how many data disks we can attach to the VMs.
(FOR INSTANCE A4 HAS A MAXIMUM AMOUNT OF 16 DATA DISKS (1 TB EACH) meaning that we get total of 16 TB storage space to a virtual machine. This is of course with the use of storage spaces)
Microosft Azure at the moment supports 3 types of Windows Server OS types (2008 R2, 2012 and 2012 R2)
Microsoft also has a list of supported Windows Server workloads in Microosft Azure –> http://msdn.microsoft.com/en-us/library/azure/dn197896.aspx
And also note that Azure VM’s are mostly using AMD Opteron based CPUs as well, which has a lower performance then regular Intel XEON based CPUes.
So what issues have I seen with Azure when designing workloads
1: Laws and regulations (for instance in Norway, we have alot of strict rules about storing data in the cloud, so be sure to verify if the type of data you are storing can be placed outside of contry.
2: Need for speed (Azure is using JBOD disks and has a cap of 500 IOPS pr data disk, if you need more disk speed we need to use Storage Spaces and deploy different raid sets. But there is just a theoritical speed up to 8000 IOPS. (Which is about a SSD speed) also note that this is AMB based CPUs, if you have a application that really CPU intensiv you might see that Azure is not adequate. NOTE: that Azure is coming with a new C-class which is built up with Premium Storage, which has over 30,000 IOPS and is coming with a Intel based CPU.
3: Graphic accelerated applications/VMs (Since we cannot do changes to the hardware, and Microsoft does not have a option for choosing instances with hardware graphics installed, this is still an option that requires on-premise hardware
4: Unsupported products (If we for instance want to run Lync or Exchange Server, these are not products which are supported running in Azure and therefore require an on-premise solution)
5: Specific hardware requirements (If you have a VM or application that requires some specific hardware using com-ports or USB attachements)
6: Requires near zero downtime on VM level (fault tolerance) Azure has a SLA for virtual machines, but this requires that we have two or more VMs in an availaibilty set this will allow Azure to take down one instance at a time when doing maintance or fault happening in a physical rack/switch/power. There are no SLA for single virtual machines instances, and when maintance is happening, Microsoft will shut down your VM there are no live-migrations in place.
7: Very network instensiv workloads (Again there are bandwidth limits on the different virtual machine instances, and if you also require a S2S VPN between there are also a cap on 80 MBps on the regular gateway. There is also express route option which allows for a dedicated MPLS VPN to a azure datacentre. And also important to remember is the latency between your users and azure datacentres. This can give you a quick indication of high the latency is between you and Azure –> http://msdn.microsoft.com/en-us/library/azure/dn197896.aspx
8: Applications that require shared storage in the back-end( for instance clustering in many cases require shared backend storage which is not possible in Azure since it is bound to a virtual machine as a disk)
9: Stuff that comes in finished appliances (unless the partner has their product listed in Azure marketplace)
10: requires IPv4 and IPv6 (IPv6 is not supported in Azure)
11: Network based solutions (IPS/IDS) (Since we are not allowed to deploy or change the vSwitch which our solution runs in Azure we are not able to for instance set up RSPAN which allows us to use IDS technology in Azure)
These are some use cases where Azure might not be a good fit, I will try to update this list with more, if anyone has any comments or things they want me to add please commect or send me an email msandbuATgmail.com