Platform-as-a-Service (PaaS) model of cloud computing

Platform-as-a-Service (PaaS) model of cloud computing is one where an entire platform for running some kind of applications is available as a service over the Internet. What does that really mean? Say, you want to run a Java web application in the cloud. Then, a platform that will run it would need to contain following softwares – Java compiler, Java runtime environment, different libraries that are needed in your application, a web server. If your application uses a relational database, then the platform needs to provide such a database as well. What about Python web applications? A platform that supports them needs to contain following softwares – a Python interpreter, various Python libraries required by your application, a Python virtual environment, a web server. What if you are interested in running a software such as a MySQL database server or a MongoDB server in the cloud? The platform for running these would need to include corresponding softwares (MySQL server and MongoDB server), enough storage, and libraries that perform appropriate authentication/authorization over these softwares, and so on.
Thus the essential element of PaaS model of cloud computing is the notion of a platform that contains all the softwares that are required for running some specific kinds of applications. This model contrasts sharply with the Infrastructure-as-a-Service (IaaS) model of cloud computing where only the infrastructure piece is available as a service over the Internet. What does that mean? It means that you will be able to only get a virtual machine (VM) with your desired operating system running on it. There won’t be any compilers installed on it, there won’t be any runtime environments installed on it, neither will there be web servers. It is up to you what you want to turn the infrastructure (virtual machine) into. You can turn it into a VM that runs Java web applications, or you can turn it into a VM that runs a MySQL server, or make it a VM that runs scientific applications. By design PaaS systems/models are opinionated as they want to provide a very specific experience to its users. On the other hand, IaaS systems/models provide lot of flexibility to its users.

Why are PaaS systems attractive?

PaaS systems are attractive to those who are traditionally development minded; those who are interested in designing applications than to figure out operational details about what it takes to deploy these applications. IaaS systems on the other hand are attractive to those who are more operations minded and want to have complete control over the operational environment of their application.

PaaS categories

Based on our recent research, we have come up with the following categorization for PaaSes.
– PaaSes for applications written in specific languages (Java, Ruby, Python, etc.) (Heroku, Google App Engine, Amazon Beanstalk, Azure App Service, IBM Bluemix, Engine Yard, Jelastic) (This category has also earned a new name called “aPaaS” – application PaaS)
– PaaSes for pre-packaged softwares such as MySQL, MongoDB, Cassandra (Bitnami, Morpheus, OpenStack Trove, OpenStack Murano)
– PaaSes for applications having specific capabilities. For example, applications that use only a relational database backend (Caspio, Mendix)
– PaaSes that are available for private clouds (Cloud Foundry, Apprenda, Flynn)
– Open source PaaSes (OpenStack Solum, Deis, Dokku, Flynn)

Criteria to evaluate PaaS systems

We have also defined following criteria to evaluate different PaaS systems.
  1.  Ability to support applications written in different languages (Java, Python, PHP, Ruby, NodeJS, etc.).
  2. Ability to support application integration with native cloud services (load balancer, relational and non-relational databases, object storage, DNS, monitoring, logging).
  3. Extensive collection of application logs (build logs, deployment logs, run time logs).
  4. Ability to easily extract application logs.
  5. Ability to define and manage multiple application versions.
  6. Tools available for local development.
  7. Integration with source code systems such as Github, Bitbucket, Subversion (public as well as private).
  8. Accessibility (is there a CLI or only a web console? is there a API? are there all three – Web console, CLI, API).
  9. Ability to support deployment to multiple IaaS backends.
  10. Extent of support available for developing and deploying applications by individual developers and teams of developers (role-based access control, fine-grained permissions, service accounts, etc.).
  11. Integration with IDEs.
  12. Ability to support Docker-based applications (since Docker is becoming central to application build and deploy workflow).
  13. Ease of application scaling.
  14. Fault tolerance/fail over support.
While all these criteria may not apply to all categories of PaaSes (for instance, criteria 1 and 2 are primarily applicable to aPaaS systems), the above categorization and evaluation criteria can help you decide which PaaS is best for you team.