Cloud computing is about hardware-based services (involving computing, network and storage capacities), where:
- Services are provided on-demand; customers can pay for them as they go, without the need to invest into a datacenter.
- Hardware management is abstracted from the customers.
- Infrastructure capacities are elastic and can easily scale up and down.
There is a powerful economic force behind this simple model: providing and consuming cloud computing services generally allows to have far more efficient resource utilization, compared to self-hosting and data center type of hosting.
This is especially true for bursting into cloud scenarios when cloud consumers use elasticity of the cloud services to handle any spikes they might get. More information is available in article Why is cloud computing important for us?.
Obviously, consuming raw hardware capacities may be too hardcore for some consumers that merely want to have a scalable storage. So it is natural that cloud computing services already got some diversity around them:
Infrastructure as a Service (IaaS), where customer gets raw hardware resources (i.e.: virtual machines with OS of choice). Examples:
Platform as a Service (PaaS), where service provider builds a platform to simplify solving some technological tasks. This simplifies life for the customer, but also comes with a lock-down cost. Some providers:
- Microsoft Windows Azure - .NET driven and Microsoft-owned cloud infrastructure, which is behind Amazon in some areas.
- Amazon Web Services - collection of scalable infrastructure pieces for building your cloud application.
- Google App Engine - Python-based cloud framework.
- Amazon Elastic Map Reduce - Apache Hadoop hosted on Amazon cloud services (EC2 and S3)
Software as a Service (SaaS). At this level everything is way more simple for the customers to consume, since they are provided with actual services generating business value to them. Service providers handle all the technological complexity and provide the support as needed.
From the development perspective, cloud computing is a brand new field (which is especially true for the .NET world). So there are no established patterns and pactices in the field yet. However, common development guidelines tend to work quite well:
- Component-Driven Development with Inversion of Control Containers
- Test-Driven Development
- Continuous Integration for the projects
- Separation of Cross-Cutting Concerns
- Cloud Computing article series
- Why is Cloud Computing important for us?
- Cloud computing: a personal review about Azure, Amazon, Google Engine, VMWare and the others by Joannes Vermorel
- Cloud Computing on Wikipedia
To be fair, below is what Google thinks to be popular in the area of Cloud Computing based on the AdSense spending: