PaaS or IaaS : Which one do you prefer and why?
I am building a Java app and I want to make it live quickly. I don't have much experince with DevOps as well.
I am considering hosting it on Heroku. As it is very expensive, I am considering using DigitalOcean or Linode or AWS. Again, as I am very new to DevOps, I don't want to take risks and waste much of my time making app live.
Which one should I choose and what are the pros and cons of each?
I had a similar requirement of hosting my website. I tried Digital Ocean / Linode / Google cloud/ Azure web apps (Part of my MSDN subscription ). Finally felt Digital ocean is cheap and best fit for my requirement picked up $5 hosting with $1 backup. I used the Ghost-Ubuntu droplet and was able to spin up the server in seconds. linode-vs-digitalocean-vs-shared-hosting. This gives more in depth details of each platform.
- Cheap starts from $5
- Faster disk IO which is required for a basic site
- Higher disk space compared to linode
- More droplet collection
- 3rd party android apps via api
- Rich UI
- Starts from $10
- Faster CPU might help for an app
- Official Android app to check system health
My short answer is: if you can afford it, PaaS will let you go live quicker. The long answer is: you guessed it, it depends:)
You can go a very long way with a PaaS based solution until you get to the point where you feel that it is holding you back and if your app is relatively simple you might never get to that point. Then again, if your app is simple it probably means it won't be too hard to go the IaaS way.
So my suggestion is, if you can afford it and want to go live quickly go with heroku. Once you feel you've reached the limits of heroku (meaning specific customizations or insights that you can't get out of heroku) or once you want to reduce costs start migration to an IaaS solution.
Be aware though that this doesn't mean you don't need to understand what's going on at a lower level. Understanding how heroku (or any other PaaS) solution works will help you get the most out of it at a lower cost and avoid unexpected errors. It's also a great way to start learning about DevOps while having a lot of the difficulties handled for you.