We’re in year 2 A.C. (anno cloud) on the Microsoft Application Platform. Lots of things are now a bit more clear than they were at the beginning of this era, but some are still to be clarified. Based on some recent feedbacks I got from software architects and developers, I came to the conclusion that it would be a good idea to produce a brief report on how does Azure impact our work in its second year of commercial availability.
Please note this is ongoing work. Today’s version of my analysis is merely a starting point. I’m not claiming it’s exhaustive and it very likely that it will be updated many times. In fact, your feedback would be greatly appreciated. By the way, I’m delivering today a talk at the IT Camp conference in Romania based on the ideas presented below.
This post has also been published on AzureCloud.eu, a site I strongly encourage you to visit if you’re interested in talks about Azure.
So, here it goes…
1. Azure Current Status
First of all, let’s start with a discussion about the big picture by answering the following question: what is the cloud computing offering on the Microsoft Application Platform?
The short answer is the Windows Azure Platform, but that’s way too generic. To get into more details, I’ll start with a bit of history. The first public announcement (and the first CTP) of Windows Azure occurred in October 2008 during the PDC. The next year brought the announcement about SQL Azure (the relational database in the cloud) and an updated CTP. The platform became commercially available in February 2010 and got later in the same year some significant updates.
Now’s a good time to be more specific. When we talk about Windows Azure, we really talk about four major components:
- Windows Azure with the following functionalities:
- Compute – web roles and worker roles
- VM Role (currently in BETA) – deploy custom Windows Server 2008 R2 images
- Extra Small Instance (currently in BETA)
- Storage – blobs, queues, tables, and drives (NTFS VHDs mounted into compute instances)
- Content Delivery Network – broad reach via globally distributed locations
- Virtual Network
- Connect (currently in CTP) – secure network connectivity between on-premises and cloud
- Traffic Manager (currently in CTP) – load balance traffic to multiple hosted services
- Management
- SQL Azure with the following functionalities:
- Database – relational database service built on SQL Server
- Reporting (currently in CTP) – develop and deploy operational reports on the cloud
- Data Sync (currently in CTP) – data synchronization service built on Sync Framework
- Management
- Windows Azure AppFabric with the following functionalities:
- Service Bus – secure messaging capabilities
- Access Control – standards-based service for identity and access control
- Caching – distributed, in-memory cache service
- Integration (will be CTP in 2011) - BizTalk server integration capabilities
- Composition Model
- Management
- Marketplace
Well, that’s about it. Windows Azure seen from 10000 feet as it is today. As you can see, it’s an evolving platform with some components already available in release form and others as BETA or CTP. It’s also interesting to note that, while it started as pure PaaS, Azure is now also moving into the realm of IaaS (see this post for a detailed discussion about XaaS). Another interesting discussion revolves around the availability of Windows Azure in your own backyard (commonly referred as Windows Azure Platform Appliance). Despite the fact that Microsoft talks quite often about it, it’s nowhere to be seen yet.
Now that we have an overview of the platform let’s see how can we use it to architect the next generation, cloud-based applications.
2. Architectural Challenges
In the years that passed since software architects started to take into consideration cloud-based approaches for their solutions, one thing became very clear: there are lots of challenges and questions to be addressed. There is no doubt in my mind that on the long run the cloud will become ubiquitous. It has certain advantages in terms of flexibility, scalability, and availability that simply cannot be matched by on-premises solutions. On the other hand it also has some shortcomings that will most probably lead to a hybrid world (at least in the foreseeable future) where our software will run partly in our own backyard and partly in the cloud.
Consequently, as we advance into year 2 a.c., software architects have to address the following challenges (I don’t claim this to be a complete list, it one based on my practical experience):
- The pace of evolution – as you can see in the Azure status I presented above, the cloud environment evolves much faster than the traditional on-premises backend environment
- The new layer of complexity – instead of a pure on-premises world, architects now have to think at this level in a bi-dimensional way (at this point in time, hybrid approaches seem to be the favored by IT managers)
- Perception – issues like security, reliability, and cost are often not that well understood; more than that, recent high-profile worldwide incidents in the cloud industry (Amazon, Sony, and others) did a lot of harm when it comes to perception
- Suitable design patters – using the cloud for suitable scenarios (avoiding the technology for the sake of technology syndrome)
- Out-of-the-box thinking on traditional cross-cutting concerns
- Storage – relational vs. No-SQL
- Communications – SOAP vs. REST, messaging paradigms, state/session management
- Security – identity, service security
- Decoupling – asynchronous patterns
- Parallel computing – decomposing the universe of the problem to harness the full power of the cloud
- Caching
- Data management – backup, archiving, ETL processed, master data
- Instrumentation
- Operations
To be very clear, these are not the only challenges to be addressed. These are merely the ones that come with the cloud, in addition to the large number of traditional ones that software architects have to face.
Keeping these challenges in mind, let’s move one step further and discuss about designing applications for the cloud.
3. Designing Applications For The Cloud
The first thing we have to state when it comes to cloud applications is that we can identify four major situations (the terms native, full migration, partial migration, and forced migration are my own – they are not currently used by Microsoft to refer to the situations described below; I use them because I feel it’s easier to identify this way each individual case):
- The application is designed from the ground up for Azure (native development)
- The application already exists and it’s redesigned to work on Azure (full migration)
- The application already exists and only parts of it are redesigned to work on Azure or new components that work on Azure are added to it (partial migration)
- The application already exists and it’s moved as-is into Azure (forced migration)
It’s pretty obvious that each situation has its own advantages and disadvantages. Up until now, based on my personal experience, the most common ones are native development and partial migration. Somehow, this is in line with the overall evolution of the entire cloud industry in general and cloud perception in particular. The most likely parts of a company’s application infrastructure to move into the cloud are right now the non-critical ones. Most companies have this approach because they recognize the value of the cloud as an application platform (PaaS) but they are not yet confident in their capacity of handling all the new stuff that’s out there.
The table below points out some of the strong points and some of the weaknesses for each of the four situations enumerated above:
| Approach | Advantages | Disadvantages |
| Native development | - Harnesses the full power of the cloud
- Allows many architectural approaches
| - Higher learning curve
- Depending on the number of native Azure features used, leaving the cloud might be tricky
|
| Full migration | Same as native development + - Enables redesign on some sub-optimal features
| Same as native development + - The effort might not pay off
- Replacing some architectural decisions with ones more suitable for the cloud might be very difficult
|
| Partial migration | - More manageable than full migration
- Enables you to concentrate on fewer cloud features, shortening the learning curve
| - The hybrid environment might be difficult to implement and operate
|
| Forced migration | - Minimizes any migration effort allowing you to move the application into the cloud in the shortest time possible
| - Usually ignores many of the features, using the cloud in as IaaS way rather than an PaaS way
|
Regardless of the approach, you will have to address the most part of the architectural challenges I talked earlier about. The Cartesian product of the architectural challenges and the application design cases gives you a pretty accurate image of what it means today to design and develop for the cloud. Although at first sight it might look like a daunting task, keep in mind that the reward is significant. Do things right and you’ll get a solution that makes all the powers of the cloud work in your favor.
4. Harnessing The Cloud Infrastructure
Finally, this discussion has to refer to some of the IaaS capabilities of the cloud. I’ve seen in the past two years quite a few cases where companies were not ready yet (for countless reasons) to develop applications for the cloud, yet they found great value in some of the platform’s IaaS capabilities. To name just a few:
- Massive (and parallel) processing
- Content delivery
- Storage (for backup and/or archiving)
Well.. this is it. I tried (and hope that I also succeeded, at leas to some degree) to give you an image of Microsoft’s cloud computing platform as it is today, from the point of view of a software architect. Concentrating on application development, I left out on purpose some of the other important components of Microsoft’s cloud strategy: Exchange Online, SharePoint Online, Lync, BPOS, Office 365. The main reason was to keep this post at a manageable size 
Anyway, as I mentioned at the beginning, this is and will be an ongoing effort. Most probably I will update (and extend) this report several times in the months to come hoping to transform it into useful tool for any software architect that needs a general view on how’s life evolving on Windows Azure.
I’ll keep you posted…