WebP Cloud Services Blog

Hetzner CAX 系列 ARM64 服务器性能简评以及 WebP Cloud Services 在其上的实践

· Nova Kwok

This article is also available in English, at The performance review of Hetzner’s CAX-line ARM64 servers and the practical experience of WebP Cloud Services on them.

TL;DR 本文的一些重要结论:

  • Hetzner ARM64 的表现非常不错, 4 核心的 CAX21(ARM64,4Core,8G RAM) 机器在 WebP 转换速度上相比较 3 核心的 CPX21(AMD64,3Core,4G RAM) 只差了 8%,而他们两者的价格差别是 14%(8.40 USD/mo vs 9.76 USD/mo),此外 CAX21 还拥有着 CPX21 两倍的内存。
  • 由于 ARM64 测试表现非常惊艳,我们将 WebP Cloud Services 的两个服务全部迁移到了 Hetzner 的 ARM64 服务器上。
  • Hetzner Volume 的速度不是非常快,大概是 LocalSSD 的 1/3 左右,但是优势在于数据安全性更高。

在很久之前,2015 年,Scaleway 发布了基于 ARM64 处理器的服务器——C1,一个基于 Marvell Armada 370/XP quad core ARM Cortex A9 处理器,带有 2GB 内存的,自己设计的服务器,没有使用任何虚拟化而直接以 Bare metal 的形式出售,官方价格大约每个月 3 美元,机器硬件外观如下:

https://twitter.com/edouardb_/status/787212549628526592

且由于使用了自己研发的主板等,C1 在机箱中的密度可以非常高,Scaleway 公开的图片中他们的机箱内部是这样的:

这在当时成为了那个几乎全民 Intel Xeon 的年代第一个大量对外提供 ARM64 架构的服务商,虽然我们可以从一个 Benchmark ,比如 https://browser.geekbench.com/geekbench2/2576212 或者 https://medium.com/amarao/scaleway-arm-servers-50f85c4cefbe 中发现这个 ARM 处理器的性能和主流 AMD64 架构服务器相差甚远,但这也让人们意识到原来 ARM64 的架构也可以在服务器领域有所作为,当时我还为此专门发了一条推: https://twitter.com/n0vad3v/status/931344460633403394

但是 3 年后,在 2020 年,Scaleway 发布了一个声明宣布停止运营 ARM64 机器:

为此我又发了个推: https://twitter.com/n0vad3v/status/1253577191280930817

不过,在 Scaleway 结束运营 C1 系列 ARM64 机器过去三年后,在 2023 年 Scaleway 又重新开始提供 ARM64 处理器的服务器,称为 AMP 系列,使用 Altra Max 处理器。

在 2020 ~ 2023 期间,市面上主流云服务厂商中就只有 AWS 还在出售 ARM64 的机器,使用 AWS 自己的 Graviton 处理器,但是熟悉 AWS 的朋友可能知道,虽然 AWS Graviton 系列机器已经相比较传统的机器有所下降,但是计算一下 Pricing 我们可以知道,在现在这个时间(2023 年 6 月),虽然 AWS 最便宜的 ARM64 机器 t4g.nano (2Core 0.5GiB RAM)是 0.0042 USD/hr,折合每个月 3USD,但是一旦考虑到要在上面跑负载的话,0.5GiB 的 RAM 可能没法跑任何负载,可能 1Core 2G RAM 会成为最小可用的配置,那对应配置则是 t4g.small (2Core 2GiB RAM),是 0.0168 USD/hr,折合每个月 18USD,而且这还不包括潜在的流量/磁盘等费用的价格,以及这类是突发性能实例,长期 CPU 占用比较高的话会被限制或者额外计算价格。

为此,我们盘点了一下目前市面上比较流行的且提供 ARM64 处理的服务商,整理表格如下:

我们对比了一下几个提供 ARM64 机器的平台的 4Core 8G 的价格:

