The objective of this post is to highlight some of the key considerations in developing cloud applications running on Windows Azure. I’ll show them in a series of blog posts trying to embrace all the key aspects of cloud apps in a comprehensive manner.
When it comes to cloud applications on Windows Azure, we usually talk about this kind of architecture. Web roles take requests form clients. They are load balanced based on the current workload. CPU/IO intensive processes should be handled by worker roles. Web and worker roles can communicate with each other via Azure queue. Different types of data can be stored into different storages; BLOB for large files, Table for structured data and Drive as a NTFS file system. in addition, relational data can be stored in SQL Azure that is a RDBMS in the cloud with a few limitations. Cloud applications can delegate the task of user authentication to Access Control Service. It handles claims based authentication gracefully using industry standards like SAML, WS-Trust etc. Last but not least Service bus integrates cloud apps with other services on premise or in the cloud by providing features like routing, queue and so forth. Looks good?
To me it looks like more about cloud platform architecture, less about cloud application architecture. I’m interested mainly in application architecture in and of itself. What does the cloud application architecture look like? How does it differ from traditional applications? What should I care about in designing my cloud apps? These are the questions that I’m trying to answer.
But before jumping into the details, let’s step back and see some fundamental attributes of the cloud. To begin with, why do we consider moving the existing apps up to the cloud? There have to be a number of benefits in doing that. I’ve gone through lots of white papers, presentations and web articles then consolidated them into the following 5 elements. I’m not going to go into all the details as you could have heard about them in many presentations.
1. Dynamic (Elastic) Scalability
Scale-out feature that absorbs the peak workloads.
2. Higher Availability
Replications with globally distributed topology
3. Simplified Management
Automated management of HW as well as SW installation, upgrade etc.
4. High volume data
Hundreds of terabytes of data with features like CDN, memcache, replica etc.
5. Cost Efficiency
No big investment upfront. Pay as you play.
At the same time, there’re a number of concerns that most of the users or developers worry about in cloud computing. Sooner or later we’re going to have to deal with them.
How can I protect sensitive data like credit card info?
How can I integrate cloud apps with existing assets on premise? SSO?
How can I customize UI, data schema etc for each customers especially in multi-tenant environment?
4. Flexible Management
We share HW and SW with other customers. What am I supposed to do if something bad happens to my apps?
5. Data Portability
I might have to move our data into different platform. How can I do that?
Does it meet the industry regulations?
I’m going to address these concerns and other common problems in next few posts.