Cloud Computing has become nowadays a buzzword in the Web applications world. It is defined as a model for enabling on-demand remote access to a shared pool of configurable computing resources that can be released as fast as they have been provisioned to users. These resources are available in self service and without human interaction from Cloud service providers. This latter allows users to consume computing resources as needed.
Cloud services are delivered under three well discussed layers :
- The Infrastructure as a Service (IaaS): Consumers are able to access Cloud resources on demand. These resources can be virtual machines, storage resources and network resources. The provider takes the responsibility of installing, transparently managing and maintaining these resources.
- The Platform as a Service (PaaS): Consumers are able to develop, deploy and manage their applications into the Cloud using the libraries, editors and services offered by the provider. The provider takes the responsibility to provision, manage and maintain the Infrastructure resources.
- The Software as a Service (SaaS): Consumers are able to use running applications on an IaaS or a PaaS through an interface. They are not responsible of managing or maintaining the provisioned Cloud resources.
If at this level, the difference between the various types of cloud services is difficult to identify, we recommend you to read this article which offers an analogy: Pizza as a Service!
Over the past years, companies have been facing the complexity to deliver applications which have to be highly available and scalable. An Infrastructure as a Service layer offers compelling benefits such as time, scalability and hardware utilization savings. However, building an application from its design to its deployment involves many cumbersome tasks that are costly in terms of time and manpower. These tasks consist of setting up application servers, configuring virtual machines, load balancers, monitoring tools and many more. To overcome these tasks and simplify this process, the Platform as a Service layer can be an effective solution. This Cloud category adds to the advantages provided by the IaaS that includes the use of the underlying infrastructure, such as servers, network, storage, or operating systems.
This blog post aims to explain what is a PaaS layer and what are its advantages and limitations. In order to motivate the use of the PaaS, a real industrial use case presenting the case of Opal Solutions is given. Indeed, the CETIC helped this company in supporting their developers to migrate their application to a PaaS solution and to be more productive by improving software release cycles.
What is exactly the PaaS?
The PaaS is devised to provide utmost benefits to the developers and to get rid them of the onerous task of managing applications lifecycle. Indeed, it enables high scalability and on demand cloud services provisioning by automating its allocation/deallocation to optimally support the requirements of an application. In addition, it ensures a high level of availability and reliability thanks to the load balancing and the failover of services capabilities with respect to the application requirements. It is also characterized by the automation of operations tasks in order to ensure an end-to-end support for the applications’ lifecycle. Last but not least, it allows developers to use multiple operating systems, multiple run-time and frameworks, and multiple databases to collaborate with other developers.
The PaaS lets enterprises avoid infrastructure investment when using or provisioning cloud applications. It allows companies to completely focus on developing cloud applications without caring about time-consuming tasks, such as server setup and configuration, required to get a suitable platform up and running. The PaaS provides appropriate middleware services, runtime container and operating system for an application, minimizes downtime costs and abstracts apps from infrastructure dependencies. Moreover, it allows also the execution of applications which do not necessarily run on the same machine. Indeed, the selected PaaS solution can distribute the application on a set of machines, which guarantees the scalability of running applications. The application distribution is automatically managed by the PaaS and in a transparent manner for the developers, where they don’t need to worry about it in the IaaS level anymore.
The PaaS level is also more and more used and proposed over the world. "As of 2019, the total PaaS market contains more than 360 vendors, offering more than 550 cloud platform services in 21 categories", according to Gartner. Gartner expects that the market will nearly double 2018’s market value by 2022 and that PaaS will be the prevailing platform delivery model moving forward.
It exists a lot of PaaS offers. Some tools are open source such as OpenShift OKD, Dokku, PaaSTA PaaSTA or even DC/OS that you need to install on premise or on a public cloud and maintain it. Some other PaaS platforms are offered from Cloud providers such as Elastic Beanstalk from AWS or Heroku which are fully-managed platforms where you pay only for the resources used.
Choosing a PaaS solution could be a cumbersome task. We already did this work for you by making an article which can be found on the CETIC blog . This article reviews the most popular open source solutions and analyzes each one based on a set of criteria that we fixed by taking into account common requirements of industrial partners. 
PaaS Opportunities & Challenges
The PaaS offers some additional advantages against the IaaS category. Companies typically use PaaS for these reasons:
- Enhancing the developers productivity: Developers are more focused on writing code and manage efficiently the application lifecycle instead of spending their time in managing and configuring servers, databases, etc. As the majority of PaaS solutions are IaaS centric (i.e. seamlessly provision and manage the IaaS stack), developers shift their focus from maintenance issues (e.g. updates, fixing administration problems, etc.) towards innovation and enhancing their IT expertises. Thus, using PaaS solutions gives the opportunity to small PMEs and start-ups to get rid of tedious tasks (e.g. provisioning infrastructures, administration, etc.) and to encourage their developers to enhance their expertises and maintain their IT software and products.
- Scalability and high availability: It automatically builds and dynamically scales your application up/down based on your application’s specific needs. It also offers capabilities to improve the availability, the application recovery processes (e.g. failure detection), auto recovery of application instances, alerts and notifications and many more with auto-provisioning of resources.
- Reduced Costs: Thanks to its economic model, PaaS users are saving money that can be used for other business operations. Users typically pay only for the underlying resources used and not for the PaaS service itself. But, the most relevant advantage is that there is less operations tasks and so, it needs less money for these tasks.
- PaaS Ecosystem: PaaS often comes with plenty of other tools, such as analyzing or monitoring tools, that can be coupled with the deployed application and which are often already pre-configured. It allows developers to get insights and to have more control over their application.
The PaaS model is not meant as the silver bullet to solve all the problems. It exposes some limitations that are:
- Using a PaaS on premise requires to hire an IT team in order to install and maintain the platform.
- Using a paying PaaS solution is vendor lock-in. In this case, migrating to another PaaS provider would involve a significant amount of time, as all of the application’s code and data will need to be migrated.
- PaaS offerings typically provide different platforms than standard platforms. For instance, it could be a slightly modified J2E Java application server, python application servers, or even a PHP with reduced APIs, which may prevent the execution of the application locally or in a competing cloud.
- Since only the application is deployed, there is also a loss of control over the rest of the computing environment, including technological choices (component versions, OS choice, etc.).
Migrate to a PaaS, a concrete use case
The CETIC is currently helping Opal Solutions migrating their application - referred to as Interneo - from the IaaS to the PaaS. Indeed, Interneo is an internship management software for schools and hospitals. When we joined the project, Opal Solutions was manually deploying their solution on OVH servers which was really time-consuming and error-proneness for the developers. In order to cover this gap, we proposed to migrate their project to AWS by using the Elastic Beanstalk PaaS solution in order to reduce these operations tasks. We also use the GitLab continuous integration and continuous delivery (CI/CD) tool to automatically test and trigger the deployment of their application on multiple environments.
The Interneo solution consists in three technical components: a PHP Symfony backend, a PostgreSQL database and a frontend written with the ReactJS framework, as presented in Figure 3. In order to host these component, we proposed to use the following AWS services:
- The PHP Symfony backend is deployed and managed by AWS Elastic Beanstalk which is the PaaS of AWS for deploying and scaling web applications and services on familiar Web servers such as Apache, Nginx, Passenger, and IIS. By using this PaaS solution, developers can simply upload the code on their git repository and Elastic Beanstalk will automatically handle the deployment, from capacity provisioning, load balancing, auto-scaling to application health monitoring. At the same time, the team of Opal Solutions retains full control over the AWS resources powering the application and can access to the resources at any time. With AWS Beanstalk, developers can now easily deploy, scale and monitor their application.
- The PostgreSQL database is deployed by using a service of AWS named RDS which offers a managed database service.
- The React frontend is deployed with AWS S3, an object storage service, and AWS Cloudfront which is a the content delivery network (CDN) service.
We also use GitLab CI to run test suites for immediate feedback in order to automate the integration (compilation, testing) and to trigger the deployment of the different components. Thus, when a developer makes a new commit on the SCM (Source Code Management) Gitlab repository, the application is automatically tested, built and deployed to AWS. Once it is deployed, the application is continuously monitored by the AWS Cloudwatch service. To execute the Gitlab CI script, we needed to configure the Interneo GitLab project to use a Gitlab runner, which is basically a server that executes instructions listed in the script file and reports the result back to GitLab.
The current deployment view  is illustrated in Figure 4.
What we do at CETIC about PaaS
At CETIC, we are also familiarized with PaaS technologies thanks to some research projects in which we were involved in the last years. For instance, we worked on a research project called "ModePaaS". This project aims to create an open-source model-based tool that helps developers to automatically deploy software applications on multiple PaaS solutions. It enables to declaratively describe the application requirements and the PaaS solutions capabilities. Then, it allows to deploy the application on various PaaS targets. More informations can be found on the CETIC website (ModePaas). The project results allowed to automate PaaS services discovery and application deployment steps in a multiple PaaS environment. This project also enhanced CETIC’s expertise in order to assist and help industrial partners to take advantage of cloud technologies and commercial offerings as efficiently as possible.
Then, thanks to MOBITS and CloudMedia research projects, we setup one of the most widely used open-source PaaS solution using containers: OpenShift. With the OpenShift platform, we highlight the benefits to use a PaaS solution in industry and we also use it to easily deploy some internal services and advance our research works. In this context, we wrote an article  in the ADMIN Linux Magazine where we present how OpenShift paired with the GitLab CI/CD tool can help developers to be more productive by improving software release cycles.
Finally, we are constantly helping and accompanying industrial partners companies (1) to select the most appropriate PaaS solution to their requirements, (2) to set up PaaS solutions, (3) to held workshops introducing how to use a given PaaS solution and (4) to assist them in migrating their solution to the PaaS.
 Cloud computing services: taxonomy and comparison: https://link.springer.com/article/10.1007/s13174-011-0027-x
 Open Source PaaS Solutions Analysis: https://www.cetic.be/Open-Source-PaaS-Solutions-Analysis
 Figure of the three main categories of cloud computing services: https://mycloudblog7.wordpress.com/2013/06/19/who-manages-cloud-iaas-paas-and-saas-services/
 The “4+1” ViewModel of Software Architecture: http://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf
 OpenSHift and Gitlab CI: http://www.admin-magazine.com/Archive/2018/47/Automatic-build-and-deploy-with-OpenShift-and-GitLab-CI