In a previous post I outlined different tools that are available for deploying applications to Cloud. We also discussed some of the criteria that you can use to evaluate one particular type of tool. Recent trend in containers and serverless functions have added newer tools and approaches to the mix. Let us understand what are these, and how they stack up against the tool categories that we have seen before.
Container technology such as Docker allows packaging of application along with the Operating system and any libraries that the application depends on, in a single artifact. Compared to things like Java .war file or .jar file, or Python’s virtualenv, containers include the base Operating system in the artifact as well. By doing this the application is guaranteed to get a consistent runtime environment that includes the Operating system and any runtime libraries that it needs. Because of this complete packaging a container that runs on developer’s local workstation is guaranteed to work on a cloud provider’s infrastructure as well. Many cloud providers have now added container services in their portfolio. The three main container systems that these services are based on are – Kubernetes, Docker Swarm, and Apache Mesos. You can find several articles on-line discussing differences between these systems. From the application developer’s point of view, these systems add one more aspect that needs to be considered when choosing their cloud application development tooling.
Serverless systems such as Amazon Lambda or Google Cloud Functions allow you to deploy applications that need not run continuously but only on receiving some trigger. For instance, you may have an application that converts an image into different formats after it has been uploaded to a cloud storage system. Such an application need not run continuously but needs to run only on the image upload event. Serverless functions are similar to database triggers. Whereas database triggers execute upon events on database tables (insert a row, delete a row, etc.), serverless functions execute upon a wide variety of event types defined by a particular cloud platform.
So how do you choose the right tool category for your specific need? Table below can help you in making this decision. In the table we have rated the four different tool categories for application deployment on their ability to support particular kind of applications. The numbering scale used in the table represents the ability of a particular system to deploy a particular kind of application. The interpretation of the numbers is as follows: 3 – High ability, 2 – Medium ability, 1- Low ability.
If you have application in the form of its source code and want to deploy it, then PaaS systems are right choice for you. Container systems and CI/CD systems also support deploying applications starting from their source code, although some additional tooling is required (defining Dockerfile in case of Container Systems and writing application build and deployment scripts in case of CI/CD systems). On the other hand, if you want to deploy application containers on cloud, then going with Container systems will be the right choice. CI/CD systems can also support containerized application deployments with additional tooling for building containers and storing them in container registries. Serverless systems are appropriate for applications that need to only run occasionally upon occurrence of some event. Container systems can also be used for running such applications by registering a container in the Container system that gets run upon receiving relevant events. For applications that need complete control over their runtime environment, CI/CD systems with infrastructure provisioning offer the best choice. PaaS systems such as Amazon Beanstalk provides mechanism (through the .elasticbeanstalk config files) whereby it is possible to customize the infrastructure to certain extent, giving PaaSes a score of ‘2’ for such applications.
|Tool category||PaaS systems||Container systems||Serverless systems||CI/CD systems with Infrastructure provisioning (Jenkins+Chef/Puppet)|
|Applications that are deployed from source code||3||2||1||2|
|Applications that need customized infrastructure||2||1||1||3|