服务商机器名称磁盘空间价格(折算每月,美元)链接额外描述
HetznerCAX2180G8.38https://www.hetzner.com/cloudStarting now, we also have four brand new Hetzner Cloud server plans which we’ve built around innovative Arm technology. You can get your hands on up to 16 vCPUs based on Ampere® Altra® processors.
AWSa1.xlarge额外付费73https://aws.amazon.com/ec2/pricing/on-demand/
ScalewayAMP2-C410G15https://www.scaleway.com/en/amp2-instances/Please note that these Instances are currently in a trial phase. It is not recommended to use them to host critical services.
Oracle CloudVM.Standard.A1.Flex额外付费0(Free Tier)https://www.oracle.com/sg/cloud/costestimator.htmlEach tenancy gets the first 3,000 OCPU hours and 18,000 GB hours per month for free to create Ampere A1 Compute instances using the VM.Standard.A1.Flex shape (equivalent to 4 OCPUs and 24 GB of memory).
AlibabacloudARM General purpose instance ecs.g8y.xlarge额外付费92.26https://www.alibabacloud.com/product/ecs

可以看到在 Oracle Cloud 的 Free Tier 以外,Hetzner 的价格最低,且不像 Scaleway 一样声称自己的 ARM64 机器为实验性产品并不保证 SLA。

上面的服务商中除了 AWS 以外,无一例外的都使用了 Ampere 处理器。

Hetzner 在 2023-04-23 的一篇新闻 https://www.hetzner.com/news/arm64-cloud 中第一次公开了 CAX 线的 ARM64 云服务器,基于 Ampere Altra,不过并没有明确标明是哪个型号,在他们 ARM64 独立服务器的新闻 https://www.hetzner.com/news/07-22-rx-line/ 中,我们知道 RX 线的服务器使用的是 Ampere Altra Q80-30 SoC,所以或许可以猜测一下这里 CAX 也许是同款处理器。

Hetzner ARM64 Pricing

从 Pricing 页面我们可以看到 ARM64 服务器的性价比很不错,只要 7.73EUR/mo 就可以得到一个 4Core 8GB 的机器。

在 WebP Cloud Services 团队,我们对于使用 ARM64 的机器能带来的效果非常感兴趣,同时非常乐意在 ARM64 的平台上测试我们的产品,于是我们在不同的机器上进行了一些测试,并在本文中分享出来,供有类似需求的读者参考。

测试机器

我们的测试机器有五台:

  • 一台独立服务器,CPU 为 Xeon E3-1230 v3 @ 3.30GHz,8核心(4核8线程),32G DDR 3 内存,每个月价格 30USD,以下简称 Xeon
  • Hetzner CPX21 ,CPU 为虚拟化的 AMD EPYC 2.4GHz,3 核心(vCPU),4G 内存,折算每月价格 9.76USD,以下简称 CPX21
  • Hetzner CAX11,CPU 为虚拟化的 ARM64 处理器,2 核心(vCPU),4G 内存,折算每月价格 4.91USD,以下简称 CAX11
  • Hetzner CAX21,CPU 为虚拟化的 ARM64 处理器,4 核心(vCPU),8G 内存,折算每月价格 8.40USD,以下简称 CAX21
  • Oracle Cloud,CPU 为虚拟化的 ARM64 处理器,4 核心(vCPU),20G 内存,由于是 Free Tier ,每个月价格是 0 ,以下简称 Oracle

测试脚本使用 https://github.com/masonr/yet-another-bench-script,指令为:

curl -sL yabs.sh | bash -s -- -i

这个脚本使用 fio 进行磁盘性能测试,使用 iperf3 进行网络性能测试,以及使用 Geekbench 进行 CPU/内存性能测试,由于都是服务商提供的 1Gbps 的带宽,我们这里会跳过网络测试,只进行 GeekBench 测试和磁盘测试。

GeekBench 测试

我们从 GeekBench 6 测试开始

Xeon 的成绩为:

Processor  : Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz
CPU cores  : 8 @ 3700.000 MHz
AES-NI     :  Enabled
VM-x/AMD-V :  Enabled

Single Core     | 1103                          
Multi Core      | 3353            

CPX21 的成绩为:

Processor  : AMD EPYC Processor
CPU cores  : 3 @ 2495.310 MHz
AES-NI     :  Enabled
VM-x/AMD-V :  Disabled

Single Core     | 1222                          
Multi Core      | 3107             

CAX11 的成绩为:

Processor  : Neoverse-N1
CPU cores  : 2 @ ??? MHz
AES-NI     :  Enabled
VM-x/AMD-V :  Disabled

