I am using both DigitalOcean and Hetzner for years and in this article, I would like to make a comparison between them to see which one is for you and see the performance that both have to offer. You can find a Hetzner Review and a DigitalOcean Review if you want to see more details. Hetzner is an inexpensive and reliable DigitalOcean alternative when it comes to droplets.
For both of them, we will only check the VPS part and what has to offer, both are offering a variety of services besides VPS that we are not going to cover in this article.
With both services, you can host WordPress websites with CyberPanel or you can have Docker installed and host multiple apps with Nginx as a reverse proxy. You can host apps like the Uptime Monitoring tool, or Google Analytics alternative with Plausible.
Other very good option that I am currently using to host more then 10 websites without any downtime is CloudPanel, you can check the CloudPanel Install tutorial.
If you are interested to see how the best VPS providers compare check the DigitalOcean vs Vultr vs Hetzner article.
Now let’s dive into the fun part and see how both services are doing in terms of features, price, and performance, and see why Hetzner is the best alternative to DigitalOcean.
The cheapest VPS that you can create starts at 5$ and it has 1 CPU and 1GB of RAM. Then the price doubles and for instance for a 2 CPU with 4 GB of RAM you pay 20$
DigitalOcean has 8 data centers around the world that you can use. in the US you have 2, in Europe another 3, Asia 2, and Canada 1
Winner
DigitalOcean is having a clean UI with easy-to-access services. Below is a picture:
So I will use a 2CPU with 2 GB of Memory regular one at 15 USD a month. In Ney York datacenter.
VPS YABS Bench Test
root@ubuntu-s-2vcpu-2gb-nyc3-01:~# curl -sL yabs.sh | bash
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
# Yet-Another-Bench-Script #
# v2022-02-18 #
# https://github.com/masonr/yet-another-bench-script #
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
Tue Mar 8 15:31:37 UTC 2022
Basic System Information:
---------------------------------
Processor : DO-Regular
CPU cores : 2 @ 2294.576 MHz
AES-NI : ✔ Enabled
VM-x/AMD-V : ✔ Enabled
RAM : 1.9 GiB
Swap : 2.0 GiB
Disk : 58.1 GiB
fio Disk Speed Tests (Mixed R/W 50/50):
---------------------------------
Block Size | 4k (IOPS) | 64k (IOPS)
------ | --- ---- | ---- ----
Read | 52.02 MB/s (13.0k) | 507.68 MB/s (7.9k)
Write | 52.09 MB/s (13.0k) | 510.35 MB/s (7.9k)
Total | 104.12 MB/s (26.0k) | 1.01 GB/s (15.9k)
| |
Block Size | 512k (IOPS) | 1m (IOPS)
------ | --- ---- | ---- ----
Read | 645.25 MB/s (1.2k) | 686.12 MB/s (670)
Write | 679.54 MB/s (1.3k) | 731.82 MB/s (714)
Total | 1.32 GB/s (2.5k) | 1.41 GB/s (1.3k)
iperf3 Network Speed Tests (IPv4):
---------------------------------
Provider | Location (Link) | Send Speed | Recv Speed
| | |
Clouvider | London, UK (10G) | 55.1 Mbits/sec | 78.0 Mbits/sec
Online.net | Paris, FR (10G) | 1.77 Gbits/sec | 2.21 Gbits/sec
WorldStream | The Netherlands (10G) | 1.86 Gbits/sec | 2.33 Gbits/sec
WebHorizon | Singapore (400M) | 517 Mbits/sec | 419 Mbits/sec
Clouvider | NYC, NY, US (10G) | 2.00 Gbits/sec | 7.68 Gbits/sec
Velocity Online | Tallahassee, FL, US (10G) | 1.32 Gbits/sec | 4.04 Gbits/sec
Clouvider | Los Angeles, CA, US (10G) | 1.73 Gbits/sec | 106 Mbits/sec
Iveloz Telecom | Sao Paulo, BR (2G) | 238 Mbits/sec | 1.60 Gbits/sec
Geekbench 5 Benchmark Test:
---------------------------------
Test | Value
|
Single Core | 533
Multi Core | 949
Full Test | https://browser.geekbench.com/v5/cpu/13322675
The cheapest price that Hetzner has also started from about 4.51 EUROS without tax and you get 1CPU with 2 GB of RAM. For 2 CPUs and 2 GB of RAM, you will pay 5.18 EURO. Prices are cheaper at Hetzner, here is the clear winner.
Winner
Hetzner is the only data center on 2 Continents 2 in US and 3 in Europe (Germany and Finland).
Hetzner has a similar interface with a clean UI, there is no clear winner here:
Here we will go use a 2CPU 2 GB of RAM in Ashburn at 5.18 Euros.
VPS YABS Bench Test
root@cyberpanel-test:~# curl -sL yabs.sh | bash
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
# Yet-Another-Bench-Script #
# v2022-02-18 #
# https://github.com/masonr/yet-another-bench-script #
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
Tue Mar 8 08:22:55 UTC 2022
Basic System Information:
---------------------------------
Processor : AMD EPYC Processor
CPU cores : 2 @ 2445.406 MHz
AES-NI : ✔ Enabled
VM-x/AMD-V : ❌ Disabled
RAM : 1.9 GiB
Swap : 2.0 GiB
Disk : 37.5 GiB
fio Disk Speed Tests (Mixed R/W 50/50):
---------------------------------
Block Size | 4k (IOPS) | 64k (IOPS)
------ | --- ---- | ---- ----
Read | 148.06 MB/s (37.0k) | 1.38 GB/s (21.6k)
Write | 148.45 MB/s (37.1k) | 1.38 GB/s (21.7k)
Total | 296.52 MB/s (74.1k) | 2.77 GB/s (43.3k)
| |
Block Size | 512k (IOPS) | 1m (IOPS)
------ | --- ---- | ---- ----
Read | 2.41 GB/s (4.7k) | 3.02 GB/s (2.9k)
Write | 2.54 GB/s (4.9k) | 3.22 GB/s (3.1k)
Total | 4.96 GB/s (9.6k) | 6.25 GB/s (6.1k)
iperf3 Network Speed Tests (IPv4):
---------------------------------
Provider | Location (Link) | Send Speed | Recv Speed
| | |
Clouvider | London, UK (10G) | 49.9 Mbits/sec | 77.0 Mbits/sec
Online.net | Paris, FR (10G) | 802 Mbits/sec | 1.55 Gbits/sec
WorldStream | The Netherlands (10G) | busy | busy
WebHorizon | Singapore (400M) | 238 Mbits/sec | 52.8 Mbits/sec
Clouvider | NYC, NY, US (10G) | 829 Mbits/sec | 5.06 Gbits/sec
Velocity Online | Tallahassee, FL, US (10G) | 774 Mbits/sec | 3.76 Gbits/sec
Clouvider | Los Angeles, CA, US (10G) | 710 Mbits/sec | 122 Mbits/sec
Iveloz Telecom | Sao Paulo, BR (2G) | 704 Mbits/sec | 1.51 Gbits/sec
iperf3 Network Speed Tests (IPv6):
---------------------------------
Provider | Location (Link) | Send Speed | Recv Speed
| | |
Clouvider | London, UK (10G) | 47.6 Mbits/sec | 80.5 Mbits/sec
Online.net | Paris, FR (10G) | 1.06 Gbits/sec | 1.13 Gbits/sec
WorldStream | The Netherlands (10G) | 949 Mbits/sec | 1.59 Gbits/sec
WebHorizon | Singapore (400M) | 614 Mbits/sec | 388 Mbits/sec
Clouvider | NYC, NY, US (10G) | 1.04 Gbits/sec | 4.78 Gbits/sec
Clouvider | Los Angeles, CA, US (10G) | 1.01 Gbits/sec | 116 Mbits/sec
Geekbench 5 Benchmark Test:
---------------------------------
Test | Value
|
Single Core | 1096
Multi Core | 2075
Full Test | https://browser.geekbench.com/v5/cpu/13309178
As can be seen in the above test Hetzner 5Euro VPS is better in every aspect than DigitalOcean, the IO is better and the CPU is 2 times better. DigitalOcean has high frequently she’s but they are more expensive, here I wanted to see the basic shapes. And here Hetzner is the clear winner.
WordPress Test
Let’s see some tests with WordPress and Kadence theme installed with the default starter template.
WordPress Test
Both sites have the same plugins and configs, so they are identical.
The results are very similar for both of them, you can optimize them even further if you want. Next, let’s do the stress test for both servers.
Stress Test
top - 07:42:07 up 36 min, 1 user, load average: 0.01, 0.00, 0.00
Tasks: 144 total, 1 running, 143 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.7 us, 2.7 sy, 0.0 ni, 89.7 id, 0.0 wa, 0.0 hi, 4.6 si, 0.2 st
MiB Mem : 1983.2 total, 591.5 free, 516.2 used, 875.5 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1262.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5887 nobody 20 0 37520 21000 7616 S 8.0 1.0 0:05.47 litespeed
5888 nobody 20 0 36292 21820 8368 S 6.3 1.1 0:04.76 litespeed
18 root 20 0 0 0 0 S 0.7 0.0 0:00.30 ksoftirqd/1
790 redis 20 0 51700 4536 3236 S 0.7 0.2 0:04.14 redis-server
1 root 20 0 104124 11708 8400 S 0.0 0.6 0:02.56 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
10 root 20 0 0 0 0 S 0.0 0.0 0:00.28 ksoftirqd/0
root@ubuntu-server:/opt/k6# k6 run --vus 200 --duration 100s dobitdoze.js
/\ |‾‾| /‾‾/ /‾‾/
/\ / \ | |/ / / /
/ \/ \ | ( / ‾‾\
/ \ | |\ \ | (‾) |
/ __________ \ |__| \__\ \_____/ .io
execution: local
script: dobitdoze.js
output: -
scenarios: (100.00%) 1 scenario, 200 max VUs, 2m10s max duration (incl. graceful stop):
* default: 200 looping VUs for 1m40s (gracefulStop: 30s)
running (1m41.4s), 000/200 VUs, 14728 complete and 0 interrupted iterations
default ✓ [======================================] 200 VUs 1m40s
data_received..................: 2.0 GB 19 MB/s
data_sent......................: 3.8 MB 38 kB/s
http_req_blocked...............: avg=3.13ms min=170ns med=361ns max=260.99ms p(90)=551ns p(95)=621ns
http_req_connecting............: avg=1.26ms min=0s med=0s max=97.5ms p(90)=0s p(95)=0s
http_req_duration..............: avg=362.01ms min=349.17ms med=361.57ms max=847.1ms p(90)=363.27ms p(95)=364.5ms
{ expected_response:true }...: avg=362.01ms min=349.17ms med=361.57ms max=847.1ms p(90)=363.27ms p(95)=364.5ms
http_req_failed................: 0.00% ✓ 0 ✗ 14728
http_req_receiving.............: avg=268.19ms min=174.67ms med=270.81ms max=544.26ms p(90)=271.91ms p(95)=272.39ms
http_req_sending...............: avg=50.32µs min=17.53µs med=45.51µs max=915.27µs p(90)=70.44µs p(95)=83.87µs
http_req_tls_handshaking.......: avg=1.79ms min=0s med=0s max=157.64ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=93.76ms min=87.35ms med=90.56ms max=665.17ms p(90)=91.3ms p(95)=91.85ms
http_reqs......................: 14728 145.302003/s
iteration_duration.............: avg=1.36s min=1.34s med=1.36s max=2.1s p(90)=1.36s p(95)=1.36s
iterations.....................: 14728 145.302003/s
vus............................: 64 min=64 max=200
vus_max........................: 200 min=200 max=200
Stress Test
top - 09:20:42 up 32 min, 1 user, load average: 0.06, 0.11, 0.08
Tasks: 161 total, 3 running, 158 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.8 us, 2.5 sy, 0.0 ni, 86.2 id, 0.0 wa, 0.0 hi, 9.5 si, 0.0 st
MiB Mem : 1935.1 total, 614.6 free, 513.1 used, 807.3 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1215.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5038 nobody 20 0 41908 26496 8716 S 5.7 1.3 0:24.90 litespeed
5039 nobody 20 0 39696 23920 8540 R 5.3 1.2 0:24.07 litespeed
10 root 20 0 0 0 0 S 0.3 0.0 0:01.27 ksoftirqd/0
556 root 20 0 6444 3704 3484 S 0.3 0.2 0:00.87 qemu-ga
669 redis 20 0 50188 4588 3284 S 0.3 0.2 0:02.31 redis-server
5746 root 20 0 9256 3704 3156 R 0.3 0.2 0:00.06 top
1 root 20 0 167496 11532 8360 S 0.0 0.6 0:01.80 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kbloc+
root@ubuntu-server:/opt/k6# k6 run --vus 200 --duration 100s htbitdoze.js
/\ |‾‾| /‾‾/ /‾‾/
/\ / \ | |/ / / /
/ \/ \ | ( / ‾‾\
/ \ | |\ \ | (‾) |
/ __________ \ |__| \__\ \_____/ .io
execution: local
script: htbitdoze.js
output: -
scenarios: (100.00%) 1 scenario, 200 max VUs, 2m10s max duration (incl. graceful stop):
* default: 200 looping VUs for 1m40s (gracefulStop: 30s)
running (1m41.4s), 000/200 VUs, 14412 complete and 0 interrupted iterations
default ✓ [======================================] 200 VUs 1m40s
data_received..................: 1.9 GB 19 MB/s
data_sent......................: 4.5 MB 44 kB/s
http_req_blocked...............: avg=3.6ms min=140ns med=351ns max=289.26ms p(90)=521ns p(95)=611ns
http_req_connecting............: avg=1.42ms min=0s med=0s max=108.62ms p(90)=0s p(95)=0s
http_req_duration..............: avg=395.37ms min=380.2ms med=397.11ms max=574.81ms p(90)=406.78ms p(95)=413.78ms
{ expected_response:true }...: avg=395.37ms min=380.2ms med=397.11ms max=574.81ms p(90)=406.78ms p(95)=413.78ms
http_req_failed................: 0.00% ✓ 0 ✗ 14412
http_req_receiving.............: avg=295.29ms min=202.57ms med=297.76ms max=346.7ms p(90)=306.03ms p(95)=312.44ms
http_req_sending...............: avg=50.2µs min=15.76µs med=44.77µs max=4.56ms p(90)=72.82µs p(95)=88.06µs
http_req_tls_handshaking.......: avg=1.89ms min=0s med=0s max=162.39ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=100.02ms min=95.02ms med=99.06ms max=360.37ms p(90)=99.79ms p(95)=100.33ms
http_reqs......................: 14412 142.159372/s
iteration_duration.............: avg=1.39s min=1.38s med=1.39s max=1.86s p(90)=1.4s p(95)=1.41s
iterations.....................: 14412 142.159372/s
vus............................: 112 min=112 max=200
vus_max........................: 200 min=200 max=200
As can be seen in the above tests the results are very similar on both servers, there wasn’t any major difference, both servers were capable of handling the load without issues. The response time was similar for both. So you will not go wrong with any of them, the only difference is the money and in case you will have an even bigger load the Hetzner VPS can handle more traffic.
As the results for the tests with YABS for DigitalOcean regular shape I thought to test also an AMD NVNe shape with similar specifications 2 CPU and 2 GB of RAM, this shape is 18$ a month. I will only make this test as this is the most concluded one for server resources and in any case, WordPress tests were at a tie.
Below are the results:
root@ubuntu-s-2vcpu-2gb-amd-nyc3-01:~# curl -sL yabs.sh | bash
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
# Yet-Another-Bench-Script #
# v2022-02-18 #
# https://github.com/masonr/yet-another-bench-script #
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
Wed Mar 9 07:48:32 UTC 2022
Basic System Information:
---------------------------------
Processor : DO-Premium-AMD
CPU cores : 2 @ 1996.248 MHz
AES-NI : ✔ Enabled
VM-x/AMD-V : ✔ Enabled
RAM : 1.9 GiB
Swap : 0.0 KiB
Disk : 58.1 GiB
fio Disk Speed Tests (Mixed R/W 50/50):
---------------------------------
Block Size | 4k (IOPS) | 64k (IOPS)
------ | --- ---- | ---- ----
Read | 136.79 MB/s (34.1k) | 768.42 MB/s (12.0k)
Write | 137.15 MB/s (34.2k) | 772.46 MB/s (12.0k)
Total | 273.95 MB/s (68.4k) | 1.54 GB/s (24.0k)
| |
Block Size | 512k (IOPS) | 1m (IOPS)
------ | --- ---- | ---- ----
Read | 1.20 GB/s (2.3k) | 1.23 GB/s (1.2k)
Write | 1.26 GB/s (2.4k) | 1.31 GB/s (1.2k)
Total | 2.46 GB/s (4.8k) | 2.54 GB/s (2.4k)
iperf3 Network Speed Tests (IPv4):
---------------------------------
Provider | Location (Link) | Send Speed | Recv Speed
| | |
Clouvider | London, UK (10G) | 54.7 Mbits/sec | 98.2 Mbits/sec
Online.net | Paris, FR (10G) | 1.89 Gbits/sec | busy
WorldStream | The Netherlands (10G) | 1.85 Gbits/sec | 2.36 Gbits/sec
WebHorizon | Singapore (400M) | 601 Mbits/sec | 420 Mbits/sec
Clouvider | NYC, NY, US (10G) | 2.01 Gbits/sec | 7.57 Gbits/sec
Velocity Online | Tallahassee, FL, US (10G) | 1.86 Gbits/sec | 3.78 Gbits/sec
Clouvider | Los Angeles, CA, US (10G) | 1.76 Gbits/sec | 124 Mbits/sec
Iveloz Telecom | Sao Paulo, BR (2G) | 278 Mbits/sec | 1.62 Gbits/sec
Geekbench 5 Benchmark Test:
---------------------------------
Test | Value
|
Single Core | 710
Multi Core | 1340
Full Test | https://browser.geekbench.com/v5/cpu/13345264
As you can see in the above test the Premium AMD service that costs 18$ doesn’t beat Hetzner and with 5$ you can get a VPS that is more powerful than the DigitalOcean one.
From my tests and experience with Hetzner, they are a very good alternative to DigitalOcean. The prices and performance of their AMD VPS are superior to DigitalOcean. The only stop from my point of view is if you need a data center that Hetzner doesn’t have.
Both services are offering promotions in granting you credits so if you want to test them on your own you can use the bellow links (affiliate):