I'm looking for solid VPS hosting on a modern developer-friendly and budget-friendly cloud. I use AWS heavily at work for enterprise-grade development but the price is just too high to justify personal or small project use.
I'm looking for a good configuration for development and tinkering.
- API-based cloud providers with Infrastructure-as-Code support (terraform)
- Not AWS / Google Cloud / Azure
- Low Cost for personal / home lab / startup use
- Good price-to-performance ratio
- Viability for running a Kubernetes cluster
- Low-ping for almost-at-home latency (prefer Dallas area)
I'm looking for reputable, modern, developer-centered offerings that would serve an early startup well.
Digital Ocean (DO) is the big boy in the room. I have been using DO and have had a pretty flawless experience for the small things I've done. I feel like these are my people, they are legit developers building for developers. They are highly active in the Cloud Native community, and have a compelling Kubernetes zero-cost control plane offering which works quite well.
So why am I looking elsewhere? Although DO has a great value proposition, their hardware has always felt a little lacking for the droplets. I have a nagging feeling that I am overpaying for the hardware to pay for all the software development they are doing.
Also, their region selection for the US is terrible. As I'm located in the Dallas area, I'd like to see some more central locations, rather than just San Francisco and New Jersey (NY). Roundtrip latency for development is too high.
I don't know much about Vultr, but have seen some good chatter about them so I've decided to take them for a spin.
This is another provider that is new to me, but I have seen some good things about them. They claim to provide the highest price to performance ratio among AWS, DigitalOcean, Vultr, and Linode.
It appears one of UpCloud's strengths is cross-region connectivity options. Compared to other vendors in this class, it looks like they have a pretty strong emphasis in private connectivity.
Technically, I've been a customer since 2012, but haven't done anything with Linode for years. Linode has been around for a while in the VPS space, even predating AWS, but it recently has made some interesting advancements in becoming a legit cloud provider.
What is really compelling me to take a second look is they just released their managed Kubernetes service with zero-cost control plane. It looks like they are really showing up to play in the Cloud Native space, but still well behind Digital Ocean in that respect.
Why Not Hosting Provider X?
There are many hosting providers that have not made this list for good reason. I am only considering trusted companies with good track records. I also am excluding low-end hosting companies that do not provide modern cloud amenities such as API-based provisioning and hourly billing.
Single Instance Evaluation
I targeted a 2 vCPU option, since that's the smallest I would consider for a node that I might run Kubernetes on. I was happily surprised how well the providers have aligned their prices, this makes comparison very straightforward.
|Name||Basic||80 GB SSD||Simple||Linode 4GB|
|Memory||4 GB||4 GB||4 GB||4 GB|
|SSD||80 GB||80 GB||80 GB||80 GB|
|Bandwidth||4 TB||3 TB||4 TB||4 TB|
Using fast speed test to check internet download speeds. There are obviously lots of variables that can influence this measurement, I just wanted a general idea of speeds to make sure they weren't terrible.
For some reason Vultr failed this test. Perhaps they have some network restrictions blocking this test.
We need to identify and test our CPUs. A quick look at the CPU info yields the following information about each system.
|Chip||Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz||Intel Xeon Processor (Skylake, IBRS)||Intel(R) Xeon(R) Gold 6136 CPU @ 3.00GHz||AMD EPYC 7542 32-Core Processor|
The surprise here is that the Linode with the AMD EPYC chip outperformed the UpCloud Intel Xeon processor.
|Speed||4710 MiB/sec||4446 MiB/sec||4163 MiB/sec||5856 MiB/sec|
|Rand Read||81 MiB/s||122 MiB/s||101 MiB/s||150 MiB/s|
|Rand Write||54.04 MiB/s||81.99 MiB/s||67.77 MiB/s||100.44 MiB/s|
|Seq Read||7277 MiB/s||6482 MiB/s||6325 MiB/s||12702 MiB/s|
|Seq Write||233 MiB/s||238 MiB/s||220 MiB/s||348 MiB/s|
I noticed UpCloud touts its Geekbench score, so I thought I'd replicate their results on the node size I am targeting. I've picked a few metrics from this benchmark which represent the kinds of operations I expect to run.
|Single Core Score||564||763||935||889|
Single Core Scores
|Floating Point Score||631||850||991||1023|
|Floating Point Score||1207||1626||1945||1970|
Price to Performance Results
Obviously any benchmarking is fraught with potential problems when comparing different systems, but this is the best way to try to get an apples-to-apples comparison of performance without setting up complex workloads in all environments.
I'm going to ignore the internet speed test, since it has a lot of external variables and isn't really a well-controlled test.
I've plotted the performance for each test relative to the lowest performing system.
Average Related Metrics
To ensure we don't give excess weight to any one component, I'm averaging the I/O scores, and Geekbench scores. These four components will be averaged to produce our final comparison score: CPU, Memory, I/O and Geekbench.
Overall System Performance Comparison
Averaging all those scores, this is my back-of-the-napkin comparison of the clouds based on performance of similar spec'd machines.
The ordering I gave to these items before I ran the tests was apparently a foreshadowing of the end result.
Price to Performance Ratio
Since these systems happen to all be priced the same ($20), the ratios above can be used to illustrate relative price to performance.
The numbers show a 20-30% better price to performance ratio for Vultr and UpCloud compared to DigitalOcean. And a whopping 68% better price-to-performance ratio for Linode.
What this means in practice is you'll be spending more money at Digital Ocean for the same performance elsewhere. This performance difference shouldn't be much of a surprise since after getting CPU details, we discovered that our DO node was a 2.2GHz clock speed where the others were at 2.6GHz-3.0GHz.
To get comparable performance, you probably will have to run one size larger on DO when compared to the others. This makes DO more expensive for the actual hardware.
It just illustrates that a vCPU is not an industry standard measure, and you have to know what you are buying to get the best deal.
Price Isn't Everything
We shouldn't overplay the importance of price. DigitalOcean has a very compelling portfolio of products that go far beyond raw performance. Similar to AWS, Azure, and Google Cloud, you pay a premium for high-quality production ready solutions.
If money was no object, we wouldn't be having this discussion now, and I'd just pay for AWS or Google Cloud. But the point of this exercise is to see how thrifty we can be and still build a solid product.
Next Steps: Feature Analysis
This series continues in Part 2 where I will continue my evaluation of these options by looking at the total offering and start to make some eliminations.
Appendix: Test Methods
If you'd like to reproduce my results, this section will provide you with the commands.
The following script sets up the dependencies for the test. All nodes were loaded with Ubuntu 20.04 LTS and had all updates installed and a reboot performed prior to testing.
#!/bin/bash cd ~ apt update apt upgrade -y apt install -y sysbench wget https://github.com/ddo/fast/releases/download/v0.0.4/fast_linux_amd64 -O fast chmod +x fast wget https://cdn.geekbench.com/Geekbench-5.3.1-Linux.tar.gz tar zxvf Geekbench-5.3.1-Linux.tar.gz
sysbench --test=cpu --threads=2 run
sysbench --test=memory --threads=2 --time=60 run
sysbench --test=fileio --threads=2 --time=60 --events=0 --file-test-mode=rndrw prepare sysbench --test=fileio --threads=2 --time=60 --events=0 --file-test-mode=seqrd run sysbench --test=fileio --threads=2 --time=60 --events=0 --file-test-mode=seqrw run