The growth of the cloud computing and cloud based applications over the last few years has spurred renewed interest in multi-tenancy architectures with companies such as IBM actively researching ways of bringing multi-tenancy to the JVM in the cloud in which an application (and its context) serves as a tenant within a shared JVM runtime. Other companies today are also exploring ways to “innovate” in areas of service differentiation, recognizing different classes of customers in terms of cost and quality (performance, reliability, etc), and invariably multi-tenancy plays a significant role in achieving this.
“Multitenancy is the fundamental technology that clouds use to share IT resources cost-efficiently and securely” - Salesforce.com
Whilst multi-tenancy offers many advantages to the service provider in reducing operational cost and improving resource utilization it presents its own challenges in particular how to effectively managing the underlying resources in a way that ensures a certain level of quality of service (QoS) is maintained across different execution contexts. Fortunately various techniques, generally falling under the QoS heading, exist today to help meet such challenges inprotecting, policing (and shaping), prioritizing and predicting consumption within a shared (execution & resource) environment.