Platform as a Service vendors initially distinguished themselves by the languages they supported, such as Java or .NET, but they have evolved to support multiple languages -- and also data stores, messaging services, application services and portability with Infrastructure as a Service.
Developers have a wide range of PaaS options from which to choose. While it might appear that PaaS vendors are quite similar, there are many differences. Consider what types of controls, if any, developers have over infrastructure configuration. Ideally, the PaaS provider manages implementation details, but sometimes developers need more control. It's also important to consider the supporting services offered, such as relational and NoSQL databases. And if you are concerned about vendor lock-in, assess how difficult it will be to move to another PaaS provider once you have developed your application to use the services your current PaaS offers.
IaaS providers that support PaaS
Many established IaaS cloud providers have made moves to offer PaaS. Amazon Web Services (AWS) Elastic Beanstalk implements something of a hybrid IaaS and PaaS model; it provides automated scaling, load balancing and monitoring for applications.
While it might appear that PaaS vendors are quite similar, there are many differences.
AWS Elastic Beanstalk will likely appeal to developers who like the advantages of PaaS but occasionally need to configure server, storage or other services used by their applications. Unlike other PaaS providers, which hide infrastructure details from users, AWS gives IT full control over the resources that run your application, including Elastic Compute Cloud (EC2) instances and Simple Storage Service (S3) storage. AWS Beanstalk supports Java, .NET, Python, Ruby, Node.js and PHP.
Google App Engine is designed to run Python, Go or Java applications on Google infrastructure. Applications run within a restricted sandbox, so existing applications may require substantial changes. For example, applications can't write to the file system and must use AppEngine, a NoSQL schema-less database, to store persistent data. Developers also have access to Google Cloud SQL, which is based on MySQL 5.5, and Google Cloud Storage, an object data store.
Microsoft Azure began as a PaaS vendor and later offered IaaS. In addition to supporting several languages, Microsoft Azure provides specialized services for mobile device application back-end support. SQL database and reporting services are included in the PaaS offerings as well. Microsoft might not be the first cloud provider to come to mind when you think of big data, but it has partnered with Hortonworks to support Hadoop in Azure. The combination of Azure's ease of use and Microsoft's support for non-Microsoft technologies will make this PaaS appealing to more than .NET developers.
PaaS vendors to watch
In addition to the IaaS providers that offer PaaS features, there is a variety of PaaS-only providers. Heroku offers PaaS that supports common languages, such as Java, Ruby, Node.js and Python, as well as the functional programming languages Scala and Clojure. Heroku abstracts virtual machine (VM) instances to a structure called a dynamo, which is described as a container running a single command. The Heroku infrastructure manages the number and distribution of dynamos for your application. In addition to computing services, Heroku users can leverage databases, queues and performance monitoring services.
Red Hat OpenShift is a PaaS application framework that supports common languages -- but it also implements a customizable cartridge functionality that allows users to install support for other languages. Like AWS Elastic Beanstalk, OpenShift gives significant customization control to users. To run an application in OpenShift, developers create a configuration file that specifies the components used -- e.g., Python and MongoDB -- and the location of application code. OpenShift can automatically scale as dictated by load, or system administrators can manually scale as needed.
CloudBees' PaaS is well positioned to support agile developers working with Java Virtual Machine (JVM) languages, such as Java, Grails and Scala. Jenkins, which builds, tests and monitors applications, provides support for continuous integration. CloudBees offers managed MySQL services for relational database support and partners with other service providers to offer the CloudBees "ecosystem," which includes CloudForge for version control, AppDynamics for performance monitoring, Cloudant for a CouchDB-compatible cloud database and MongoHQ for MongoDB support.
PiCloud takes a different approach to PaaS than other providers. This PaaS vendor focuses on compute-intensive Python applications. Developers can use a PiCloud library to import code into their applications, which will push compute-intensive functions to the cloud to run code there, rather than on a local device. This approach minimizes changes to the way developers work and allows them to take advantage of PaaS by adding a few lines of code to their programs.