A Platform as a Service (PaaS) is a category of cloud computing, which provides a platform and an environment to allow developers to build applications and services over the internet. Apache Stratos is a PaaS framework from the Apache Community, that is designed to address the various challenges currently faced in the Cloud PaaS space. It also acts as the foundation for multiple flavors of Platform as a Services, such as Application PaaS (aPaaS), Integration PaaS (iPaaS) and Data PaaS (dPaaS).
Stratos can be deployed on any Infrastructure-as-a-Service (IaaS) that supports Apache jclouds, and has is fully tested with EC2, OpenStack and GCE. Stratos also leverages the use of Docker in the PaaS, by using Google Kubernetes and CoreOS. In addition, Stratos also provides a mock IaaS, which simulates the basic features that Stratos requires from an IaaS; thereby, providing a cost effective way of trying out Stratos.
A cartridge is a virtual machine (VM) on an IaaS that has software components to interact with the Stratos PaaS. In Stratos, service runtimes are created by cartridge runtimes. Currently, Stratos provides the following cartridges: Node.js, Wordpress, PHP, MySQL, WSO2 Application Server, Java, jBoss, Ruby and Tomcat. However, users can easily use Stratos to create any cartridge, which is either a framework, data, application or load balancer cartridge, i.e., MongoDB, Ruby on Rails, .NET, Spring, Joomla, Struts, PostgreSQL, etc. For example, if you need a PHP runtime, you can use a PHP cartridge to get the runtime to deploy the PHP application. Furthermore, the cartridge concept allows the users of Apache Stratos to develop and run their own cartridges using any language or framework. Apache Stratos supports polyglot environments where multiple languages are used simultaneously, e.g., PHP, MySQL, etc., and can be extended to support many more.
Composite application support in Stratos allows its users to deploy an application that requires different service runtimes with their relationship and dependencies. Each of the service runtimes in the application can scale independently or jointly with the dependent services. When a single tenant application is deployed, tenants are automatically subscribed to the application.
Stratos provides multi-tenancy, whereby a single installation of Stratos can support multiple tenants. Tenant users can sign-up to the multi-tenant cartridges once the multi-tenant application is deployed. Each tenant gets a runtime for the signed up service that is isolated from other tenants. As Stratos provides tenant level isolation in multi-tenant scenarios, better resource utilization is derived by hosting many tenants in the same instance.
In addition, Stratos provides a load balancer out-of-the-box, and also provides extensions for NGINX and HAProxy. However, Stratos can be easily extended to support any load balancer. In Stratos, load balancing can be provided for the tenant, so that requests to the tenant's URL get mapped to the tenant's application inside the service runtime.