A couple of days ago I started playing around with Azure applications and tried to review the whole process of developing applications in the Cloud. First thing that I have noticed is that the Cloud brings additional complexity to our development and especially testing part of the whole app lifecycle and I have tried to talk about this with several colleagues developers or IT experts. Their opinions were different and some of them even thought that debugging and testing of the Cloud apps will not differ much from the way we are doing it for distributed applications (in local environment).
Although Microsoft is definitely moving into the right direction by bringing us the Cloud environment to a local computer (yes you get local services such as development storage and development fabric as a part of Windows Azure SDK) but things will not be that easy at the end.
I personally think we will have to be especially careful about the design and architecture of our applications focusing on the mere fact that everything we build for the Cloud will not be used just by 1 or 10 users but potentially by 1000 or even 10.000 users... And that is a whole new ball game!
Some of the things that might be problematic as I see them:
- Multi-tenancy of our applications - how can we debug locally something that will at the end be used by thousands of users on multiple cloud OSs concurrently?
- How can we rely on database consistency in the sense that we will expect some data being returned from the service? The application living on some other instance of the cloud OS might not store everything we need in the data storage, so how can we debug that? A lot of error handlers and exceptions, but can we catch all?
- What do we do when the service goes down completely, i.e. total crash? As I have read all the services in the Azure Cloud work through queues and they store all non-processed requests? So what happens when we restart the service and we get hit by millions of requests simultaneously on lots of servers? Can we test those scenarios?
- How can we test all the 3rd party services we intend to use in our Cloud application? At the end the benefit of such applications is also simple services composition, but we cannot recreate all the services locally, so how do we test all scenarios in the Cloud?
- How can we actually debug applications in the real-time environment? We cannot attach to a process in the Cloud, so we will have to rely on logs and other data but can everything be debugged in such a way? Isn't that really time demanding?
What is your opinion? As I said a lot of developers have different ideas and I would like to hear your comments ...