DigitalOcean vs. Linode vs. Vultr — Don’t call it a comeback.
It’s been over a year since I decided to step away from doing my VPS Showdown posts. Recently, my curiosity was reignited. Linode was acquired by Akamai. DigitalOcean saw a leadership transition. Vultr, honestly not sure what they’ve been up to, hence my curiosity to start these comparison again.
Where is my favorite provider?
You may have noticed that I didn’t mention AWS Lightsail or Upcloud as I have in the past. Part of my fatigue with these posts is that I started to try serve the community better. This meant trying to compare more providers, some of which I had no personal interest in.
My original interest was in Linode vs. DigitalOcean, which is how this all started. Vultr caught my eye at some point along the way. Certainly there’s a whole world of VPS providers out there, Generally speaking, these are still the providers that I’m the most interested in.
Something else that was contributing to my lack of interest was my attempt to do “apples to apples” comparisons, in the context of the plan prices. Things were simple in the beginning, with consistent pricing across the board, for very like offerings. Picking the lowest price point made the most sense, since that’s where you usually start when you spin up a new box for a new project.
Now the landscape is noisy, with some providers offering sub-$5 plans. Others offer both $5 and $6 dollar plans that are virtually identical aside from a better proc or storage. And now, DigitalOcean doesn’t even offer a $5 plan at all. Thus, the “$5 showdown” is effectively over.
What I’ve opted to do now is compare plans regardless of their price, focusing solely on their plan offering. Sticking to shared CPU plans with a single CPU and 1 GB of RAM.
Back to basics
If I started a new project tomorrow, that’s what I would reach for. Similar to premature optimization being a waste, trying to dial in your perfect system infrastructure on day one is a challenge, especially when you are pre-revenue and pre-user base.
Continue on my self serving path, I’ve also omitted a ton of additional information that I was once maintaining. Data points like “who has managed databases?” and “what’s the price per GB for bandwidth overages?”. While this is great information, it’s easily discoverable on the provider’s sites. Those bits of information don’t contribute to the benchmarks themselves either.
It’s the VPS Showdown, after all.
So without further ado, let’s dive into those benchmarks. As I have in the past, I can spun up three servers from each provider, in a similar region, running the same version of Linux. Where applicable, I averaged the results.
Overview – DigitalOcean vs. Linode vs. Vultr
Linux Distro | Ubuntu 22.04 LTS |
Kernel Version | 5.15.0 |
MySQL Version | 8.0.35 |
Redis Version | 6.0.16 |
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Location | New York 1 | Newark, NJ | New York (NJ) |
Monthly Price | $6/month | $5/month | $5/month |
Hourly Price | $0.009/hour | $0.0075/hour | $0.007/hour |
RAM | 1 GB | 1 GB | 1 GB |
CPU | 1 Core | 1 Core | 1 Core |
Storage | 25 GB | 25 GB | 25 GB |
Storage Type | SSD | SSD | SSD |
Transfer | 1 TB | 1 TB | 1 TB |
Backups | $1.2/month | $2/month | $1/month |
CPU Info
Model Name | |
---|---|
DigitalOcean | DO-Regular |
Linode | AMD EPYC 7642 48-Core Processor |
Vultr | Intel Core Processor (Broadwell, no TSX, IBRS) |
DigitalOcean | Linode | Vultr | |
---|---|---|---|
CPU MHz | 2,494.14 | 2,300.00 | 2,394.45 |
Cache Size (KB) | 4,096.00 | 512.00 | 16,384.00 |
BogoMips | 4,988.28 | 3,066.67 | 3,192.33 |
CPU
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Events per Second | 972.24 | 1,574.52 | 832.26 |
Minimum (ms) | 0.89 | 0.60 | 1.13 |
Average (ms) | 1.03 | 0.64 | 1.20 |
Maximum (ms) | 6.21 | 5.18 | 7.43 |
Memory
Read
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Ops per Second | 4,478,989.18 | 5,182,556.47 | 3,915,914.18 |
Minimum (ms) | 0.00 | 0.00 | 0.00 |
Average (ms) | 0.00 | 0.00 | 0.00 |
Maximum (ms) | 0.65 | 4.83 | 6.82 |
Write
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Ops per Second | 4,573,757.60 | 5,255,600.04 | 4,010,927.54 |
Minimum (ms) | 0.00 | 0.00 | 0.00 |
Average (ms) | 0.00 | 0.00 | 0.00 |
Maximum (ms) | 1.19 | 2.86 | 1.80 |
File I/O
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Reads per Second | 1,239.86 | 2,278.73 | 1,979.78 |
Writes per Second | 826.55 | 1,519.11 | 1,319.85 |
Fsyncs per Second | 2,649.72 | 4,865.26 | 4,227.63 |
Minimum (ms) | 0.00 | 0.00 | 0.00 |
Average (ms) | 0.21 | 0.14 | 0.15 |
Maximum (ms) | 15.70 | 36.52 | 21.60 |
MySQL
Read Only
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Transactions per Second | 4,761.33 | 6,571.33 | 3,900.67 |
Queries per Second | 76,181.33 | 105,141.33 | 62,410.67 |
Minimum (ms) | 1.12 | 1.10 | 1.61 |
Average (ms) | 2.10 | 1.55 | 2.96 |
Maximum (ms) | 25.43 | 115.15 | 40.55 |
Write Only
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Transactions per Second | 1,710.00 | 6,286.33 | 3,830.00 |
Queries per Second | 10,260.00 | 37,718.00 | 22,980.00 |
Minimum (ms) | 1.91 | 0.68 | 1.27 |
Average (ms) | 5.90 | 1.69 | 2.66 |
Maximum (ms) | 45.09 | 63.65 | 20.72 |
Read Write
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Transactions per Second | 1,174.33 | 2,744.33 | 1,308.67 |
Queries per Second | 23,486.67 | 54,886.67 | 26,173.33 |
Minimum (ms) | 3.64 | 1.93 | 6.10 |
Average (ms) | 8.55 | 3.91 | 17.24 |
Maximum (ms) | 40.70 | 77.67 | 131.91 |
Redis
DigitalOcean | Linode | Vultr | |
---|---|---|---|
PING_INLINE | 35,367.95 | 53,706.20 | 23,910.30 |
PING_BULK | 32,201.66 | 49,372.72 | 23,077.93 |
SET | 34,099.83 | 53,049.90 | 24,894.74 |
GET | 36,862.94 | 51,357.72 | 23,742.55 |
INCR | 38,078.55 | 53,271.38 | 24,420.16 |
LPUSH | 36,748.32 | 55,214.18 | 26,812.20 |
RPUSH | 38,721.87 | 56,645.41 | 26,240.12 |
LPOP | 38,674.73 | 55,418.70 | 25,879.81 |
RPOP | 38,880.25 | 56,542.21 | 25,391.27 |
SADD | 36,478.52 | 53,754.17 | 24,126.62 |
HSET | 35,878.63 | 54,551.14 | 25,142.47 |
SPOP | 31,770.70 | 51,868.85 | 23,807.16 |
LRANGE_100 (first 100 elements) | 23,202.65 | 25,427.70 | 18,269.39 |
LRANGE_300 (first 300 elements) | 10,594.74 | 10,583.39 | 8,687.92 |
LRANGE_500 (first 500 elements) | 8,821.02 | 8,217.57 | 6,588.70 |
LRANGE_600 (first 600 elements) | 7,061.06 | 6,855.33 | 5,691.54 |
MSET (10 keys) | 44,252.93 | 60,177.61 | 32,786.22 |
Conclusion
I went into this not really knowing what to expect. Knowing DigitalOcean had raised the price of their 1 GB plan by a buck, I half expected them to throw up better numbers, similar to the Vultr High Frequency plans.
That said, Linode really shining this month across most categories. While Linode seems dated at times in their offering, similar to the tortoise, they usually win the long game.
Worth nothing, I know that Linode is now technically called Akamai Connected Cloud. Until Akamai decides to redirect linode.com to a new domain, I’m going to dig my heels in and keep calling them Linode.