Single Core     | 1072                          
Multi Core      | 1921   

CAX21 的成绩为:

Processor  : Neoverse-N1
CPU cores  : 4 @ ??? MHz
AES-NI     :  Enabled
VM-x/AMD-V :  Disabled

Single Core     | 1068                          
Multi Core      | 3444    

Oracle 的成绩为:

Processor  : Neoverse-N1
CPU cores  : 4 @ ??? MHz
AES-NI     :  Enabled
VM-x/AMD-V :  Disabled

Single Core     | 1066
Multi Core      | 2666

我们可以得到一些结论:

  • 服务器 CPU 性能不是主频越高就越好,主频有 3.8GHz 且有 8 个核心的 Xeon 处理器在多核性能上甚至只能和 2.4GHz 且只有 3 个核心的 AMD EPYC 虚拟化处理器持平
  • Neoverse N1 架构的 Ampere Altra 的性能已经不容小觑,4Core ARM64 在 Geekbench 6 测试中多核性能甚至已经超过了三核虚拟化 AMD 核心
  • 同样标记为 Neoverse-N1 的 Oracle Cloud 的 ARM64 核心似乎相比较 Hetzner 的性能有些下降,可能是由于 Free Tier 上面用户太多导致

WebP Encode 测试

由于我们计划在 ARM64 上运行我们的服务,所以我们来聊聊我们这边的事情,目前 WebP Cloud Services 有两个服务:

  • Public Service
    • 提供 Gravatar 和 GitHub Avatar 的反向代理,解决了两个问题:
    • 这个是公共服务,完全免费,目前有大量用户在使用,包括但不限于 CNX SoftwareIndienova
  • WebP Cloud
    • 这个是我们最近刚刚发布的的新服务,其主要功能是:
      • 在不需要用户自己托管我们的开源组件 WebP Server Go 的情况下(尤其适合静态博客例如 Hugo 或者 Hexo)
      • 通过在 WebP Cloud 上注册一个帐号并填入自己网站地址,WebP Cloud 会给出一个新的域名,当用户使用新的域名和自己网站的图片地址(URI)访问图片时,WebP Cloud 会将图片转化成 WebP 格式并输出,在几乎不改变画质的情况下大幅缩小图片体积,加快整体站点加载速度
      • 例如你的网站原始图片地址是 https://yyets.dmesg.app/api/user/avatar/Benny ,WebP Cloud 会给出一个 https://vz4w427.webp.ee 的地址,此时只要访问 https://vz4w427.webp.ee/api/user/avatar/Benny 即可看到被压缩处理后的图片
      • 所有输出的图片会默认缓存在 WebP Cloud 中,这意味着第一次访问之后的所有访问都会直接从 WebP Cloud 输出,不会再次回源,源站不会有流量和带宽的压力
    • 在我们刚刚发布的 Alpha 阶段,免费用户每天可以获得 2000 张图片的免费额度,这个额度已经可以支持一些访问量不是很大的网站/博客使用,此外可以以较低的价格购买付费额度
    • 而且我们支持 Custom Domain,意味着你可以使用自己的域名来输出图片,比如我们的两个用户(Keshane’s Simple BlogSTRRL’s backyard 就分别在使用自己的域名 https://webp.keshane.moehttps://webp.strrl.dev 来接入 WebP Cloud

由于我们的服务(前端除外)都是用 Golang 编写,并通过 GitHub Actions 完成的 CI/CD 流水线,从服务创立之初我们便同时构建了 AMD64/ARM64 两个架构的镜像,所以对于我们来说要测试服务也仅仅是迁移一下容器的并启动的事情,镜像名称甚至都不需要做修改。

而上面介绍的两个服务中,最重要也是负载最大的部分就是 WebP 转换(Encode)过程,我们通过 WebP Server Go 的 Prefetch 功能可以很方便地测试在不同的机器上的转换速度,同时来反推机器性能,测试用的图片总共有 2.4G,80% 为我自己用 Sony A7 拍摄的照片,这些照片一般在 15MiB 附近,剩余 20% 则为一些小图片,体积在 1MiB~5MiB 之间不等。

测试指令为:

./webp-server-go -prefetch

用时越短说明在这个方面性能越好。

Xeon 服务器的 Prefetch 时间为:

Prefetching... 100% |██████████████████████████████████████████████████████| (438/438, 10 it/s)         
Prefetch completeY(^_^)Y in 44.414660644s

CPX21 的 Prefetch 时间为:

Prefetching... 100% |██████████████████████████████████████████████████| (438/438, 6 it/s)          
Prefetch completeY(^_^)Y in 1m9.87966334s

CAX11 由于内存太小导致了 OOM,所以没有在这次测试中体现。

CAX21 的 Prefetch 时间为:

Prefetching... 100% |█████████████████████████████████████████████████████| (438/438, 6 it/s)           
Prefetch completeY(^_^)Y in 1m15.080679651s

Oracle 的 Prefetch 时间为:

Prefetching... 100% |███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| (438/438, 5 it/s)
Prefetch completeY(^_^)Y in 1m24.932026118s

从 Prefetch 的结果可以看出,8 核心的 Xeon(R) CPU E3-1230 v3 @ 3.30GHz 独立服务器在这里获得头筹,转换时间为 44s ,比 CPX21 的成绩快了 36%, 由于 CPX21 的 Geekbench 成绩比 Xeon 好,这里也说明了我们不能盲目相信 GeekBench 成绩作为性能比对的唯一指标,还需要结合自己的业务来判断。

而 ARM64 的表现就比较惊艳了,4 核心的 CAX21 机器转换速度相比较 3 核心的 CPX21 只差了 8%,而他们两者的价格差别是 14%,此外 CAX21 还拥有着 CPX21 两倍的内存。

磁盘测试

无论是 Public Services 还是 WebP Cloud,对于非第一次请求而言,所有的图片都会从缓存输出,我们的缓存会持久化在磁盘上,所以这里对于磁盘性能的测试就至关重要。

这里的测试依然是在上面的测试指令中包含,使用了 fio 进行性能测试:这个脚本包括四个随机读写的 fio 磁盘测试,使用4k、64k、512k和1m的块大小。这些测试旨在评估磁盘的吞吐量,在接近真实世界的场景中进行(使用随机读写),每个测试都采用50%的读操作和50%的写操作。

首先我们给出 Oracle Cloud 的磁盘性能,测试是在机器自带的磁盘上运行的:

fio Disk Speed Tests (Mixed R/W 50/50):
---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ----
Read       | 75.84 MB/s   (18.9k) | 228.99 MB/s   (3.5k)
Write      | 75.79 MB/s   (18.9k) | 235.80 MB/s   (3.6k)
Total      | 151.63 MB/s  (37.9k) | 464.79 MB/s   (7.2k)
           |                      |
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ----
Read       | 143.03 MB/s    (279) | 141.04 MB/s    (137)
Write      | 155.27 MB/s    (303) | 157.35 MB/s    (153)
Total      | 298.31 MB/s    (582) | 298.39 MB/s    (290)

Hetzner 的 Cloud 有两种磁盘,一种是机器自带的磁盘,我们称为 LocalSSD,一种是 Volumes ,Hetzner 对于 Volume 的描述如下:

  • Volumes offer highly available and reliable SSD storage for your cloud servers. You can expand each Volume to up to 10 TB at any time and you can connect them to your Hetzner cloud servers.

    (Volume为您的云服务器提供高可用性和可靠的SSD存储。您可以随时将每个Volume扩展到最多10 TB,并且可以将它们连接到您的Hetzner云服务器。)

    Our Volumes are based on the networked block storage model and every block of data is stored on three different physical servers at our Hetzner data centers.

    (我们的Volumes基于网络块存储模型,每个数据块都存储在我们在Hetzner数据中心的三个不同物理服务器上。)

其中 Cloud 下 AMD 和 ARM64 机器 LocalSSD 和 Volume 表现接近,所以总结如下:

LocalSSD 测试结果如下:

fio Disk Speed Tests (Mixed R/W 50/50):
---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 146.57 MB/s  (36.6k) | 1.13 GB/s    (17.7k)
Write      | 146.48 MB/s  (36.6k) | 1.17 GB/s    (18.3k)
Total      | 293.06 MB/s  (73.2k) | 2.30 GB/s    (36.0k)
           |                      |                     
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 2.50 GB/s     (4.8k) | 2.65 GB/s     (2.5k)
Write      | 2.71 GB/s     (5.3k) | 2.95 GB/s     (2.8k)
Total      | 5.21 GB/s    (10.1k) | 5.60 GB/s     (5.4k)

Volume 测试结果如下:

fio Disk Speed Tests (Mixed R/W 50/50):
---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 29.70 MB/s    (7.4k) | 314.04 MB/s   (4.9k)
Write      | 29.68 MB/s    (7.4k) | 323.38 MB/s   (5.0k)
Total      | 59.38 MB/s   (14.8k) | 637.43 MB/s   (9.9k)
           |                      |                     
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 298.03 MB/s    (582) | 288.82 MB/s    (282)
Write      | 323.52 MB/s    (631) | 322.23 MB/s    (314)
Total      | 621.56 MB/s   (1.2k) | 611.05 MB/s    (596)

可以看出,虽然 Volumes 有三重备份等优势,但是整体性能可能只是 LocalSSD 的 1/3 ,所以在规划应用,尤其是数据库应用的时候就需要额外注意。

此外我们可以看到 Hetzner 的 LocalSSD 和 Oracle Cloud 的 SSD 速度差异很大。


从上面的结果我们可以看出,如果我们不希望破产的话,就不会考虑 AWS,在剩下的 ARM64 服务商中,Scaleway 不保证 SLA,我们不敢选择,Oracle Cloud 的磁盘和处理器性能不太行,且由于是 Free Tier,有帐号被关闭的可能,Alibabacloud 和中国公司阿里云关系紧密,我们作为一个欧洲的服务商,不会考虑他们,此外他们价格也非常高,最终我们选择了 Hetzner 的 CAX 系列机器作为我们的服务器提供商。

以上便是我们在 Hetzner ARM64 上做的一些测试,由于其优秀的性价比以及我们对于 ARM64 机型的喜爱,WebP Cloud Services 的也在本文发布时全部迁移到了 Hetzner 的 CAX 系列 ARM64 处理器的服务器上了,虽然在迁移过程中遇到了一些奇怪的小插曲,比如用 alpine 的 Clickhouse 镜像会导致 CPU 莫名升高,换为非 alpine 结尾镜像后就恢复了:

除此之外,ARM64 机器目前在响应延迟,兼容性上均表现良好,后续如果我们有新的发现我们将额外分享。


如果你看完本文后对 Hetzner 的 ARM64 机器感兴趣,可以尝试使用我们的链接来注册 Hetzner 体验: https://hetzner.cloud/?ref=6moYBzkpMb9s

通过我们的链接注册的话你可以在注册成功后直接获得 20EUR 的可用额度,我们也可以获得 10EUR 的奖励,这样也可以支持我们的产品发展。

不过要注意 Hetzner 的风控非常严格,注册的时候使用 VPN 或者故意乱填地址等非常容易导致自己账户被禁,这是缺点也是优点,缺点是注册门槛相对较高,优点则是 Hetzner 的客户相对比较“干净”,不会像主流给大额 Credit 的服务商(比如 DO,Vultr )一样上面充满月抛机和吵闹的邻居。而且从我们的观测来看,帐号注册成功后只要有了几笔成功的付费订单后就基本不会有账户被 Close 的问题了。

References

  1. Scaleway C2 and ARM64 instances will reach end-of-life in December 2020
  2. Scaleway ARM servers
  3. RETHINK YOUR CLOUD. RELY ON OUR NEW ARM64 CAX SERVERS
  4. Scaleway Provides Dedicated ARM Servers for 10 Euros per Month, 0.02 Euro per Hour - CNX Software

WebP Cloud Services 团队是一个来自上海和赫尔辛堡的三人小团队,由于我们不融资,且没有盈利压力 ,所以我们会坚持做我们认为正确的事情,力求在我们的资源和能力允许范围内尽量把事情做到最好, 同时也会在不影响对外提供的服务的情况下整更多的活,并在我们产品上实践各种新奇的东西。

如果你觉得我们的这个服务有意思或者对我们服务感兴趣,欢迎登录 WebP Cloud Dashboard 来体验,如果你好奇它还有哪些神奇的功能,可以来看看我们的文档 WebP Cloud Services Docs,希望大家玩的开心~


Discuss on Hacker News