Note: This post is targeted to individual developers/ small teams looking to deploy their ‘next big thing’ web app. All the points noted below are based on my experiences in deploying and running node.js based web apps on runtimes hosted on IBM Bluemix & Virtual Private Server (VPS) running on the DigitalOcean infrastructure.
First off, lets get the terminology out of the way. IaaS is Infrastructure as a Service & PaaS is Platform as a Service.
IaaS, PaaS, what? All I wanted was to host my web app.
So you have your web app ready to go live & make a dent in the world. Now comes the question of how to deploy it on the web?
Broadly, you will have 3 options:
- Buy some physical hardware & set it up.
- Provision a VPS on a provider like AWS EC2, Google Compute Engine, Digital Ocean.
- Deploy the app on a PaaS provider like IBM Bluemix, Red Hat OpenShift, Modulus.
Physical hardware & data center
I don’t know anything about creating a data center!
- Complete control over your hardware & software environment.
- The costliest of the 3 options. Recommended only if you have deep pockets and a dedicated IT team.
Virtual Private Server(s) provisioned on a cloud IaaS provider
Complete control of your servers, without the headache of provisioning and maintaining hardware.
- Low cost compared to buying and maintaining physical machines.
- With the correct skill set, it is easy to set up a scalable system which can be upscaled or downscaled based on the traffic/load on the servers.
- Complete control over the OS. The VPS can be configured to run whichever software you like.
- Setting up a VPS requires a good knowledge of the OS internals.
- Scaling up/down requires a good knowledge of all software associated with your app.
- Security issues: Your VPS needs to be secured. That means setting up firewall rules, blocking ports, limiting user access & n other things. Unless you have a good knowledge of how to do this stuff, you will need a Sys Admin on your team.
App deployed in a PaaS cloud
Very easy to deploy & scale applications
- Deploying an app to a PaaS environment is dead simple.
- Since all infrastructure & OS related tasks are handled by the provider, scaling & load balancing the app is quite easy.
- No need to worry about configuring & securing your machine. All security considerations are handled by a team of experts who know their job :).
- If your app is running in a pre-defined runtime environment, you cannot run any other software on the same instance. (* However, if your provider supports deploying custom container images, you will not have this limitation).
- If your application requires a datastore (database/ cache/ object storage etc.), which in all probability it will, you will need to deploy these services separately on a different server and manage them yourself, or, engage the services of a ‘Database as a Service’ (DaaS !) provider and let him take care of all the DB admin stuff.
- Since the PaaS provider defines the runtimes available for your application, it might be possible that the latest cutting-edge runtimes are not available for your instance.
Summing it up
Running & maintaining VPSs gives you a lot of flexibility in terms of the software you want to install and provide you with a total control of your environment.
However, if you lack the time or skills required to configure & maintain your servers and do not wish to deal with the scaling & load balancing aspect of your deployment, it is better to go with a PaaS provider.
What are your thoughts on this matter? Don’t forget to leave your comments!