<p>In most IaaS cloud computing environments, the unit of deployment is the image that gets deployed (or runs) on a virtual machine. Each image typically comprises operating system software, dependencies, libraries, and utilities, and also the application middleware and software. So, deploying an image results in a complete software stack. It is then the responsibility of the developer (or IT operations) to select the correct image and make the necessary customizations and additional setups.</p><p>The problem with this approach is that it results in an explosion of base images, each trying to cover one of the various combinations possible for various software stacks. The other problem is that the customization and setup of images can be non-trivial, resulting in various scripts, patches, and custom tweaking that can be difficult to maintain and keep current.</p><p>Fundamentally, the issue is that workloads tend to be built on standard stacks but contain variations. These variations can be customization information to various ways in which some parts of the stack can be configured. The resulting software combination, including the VMs running these services constitute what is called a workload topology.</p><p>Typically, fixing a workload topology for a particular business process can be difficult because non-functional requirements for example, security, privacy, scalability, resiliency, and so on vary with the purpose of the workload. For instance, deploying an expense reimbursement web-based application requires a very different topology if it is to be used by a local company with about one hundred employees than if it is to be used for a world-wide organization with thousands of employees that are geographically distributed.</p><p><a href="http://www.wired.com/insights/2012/12/virtualize-your-pattern/">Keep reading...</a></p>