TL;DR — If you think paying more at DigitalOcean gets you more CPU or IO, think again. The 512M instance gets you the most bang for your bucks, and is the best virtual server price/performance wise within multiple providers as long as you can manage the RAM limitation and the disk size.
I’ve recently joined Cloudscreener as the CTO. We benchmark public cloud providers, look at what CPU/RAM/IO performance you get from each instance types, and what ratio (bang for your buck) you get for each of them. We do this on 12 public providers, on multiple regions and most instance types. Our product isn’t publicly available yet, but you can get early access visiting our product page and registering for free. At the time of this blog post, this is not fully optimized and you may experience slow page loading. I suggest trying later or waiting we optimize it within the next week.
Disclaimer: this post has not been sponsored by DigitalOcean.
I own an iOS application named Faast which is like a RSS reader so I have online servers to fetch feeds and process other stuff to deliver pushes to my users. Since the creation of this application (about 2009) and in general for all my side projects, I was using bare metal servers1 for about €3,400 per year. Those would be upgraded every 2 years or so for the same cost. That is expensive, the app doesn’t generate revenue and I keep it online only because I use it myself. I also thought all my side projects (like this blog) would benefit from faster servers.
This is a 2008 way of thinking: fewer servers, fast servers. It’s easier to maintain as a solo developer, and I don’t have to install/configure them on a regular basis. Don’t think like this today, we’re in 2015 and things changed a lot.
In 2015 spawning servers on the cloud has never been easier. The spawning time for Amazon takes about 60sec in average, Google 40sec and DigitalOcean 120sec. Provision them automatically with tools like Ansible is really easy, and I even have friends and coworkers using Ansible to provision their daily Linux development laptop (some Facebook employees). I usually keep my ansible playbooks within the same repository as my app.
Ansible runs from your own laptop, it doesn’t need a master server to pull recipes from. It will also help you to move/reinstall your code on other servers if you wanted to change them later on. Even if you use Chef or Puppet you should look at it. Ansible has recently been acquired by Redhat and is here to stay. It is of course open source.
If you think using public cloud servers will be more expensive you’re wrong. I’ve personnaly selected DigitalOcean as my cloud hosting, since their ratio benchmark/price are one of the bests, and I saved a lot of money…
How much did I save?
Since April 2015 I’ve lowered the price of my hosting to €1,700 (half cheaper!), with comparable performances2. I then looked at my instance types choice again, and I’ve found out I should actually switch from the bigger instances to the smallest one. I’ve moved to €1,300 and I think I should be able to save more when I figured out how to make Rails use less memory. That’s €2,100 euros a year I saved on my server spending3 (or 60% of my cost), and I believe you can achieve similar results yourself.
Try it looking at the graph at the top of this page shows you the best bang for your buck as a yellow line, the blue chart being the performance you get. You can also use our online product.
Amazon is of course a very popular choice for public clouds. They have a lot of managed services, and they allow you to move faster with your product instead of spending time to manage them yourself (MySQL servers, DynamoDB, etc). But how do you decide which VM you should be using?
The following graph shows all instances with 2 vcpus maximum. Looking at the yellow line, you’ll notice you can have a 10x price/performance ratio. Using smaller servers is usually better, and the t2.small instances are really good.4
If you are able to move to multiple servers with queue processing (I use sidekiq) then I highly recommend you rethinking your choices and move to smaller instances.
Well this blog post became much longer than I expected, I hope you found it useful. If you did, drop me a note at @fabienpenso. If you didn’t, drop me a note anyway telling me how to improve it.
You can stay up to date via my RSS feed.
Thanks for reading.