16C32G 一个月不到 50 欧元的服务商——Hetzner 简评
几个月之前和 Plausible Analytics 的 CEO 聊了聊之后发现了 Hetzner 这么个服务商,经过一段时间的尝试之后发现体验真心不错并逐渐将自己的基础设施迁移到了 Hetzner 上,目前使用了快半年了,借此做一个小小的简评。
Hetzner Online GmbH is a company and data center operator based in Gunzenhausen, Germany.
Hetzner 是个德国的服务商,拥有自己的 Server Parks( https://www.hetzner.com/unternehmen/rechenzentrum ),据我个人观察,在 LocalBitcoins 切换到 Sendgrid 之前也是使用的 Hetzner 的机器来发的邮件。
对于我个人而言,Hetzner 最吸引我的地方在于以下几点。
较为友好的 Terraform Provider
由于我大量使用 Terraform 来管理自己的基础设施, Hetzner 的整体逻辑有点像 DigitalOcean,不像 AWS 有太多关于 VPC,Subnet,SG 的复杂配置,对于一个比较简单的项目而言,要创建对应的内网段,内网 IP,和机器来说的话, Terraform 文件基本类似如下简单:
机器配置,设置一个稳定的内网 IP:
resource "hcloud_server" "app_server" {
name = "app_server"
image = var.os_type
server_type = "cpx21"
location = "fsn1"
ssh_keys = [hcloud_ssh_key.default.id]
labels = {
"clickhouse" = "true"
}
backups = true
delete_protection = true
rebuild_protection = true
firewall_ids = [hcloud_firewall.server_firewall.id]
}
resource "hcloud_server_network" "app_network" {
server_id = hcloud_server.app_server.id
network_id = hcloud_network.nova_private.id
ip = "10.1.0.10"
}
网络段的设置:
resource "hcloud_network" "app_private" {
name = "app_private"
ip_range = var.ip_range
}
resource "hcloud_network_subnet" "app_private_subnet" {
network_id = hcloud_network.app_private.id
type = "cloud"
network_zone = "eu-central"
ip_range = var.ip_range
}
默认 SSH :
resource "hcloud_ssh_key" "default" {
name = "app_pem_key"
public_key = file("~/.ssh/new_id_rsa.pub")
}
不过没法通过 Terraform 来升级机器配置(这点感觉不如 AWS),升级机器需要手动关闭机器后登录到 Web 管理页面点击升级。
内网互通
Yes, you can connect instances from our locations in Falkenstein, Nuremberg and Helsinki to the same network
只要在一个内网下,Hetzner 的欧洲三个可用区之间是内网互通的,而且之间的流量是免费的,比如从芬兰到德国的延迟是这样的:
root@ubuntu-2gb-hel1-1:~# ping 10.0.0.3
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=63 time=25.5 ms
64 bytes from 10.0.0.3: icmp_seq=2 ttl=63 time=23.9 ms
64 bytes from 10.0.0.3: icmp_seq=3 ttl=63 time=24.1 ms
64 bytes from 10.0.0.3: icmp_seq=4 ttl=63 time=23.9 ms
64 bytes from 10.0.0.3: icmp_seq=5 ttl=63 time=23.9 ms
64 bytes from 10.0.0.3: icmp_seq=6 ttl=63 time=23.9 ms
测速结果如下:
root@ubuntu-2gb-hel1-1:~# iperf3 -c 10.0.0.3
Connecting to host 10.0.0.3, port 5201
[ 5] local 10.0.0.2 port 40820 connected to 10.0.0.3 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 88.6 MBytes 743 Mbits/sec 265 3.99 MBytes
[ 5] 1.00-2.00 sec 115 MBytes 965 Mbits/sec 0 3.99 MBytes
[ 5] 2.00-3.00 sec 115 MBytes 965 Mbits/sec 0 3.99 MBytes
[ 5] 3.00-4.00 sec 119 MBytes 996 Mbits/sec 0 3.99 MBytes
[ 5] 4.00-5.00 sec 116 MBytes 975 Mbits/sec 0 3.99 MBytes
[ 5] 5.00-6.00 sec 116 MBytes 975 Mbits/sec 0 3.99 MBytes
[ 5] 6.00-7.00 sec 116 MBytes 975 Mbits/sec 0 3.99 MBytes
[ 5] 7.00-8.00 sec 109 MBytes 912 Mbits/sec 271 2.86 MBytes
[ 5] 8.00-9.00 sec 116 MBytes 975 Mbits/sec 0 3.00 MBytes
[ 5] 9.00-10.00 sec 90.0 MBytes 755 Mbits/sec 317 1.51 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.08 GBytes 924 Mbits/sec 853 sender
[ 5] 0.00-10.02 sec 1.07 GBytes 920 Mbits/sec receiver
iperf Done.
root@ubuntu-2gb-hel1-1:~# iperf3 -c 10.0.0.3 -R
Connecting to host 10.0.0.3, port 5201
Reverse mode, remote host 10.0.0.3 is sending
[ 5] local 10.0.0.2 port 40824 connected to 10.0.0.3 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 96.1 MBytes 806 Mbits/sec
[ 5] 1.00-2.00 sec 114 MBytes 958 Mbits/sec
[ 5] 2.00-3.00 sec 119 MBytes 1.00 Gbits/sec
[ 5] 3.00-4.00 sec 67.5 MBytes 566 Mbits/sec
[ 5] 4.00-5.00 sec 66.7 MBytes 559 Mbits/sec
[ 5] 5.00-6.00 sec 68.2 MBytes 572 Mbits/sec
[ 5] 6.00-7.00 sec 70.5 MBytes 591 Mbits/sec
[ 5] 7.00-8.00 sec 73.2 MBytes 614 Mbits/sec
[ 5] 8.00-9.00 sec 73.4 MBytes 616 Mbits/sec
[ 5] 9.00-10.00 sec 59.8 MBytes 502 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.02 sec 812 MBytes 680 Mbits/sec 1099 sender
[ 5] 0.00-10.00 sec 809 MBytes 678 Mbits/sec receiver
iperf Done.
有了这样的结构的话,我们可以将 App (或者 K8s 集群)分散在不同的 Region 下,然后使用内网互联。
什么时候深圳到香港的内网可以这么跑而且免费就好了
较为友好的价格
如果说简单的 Terraform 这种对于大多数「The developer cloud」都有的话,那么价格这块也是一个非常重要的因素,首先我们可以看看大家用的很多的 DigitalOcean 的价格。
然后对比一下 Hetzner 的价格:
可以看到 Hetzner 即使到了 16Core,32G 的配置,价格也控制在了不到 50EUR/mo,对应 DO 上类似配置的是 General Purpose Droplets 的 8vCPUs,32GB 已经到了 272USD/mo,且 Hetzner 给所有的机器都给了 20TB 的流量。
(注:Hetzner 也是按照小时计费的)
如此高的性价比,我的第一个尝试便是在之前的 ClickHouse 测试「ClickHouse 各版本在不同 CPU 架构上的性能差异对比」中大量使用 Hetzner 的机器作为 Self-Hosted Runner,发现特别香,之后便将自己的各种异构(非生产)应用全部丢到了 Hetzner 上。
缺点
Hetzner 也有对应的缺点,对于我们常规用户而言一般是如下:
- 注册风控很严,如果不填写真实的信息(且用真实 IP 之类)的话容易被直接「Account is closed」,不过一般来说在正常使用了一个月出了账单并成功付款后就比较稳了
- 到大陆地区延迟很大(毕竟欧洲服务商),不适合建站并直接解析上去用,不过特别适合起服务后通过 Cloudflare Argo Tunnel 来暴露
- 相比较各种「The developer cloud」而言,缺乏很多设施,比如 Managed SQL,Managed K8s 之类,他们提供的只有 VM,Network,Disk ,比较原始,对于一个典型的生产环境应用(Managed K8s + 各种 Managed DB/Redis)而言会有较大的运维成本。
- 有过些奇怪的故障,比如 https://news.ycombinator.com/item?id=31015840 , https://lowendtalk.com/discussion/178548/hetzner-data-loss-incident
总结
目前我已经将大部分自己的基础设施(包括但不限于 WebP Cloud Service,MagLink,GitHub Runner 等)迁移到了 Hetzner 上,并且感觉在我的使用场景下使用体验不错,如果你也想试试看的话,欢迎点以下链接来注册: https://hetzner.cloud/?ref=6moYBzkpMb9s ,这样你可以在注册后直接得到 20EUR 的 Credit 用于玩耍。