As the ideas and concepts behind PaaS platforms continue to evolve, it is becoming quite clear that those platforms will consist of many facets. These systems will consist of application runtime services (both shared and dedicated), application modeling capabilities, and runtime monitoring to name but a very few. While all of these will be necessary to deliver a truly effective PaaS platform, if you ask the casual cloud follower what they identify as the key characteristic for PaaS, I would be willing to wager that 9 out of 10 say runtime elasticity.
At this point, consumers form an implicit link between cloud computing and elasticity. In other words, you cannot label something as a cloud if it does not deliver some layer of elasticity. PaaS platforms are no different in that users expect elasticity in the services they deliver, namely the application environment. While the end-user expectation is no different, achieving this result is much more involved once we move up the stack away from IaaS towards PaaS.
Elastic runtime application environments are not a new notion. There are existing solutions that enable dynamic request routing based on application performance goals and application importance relative to business goals. However, for the most part these systems work with a defined set of application infrastructure. In other words, users deploy and configure the application infrastructure, and then they hand it over to the management system. Over time, the management system makes use of the resources to which it has access in order to meet application and business goals as defined by users. This may mean starting up new application instances, moving those instances around, or even terminating some application instances.
The capability described above is definitely valuable. I mean, who wouldn’t want to align application performance with business goals, right? However, PaaS systems promise to go a step further and eliminate the need for a static pool of application infrastructure resources. PaaS platforms should not only manage application instances and placement, but also the placement and instances of the supporting application infrastructure. In this way, users achieve an even greater level of elasticity as they are not bound by the software supporting their software!
From the consumer point of view, this moves them toward a low-touch, autonomic, highly performing application runtime. For providers out there looking to deliver a PaaS solution, this implies quite a bit of complexity. As just a small sampling of what PaaS platforms will need to do in order to enable truly elastic application runtimes, consider the following:
- PaaS platforms must provide a means to configure application performance goals and relative importance. This means users should be able to configure application goals and metrics (i.e. response time, throughput, heap usage, etc.), in addition to establishing the importance of a given application meeting its goals relative to other applications. After all, customer-facing applications are likely to be more important than an internal employee directory application.
- PaaS platforms must be able to effectively monitor all aspects of the application runtime in relation to the policies established by the user. The system should do this without affecting the runtime and consuming resources otherwise needed by the applications.
- PaaS platforms must be able to scale up and scale down the application environment based on the metrics it gathers from monitoring activities. As I said above, this means that the system should be able to control both application infrastructure and application instances and placement. This is made more complicated by the fact that application infrastructure is made up of several distinct units (web servers, controllers, container nodes, databases, etc.), and the PaaS system must understand how scaling up and down each piece relates to overall application performance. In addition, it is likely to need this knowledge for a heterogeneous set (from a vendor makeup standpoint) of application infrastructure.
- Ideally, PaaS platforms will also be able to scale up and down the underlying compute infrastructure. If not, we end up with a greater degree of elasticity than what solutions offer today (because we can dynamically control both applications and application infrastructure), but we have really just pushed the static pool of resources down the stack. Rather than a static set of application infrastructure resources being the limiting factor, the underlying compute resources become the constraint.
Is this sort of unified, far-reaching resource management a requirement to achieve the promises of PaaS elasticity? Ultimately, I believe the answer is yes. In the short-term though, we will see emerging PaaS platforms that meet some of these aims, but certainly not all. As the industry matures, we will no doubt get to more robust and complete PaaS platforms. As a user, this means look for tactical advantages you can gain from PaaS platforms now (or in the short-term), and keep any eye on the direction of the market to determine how it may align with your longer-term strategic aims.