What are the choices when hosting a web application or web service apart from the usual shared hosting service? Which is cost effective? What are the scalability options? How flexible are the options to scale up and down based on required computing needs either to some irregular tasks or change in traffic patterns?
The answer could be different for different needs. I am going to consider a simple web site with portfolio, blog and contact form.
1. Java, PHP or node.js support
2. Serves peak load of 10 HTTP requests per minute. Avg load of 1 req/min or 1,440 requests/day or 0.5 mi requests/month or 6 mi/yr. At 1MB per request, the outgoing bandwidth would be 1GB/day or 30GB/mon or 365 GB/yr.
3. Requires a relational database which can store 10000 records in around 10 tables put together. No LOB used in any tables. All simple data types.
4. Requires file storage to persist user uploaded content (or a strategy to achieve the same)
Following hardware and system requirements can be derived from above -
1. CPU - 500 MHz+ (I’m not sure of why i said this. It is sort of minimum provided in most platforms).
2. Memory - 512 MB for background jobs. Decent RAM for foreground jobs. No hard value here.
3. RDBMS like mysql / postgresql with decent storage (100 MB - 200 MB)
4. Read-write file storage - 1GB
5. Deployment size - 100 MB
6. Bandwidth 1GB / day or 365 GB / yr
One of the best things in PAAS options available is free tier with option to upgrade to priced tiers or add-ons on demand with all kinds of capping options to keep cost under budget. I would not like to pay for a platform in which i have not tried anything to see the ease of use, stability, scalability and automation etc. Not all have free tiers though but most atleast have free trial. Based on the availability of free tier/trial, i considered the following options and their free tier/trial limits.
|Platform Provider||RAM (Foreground)||RAM (Background)||CPU||Deployment size||Writable File Storage||Database Size||Free Instance Hours||Bandwidth|
|1||Heroku||512 MB||512 MB||Quad Core 2.7 GHz||100 MB||NONE||10,000 rows||24 hours / day||2 TB / month|
|2||Google App Engine||128 MB||128 MB||600 MHz||1 GB||5 GB||1 GB||28 Foreground hours & 8 background hours / day||1 GB / day|
|3||AWS||613 MB||N/A||1-1.2 GHz||N/A||30 GB||20GB||750 hours / yr||15 GB / yr|
|4||Webfaction||512 MB||N/A||Quad Core 3.4 GHz||N/A||100 GB||N/A||N/A||600 GB / yr|
|5||Modulus.io||396 MB||N/A||N/A||1 GB||1 GB||64 MB||N/A||N/A|
Based on this, my monthly costs might be -
|1||Heroku||NIL (0.12$ for S3 upto 10TB data transfer is negligible) for 1 yr and then 1$ for S3 per month for 1GB storage. Effectively NIL.|
|2||Google App Engine||NIL|
|3||AWS||NIL for a yr (again data transfer charges are very low) and 15$ for t1.micro instance per month.|
|4||Webfaction||NIL (60 day trial)|
|5||Modulus.io||NIL (1 month trial)|
There is not clear winner here. But the two in green are right now available with free tier with no time limits and hence an attractive choice.
Suppose google and heroku removed free tiers and you have run out of AWS 1 year free tier or similar free trial periods of webfaction and modulus.io, then what would be the charges?
|Platform Provider||Charges If nothing is free|
|1||Heroku||43.50 heroku (one 1x dyno and one 10 mi rows db) + 1$ for S3 = 44.50$|
|2||Google App Engine||0.13 * 5 (blobstore) + 0.18 * 1 (datastore) + 0.12 * 30 (bandwidth) + 0.08 * 720 (instance) = 62.03$|
|3||AWS||15$ for EC2 = 15$|
|5||Modulus.io||20$ (1 servo + 1GB db + 1 GB storage)|
The one in red is the most expensive option while the one in green is the cheapest option.
Considering all are platforms designed for on the go tuning of hardware based on traffic needs, they can be scaled up and down based on traffic patterns. The most easiest todo is cloud computing platforms like heroku, google app engine and modulus.io. While AWS and Webfaction which are more VPS like are difficult to setup scaling as it requires setting up the application in the new machine etc. So the cloud computing platforms score high here.