“It is what is on the inside that counts.” How many times have we all been told that? Personally, I can’t even remember. However, just because it is perhaps overused and undoubtedly cliché, does not make it any less true. In fact, I rank it right up there with the golden rule as mantras that one should try to live by. But this is ostensibly a cloud computing blog, so what am I rambling on about? Well, it turns out that it’s what is on the side that counts in cloud computing as well!
To explain this, let’s take a look at the process for deploying applications on the cloud today by looking at an example. Consider that I have a basic Java web application that provides an enterprise resource scheduling service. In the normal course of operation, the web application connects to both message queues and databases to service requests. Additionally, a web server usually sits in front of this application and directs incoming requests from clients.
If I want to deploy an application like the above on a cloud, I need a good deal of knowledge about the application. First, I have to know that in order for the application to work I need far more than just an application container. I need a way to deploy or integrate with a web server, message queue, and database. I also need to know how each of the components should be integrated in order to support the needs of the application. Moreover, I need to know quite a bit about the non-functional requirements of the application (security, availability, scalability, etc.), so that I can configure each of the supporting components as appropriate.
While this may not sound like too much to expect, it can be challenging considering that the deployer of an application is unlikely to have insight into each of these needs. In fact, there is no one person in the organization that is likely to have all of these answers. Application deployments are typically the result of significant collaboration that can stretch project timelines beyond what anyone expected. But given the push towards autonomics and automation that cloud is a large part of driving, I have to ask if such intimate knowledge of an application is really required to deploy it?
My honest, yet cautious answer to this has to be no. I mean, why should I have to locate all of the required components for my application before being able to successfully deploying it? Ideally, if I am using an application-oriented cloud management system like I would expect to find in PaaS, it should be capable of application introspection to make many of these decisions for me. If you go back to my earlier example, the PaaS solution should be able to look into my web application and determine via application metadata, or even source code, that there is a dependency on both a database and a message queue. Additionally, if it notices that there is service addressable via HTTP, I would expect to at least be prompted to see if I wanted to include a web server in the application deployment. Ultimately, the introspection of the application should result in a proposed deployment architecture for my application that includes both the necessary components and the required integration between those components.
On top of all of this, I would expect that a number of non-functional configuration items could be determined via application introspection as well. If metadata in my web application indicates that I am using basic authentication to protect my enterprise scheduling service, the PaaS solution should be able to configure the application container environment appropriately. Even more interesting would be the ability to specify metadata in my web application that indicated scaling requirements and have the cloud management system automatically act on that!
Is this really too much to expect? I do not believe so. Many talk about the very nature of PaaS being one rooted in application orientation. Well, I think you can only get so far down that road without putting forth solutions that possess an inherent awareness of the applications that are being deployed. In other words, it is what is on the inside of the application that counts and PaaS solutions need to know that!