My Take On Windows Azure( Cloud Computing in general : Part 1)
In PDC ’08 One of the most important announcements that was made was about Microsoft’s entry into cloud service provisioning .
Well back then , it was said that roughly Windows azure can be called “EC2 on steroids!!” And whether this statement is 100 % or not, Time will tell…( time as in time after PDC 09 when MS plans to go Live with azure. Though i believe the statement to be 100% true .)
Windows Azure is Microsoft’s Cloud Offering. Despite being a “Late Entrant” in offering, It is very developer centric. Microsoft says, “Adhere to a very simple framework, and we will take care of scaling your application”. What this means is , You design your application such that it can scale well on demand. This designing is not that difficult to understand.
A traditional application can be chalked as a client server app. In which you have
1.) The UI layer ( i.e. the Presentation layer)
2.) The Services layer( i.e. the business logic layer")
3.) The Data store. (Databases, Even Flat files can be the data stores, depends app you have designed 🙂 )
The App has been designed with what you call keeping ”n-tier architecture ” in mind.
Fine , Nothing new as of now. I have my app designed and developed. I now would be deploying the web app on some of the hosting provisioned for me … Now in the initial stage , when the app had to be deployed ,It was assumed that one decent server grade machine is enough, say You have setup the entire app on one machine….
Now since the app is fairly new , lets assume that there is not much traffic.
One fine day, Your app gains popularity and suddenly you see a surge in traffic. Some of your clients might get “denial of service” issues, or worse , witnessing such huge loads, the server just crashes …
Now What would you do? …… the next logical step would be deploying the different components on different machines( assuming that server was crashing due to huge loads , CPU usage etc )
Wow… I am good now,I am happy now.
In some days you observe that you need more servers say three times more the number of machines …. Now as a business man, this would be a concern for you , seeing that you cannot always keep on investing in new hardware every time you observe a surge in demand of your app and this upward trend might not even be predictable,
Say you provision hardware for 1 lac simultaneous users but, suddenly there is a drop in demand ( for various reasons 🙂 ) now you see that you might not need so many servers.. what do you do , with all the servers already purchased ? And many more such concerns might arise.
So an alternate way of solving this issue would be renting servers. That way, you wouldn’t be actually buying servers. You need 10 servers on rent you take these servers on rent ,you use them for the time frame of whatever is the lease period, and renew the lease as per your requirement.
Wow this works Right….. So Do i need to look at the cloud ???
Yes you should…. Infact if your Line of business (roughly) fits in the above mentioned scenario, You should consider your app to be provisioned on the cloud.
Reasons to be looking into provisioning your app on cloud: reduction in costs and huge reductions in costs ( Keeping long term in view)
How You say? Let me Explain :
Say your app is seasonal in nature.
Seasonal apps are apps that are typically accessed in some timeframe of a week, month, year etc…
So Renting all those servers would be a bad investment , coz you would not be utilizing the infrastructure for the timeframe you pay for. Say all those servers are idle for 30 days a week and suddenly on the last day of the month, the load shoots up , and the server is utilized.
Say daily , you just need one instance of your app to be running , but on the last day of the month , for 20 hours that day you need 10 instances of your app running, This would not be possible in the renting the server kind of scenario. You either rent 1 server or you rent 10 servers.
Solution to this would be utility computing, meaning pay for computing as you go. So in above mentioned scenario, Provision your app on cloud, and when you do that you can actually set the no of server instances you want the cloud provider to run and also an upper limit , saying i cannot afford more than 10 server instances to be running.
This brings us to an interesting definition of cloud computing :
Cloud computing is where the computation power you want is restricted not by hardware but by how much you can afford.
Meaning The cloud providers can actually provision 1000s of server instances for you, but the costs involved would be astronomical. whereas running a few instances , say 10 instances would be reasonably cheap than renting those 10 servers .
So with this i would like conclude this post ….Much more to come on cloud computing…….