Developing scalable applications is based on several techniques, but all of this techniques are connected in some way. They're all using compute power of distributed computers. One of the most popular solution is Cloud Computing which is a step forward from Fabric, Grid and Cluster Computing which are using distributed machines, but there are not scalable capabilites in them.
This new technique haven't growed up in one day. It's all about evolution. It all started from SOA (Service Oriented Arhitecture) - which is model of organizing software into loosely coupled separate components which are talking together through contracts. Many companies started to rebuild their solutions to work in that way. It's easier to build and maintain systems that have been built from few of smaller blocks. Another step of evolution were fast Clusters which are offering big amount of compute resources. But quickly it has turned out that these clusters are generating really big costs, so companies that owned them tried to found solution for this. This solution is today called Cloud Computing - which is renting compute and storage resources to other companies or even individuals.
Every successfull application sooner or later will have to face the "Internet scale". It is very important to prepare services for this effect. Applications must be scalable enough to serve millions of users in the same time. Developing this kind of applications isn't trivial, and there are many things that must have been taken into account by architects during planning architecture of whole system.
There are several models of cloud services and many vendors. It's hard to decide which company or which model would be best for current requirements. Cloud isn't solution for everything - there are some types of applications which would benefit from cloud solutions:
- applications with big nonstructural data
- streaming media content
- SOA components
So only when we have all of this mentioned above elements we can name our solution as a Cloud.
- On-demand self-service. A consumer can unilaterally provision computing capabilities, such as server time and network storage, as needed automatically without requiring human interaction with each service provider.
- Broad network access. Capabilities are available over the network and accessed through standard mechanisms that promote use by heterogeneous thin or thick client platforms (e.g., mobile phones, tablets, laptops, and workstations).
- Resource pooling. The provider’s computing resources are pooled to serve multiple consumers using a multi-tenant model, with different physical and virtual resources dynamically assigned and reassigned according to consumer demand. There is a sense of location independence in that the customer generally has no control or knowledge over the exact location of the provided resources but may be able to specify location at a higher level of abstraction (e.g., country, state, or datacenter). Examples of resources include storage, processing, memory, and network bandwidth.
- Rapid elasticity. Capabilities can be elastically provisioned and released, in some cases automatically, to scale rapidly outward and inward commensurate with demand. To the consumer, the capabilities available for provisioning often appear to be unlimited and can be appropriated in any quantity at any time.
- Measured service. Cloud systems automatically control and optimize resource use by leveraging a metering capability at some level of abstraction appropriate to the type of service (e.g., storage, processing, bandwidth, and active user accounts). Resource usage can be monitored, controlled, and reported, providing transparency for both the provider and consumer of the utilized service.