The second area where cloud computing really comes into its own, and the one for which the concept was developed originally, is to handle auto-provisioning for horizontally scaling applications. That is, it allows application workloads to increase their capacity-handling ability by spawning new instances for themselves.
On a small scale, many Web applications, due to their stateless nature, do this within a single system by spawning new thread workers to handle additional connections. An Apache Web server might start with eight listeners ready to service requests. But as those threads become exhausted, it automatically starts new threads to handle additional incoming connections so that it is able to scale within the confines of a single server.
In a cloud computing environment, that same application might sense thread exhaustion approaching on a system-wide level (or based on other metrics such as a lack of free memory or a loss of performance). It would use then use an API exposed from the cloud computing platform to signal the cloud management system to provision a new copy of the system that was calling it—essentially cloning itself on the fly. In a matter of seconds, a new virtual server, identical to the first, would be up and running, joining its parent in servicing incoming requests. This child or clone system would likewise spawn new threads internally, as needed, and then if it too sensed exhaustion would call the cloud platform to create yet another new system to handle even more threads.
In this way, the application can grow itself almost infinitely (within the hardware limits of the entire cloud platform) as needed, on the fly, automatically. Then, as individual systems become idle, workloads die down, one at a time. A system can signal to the cloud management system that it is no longer needed, and the system will be powered off and destroyed, as it was simply a stateless clone. That frees system capacity for other applications and workloads that may need to take advantage of the spare capacity.
As we can see, cloud computing is massively powerful, especially with the bulk of today's public and enterprise applications being written in a stateless manner in order to take advantage of Web protocols and end user interfaces. Web applications are especially adept at leveraging cloud computing's scalability model, and most large-scale Web applications leverage this elastic expanding and contracting of capacity today.
Many new NoSQL models are beginning to emerge, demonstrating that databases, in addition to application front-end processing nodes, may soon benefit from similar models. Companies can certainly leverage these models for internal applications as well as public-facing ones. However internal applications rarely need to scale beyond a single system, so it is quite rare to find private clouds being leveraged in quite this way.
The dangers of cloud computing come in the form of additional complexity above and beyond normal virtualization. Cloud computing's ability to create and destroy systems rapidly can make it tempting for users to attempt to use cloud resources as if they were persistent systems, which they can be made to be. But that can result in data loss.
Possibly the biggest cloud concern is a human one: the increased likelihood of experiencing uncontrolled system sprawl as end users wildly spin up more and more new systems. Because these systems are created by end users and not IT, they are probably not tightly controlled and monitored. That leaves systems in a rogue and oft-forgotten state. This can lead to a maintenance and security nightmare as systems go unpatched and uncared for. It also increases risk and drains resources.
And most worrisome is the possibility that forgotten systems won't have proper licensing. Tracking and reporting on auto-provisioned systems carries process risk caused by the huge shift in how systems are created. IT departments are accustomed to the heavy licensing processes necessary to maintain compliance. But most business units are not equipped to handle these processes.
There are accommodations for the licensing needs of cloud computing, but this is extra complexity and management that must be addressed. Allowing systems to exist without direct IT department oversight clearly carries risk of a potentially unforeseen nature.
Private cloud ownership brings many exciting possibilities, but it is clear that these benefits and opportunities are not for everyone. They cater to larger businesses, to those with good process control. They are best for companies running applications that can take advantage of the system-level elasticity and those needing large scale ad hoc system creation and destruction.
In my opinion, most large enterprises will find limited use for the private cloud. Smaller organizations will rarely find the private cloud to be advantageous in the near future, if ever.