# Full Stack Web Hosting in 2020
As the complexity of Cloud Computing is reaching clouds, we, as developers, are posed with problems that never existed before; deployment being one of them. Of course, one could always go for Virtual Private Servers (VPS) or (opting for more modern means) cloud services such as AWS, Azure or GCP. Sure, these providers have fulfilled their promise of easing the process of deployment to an extent, but the ever evolving nature of cloud has rendered it still hard to navigate through. These platforms, that we could call **Big Cloud Providers** have gotten complex to the point it must be proven that we are worthy of their services (of course, by taking some exams; I just made it over-dramatic..) Even the simplest of them, GCP is hard to know around. So, bye-bye BCPs…
Now, coming back to our good old VPS Providers (such as Digital Ocean, Linode, Vult…), they still demand the knowledge of additional skills like linux and sysadmin, so let’s outright label them as _not-simple._
With the Big Cloud Providers and VPS Providers out of spectrum, I’ve run down three providers which I deem good enough for these times’ use:
* Netlify and/or Vercel (For Hosting full stack Serverless Application)
* Hostman (A PAAS Solution)
* Heroku (A PAAS Solution)
## Netlify/Vercel
[Netlify and Vercel provide similar services, so this article contains one -- Netlify -- as the reference.]
Netlify is a popular front-end hosting platform. I know what you’re thinking, and yes, I have a reason to include something such as this here in this article; the reason being that they are one of the major innovators of a new trend in web development, namely, JAM (JavaScript, API and Markup) or more popularly known as JAMstack. Also, it _is_ one of the easiest solutions for using serverless.
That is not even the tip of the iceberg, however. Netlify uses serverless functions, powered by AWS Lambda, for backend usage matters. Authentication of users can easily be enabled with Netlify Identity. And don’t get me started about CI tools and CDN...oh, sure, I must get started! Well, it acts as an abstraction layer to host, so easy that a simple drag-and-drop is all you require. Github (and other git repositories) Integration is a given feature, so all it takes for the entire application to be built and hosted in the CDN is a `git push`.
Advantages:
1. The Vendor Lock, yes. It is not a thing for most of the services (in fact, all of the ones except their extra services) in Netlify, so migrating from it should not be much of a problem. Also, their services like git gateway, identity and CMS, all of them are open source, so you could rehost them if required.
2. It’s one of the easiest solutions for using serverless functions. You just have to write the code and put it in a folder and netlify will take care of the rest. And even for non serverless needs (Frontend Hosting, etc.), you only have to set it up for around 5 minutes and that’s it. You don’t have to worry about anything else.
3. It is, as mentioned earlier, one of the best options there is for JAMstack.
Disadvantages
1. Serverless, serverless and serverless -- Netlify doesn’t support anything other than serverless functions. Although it might be a really convenient way for abstracting backend infrastructures, it has its limitations (long cold boot time, etc.).
2. Even if you plan to use serverless, there is no inbuilt support for persistent data. Meaning, you still need to use external services (AWS S3, Cloudinary, etc.) if your website has user uploaded data/ database.
3. You cannot deploy real time applications as they need an event messaging system, which is not possible on Netlify.
4. The pricing could get a bit awry. Simply put, it’s terrible. Given that it has a very generous free plan, once you get to the premium block, the cheapest plan for $45 all the way up-to $290 doesn’t quite add up...there are other cheaper alternatives.
## Heroku
A revolutionary in the development lifecycle, Heroku is one of the pioneers of PAAS (platform-as-a-service) Solution. For most developers working with Python, Go, Node.JS, Scala or Clojure, Heroku is the obvious ideal choice for hosting and deployment.
It mostly comes in highlight due to its wide variety of useful Extensions (which include the ones for managing a database to sending emails or running cron jobs). Also,with built-in CI tools and the fact that almost all of the management tasks can be abstracted, you get a pat on the back, Heroku!!!
For deployment infrastructure, it uses a container that is running on top of AWS (which they call dynos), which has a wide flexibility, i.e. this provider here supports horizontal as well as vertical scaling, which is a point one must not miss while talking about Heroku. Also, like Netlify, ‘push-to-deploy’ is an option here as well, so once you push the code to Github, it gets automatically updated.
Advantages
1. Heroku has ready to use environments that allow developers to deploy code very fast.
2. Heroku doesn't need infrastructure maintenance; meaning, you don’t need to manage the system. Also, it has easy-to-use built-in tools for monitoring and management.
3. It has simple horizontal and vertical scaling.
4. It has a built in continuous integration tool (Heroku CI).
5. It is very easy to use: you could create a server in just some seconds with the Heroku Command Line.
6. In need of more complex features, it allows rather easy integration with other AWS products.
7. It also supports third party integrations through extensions.
Disadvantages
1. Although heroku offers a generous free tier, once you exceed the free tier, it gets expensive really fast. The free tier also has limitations where the app sleeps after 30 minutes of inactivity and the price can range for $35 per month to $500 per month without even counting the extra expenses for the 1st and 3rd party extension integrations.
2. Although heroku is awesome for hosting backend applications. It is not suitable for hosting frontend applications. Especially in contrast to other services that offer CDNs.
3. Although great for small (or medium) applications, it is not so ideal for comparatively larger applications.
4. It has very limited types of instances.
5. It has high inbound and outbound latency and has low network performance.
6. Although heroku offers 3rd party integrations with extensions, The extensions are limited. You can’t do much and doing it so manually is a larger hassle than it should be.
## Hostman
“Hostman is the new horseman in its game.”
_God...I so wanted to say that._
A comparatively new platform but that also means it has had time to learn from its predecessors. Without jargon-ing much, Hostman uses containerized systems that run on top of AWS, GCP, Azure… but still implements them differently, in quite an easy manner. I mean, not having to write ConfigFiles( “Procfiles” as in heroku), sure is easy, isn’t it?
However, deploying without much configuration is limited to a small number of languages and frameworks (22, as much as they support right now).
Additionally, it has an automated alert system where you get emails (or through your preferred platform) in case of any failure in the CI/CD. Also, in such cases, the backup version of the application is used, so one up for you here, Hostman!
Not that it has no flaws, it has plenty, let’s break it down below:
Advantages
1. It supports 7 locations, be it in India, Europe or America. This helps reduce latency.
2. It has a very fair pricing model -- cheaper than heroku, for comparison. Also, to add to the list, it gives a free SSL certificate to all users and websites (YAY!!!). \
Plus, it has CDN and is free for Front-end apps.
3. I talked about configuration above as well: the 22 languages and frameworks require no additional configuration (not even the config-files.)
4. It has a built in CI/CD tool that is very easy to set up; once set up, you can just sit behind and relax.
5. Unlike Heroku, it has permanent storage, so no need to join additional forces with AWS or other storage services.
6. You can run SSH into the container directly from the website.
Disadvantages
1. No CLI support. A big hole they busted, but it is what it is.
2. No Gitlab Support. [Yes, another hole in the wall.]
3. Although you could always use docker for the frameworks not officially supported, it is always a down-side to having such a limited number of official support.
Also, SQL supported readily are MySQL, MongoDB and PostgreSQL. (Limited, aren’t they?)
4. Unlike heroku it has no support for 3rd party extensions.
5. Being a comparatively new baby in the game, documentation and community support aren’t on par with others (already established) which is always a big hurdle in the field of tech.