Google Cloud e2 Micro 可用性探究


白嫖 Google Cloud(GCP) 的免费 e2-micro,其配置一般如下

属性规格
vCPU0.25~2 Intel Broadwell
内存1 GB
磁盘30 GB 标准持久磁盘
网络200GB 标准层级出站
Ops AgentOptional

所谓标准持久磁盘,其实就是机械硬盘,IOPS 更是一言难尽。GCP 官方并没有给出 e2-micro 具体的指标,但是给出了 e2medium1e2-medium^1 的指标,而 e2-micro 的配置是 e2-medium 的四分之一,所以可以推测 e2-micro 的磁盘性能大约是 e2-medium 的四分之一,即 最大 IOPS 读取不超过 250。实际上根据容量大小的不同,IOPS 会大打折扣。

所谓标准网络层级,即访问该虚拟机的流量会先经过互联网到对应机房,再连接到虚拟机,而高级层级即是先找到最近的 GCP 节点,再经过 GCP 的骨干网连接到虚拟机。作为对比,高级层级在 Microsoft Azure 中被称为 Microsoft 首选路由,普通层级则为 Internet 首选路由,且都适用于 Azure 的 100GB 出站数据传输。值得一提的是,GCP 的高级层级仅在美国区域拥有 1GB 的免费数据传输额度,且不适用中国大陆方向,GCP 的流量定价非常细致,到中国大陆的高级层级流量价格为 0.23USD/GB20.23USD/GB^2,不过最近 GCP 精简了的标准层及定价模型,不再额外区分中国,非洲,澳大利亚等区域了,但是现在的价格相较于 Azure 和 AWS 仍旧没有优势。

标准网络层及到中国大陆的连接质量一般,截至目前,机房到用户中间的 InternetTata 通信,中国电信布局国际网络较早,与 Tata 通信拥有大量的对等互联,所以中国电信的访问质量还算可以,中国联通和中国移动就只能看运气了。随机到 Tata 通信已经算好的了,如果随机到 Telia 这样跟中国大陆几乎没有合作关系的运营商,可以 Stop 再启用抽一个新的 IP 地址。

所谓的 Intel Broadwell 说白了就是 E5 洋垃圾,在 CPU Benchmark 上可以查到单线程分数为 2065,性能只能说很一般。再搭配上共享 IOPS 的机械硬盘,e2-micro 几乎难以承担任何负载,即使是使用 Vscode 连接到它都会导致崩溃。但这并不代表它一无是处,e 系列的所有虚拟机标称都是 Intel Broadwell,但实际上你可以开出来架构为 AMD Rome 甚至是 AMD Milan,综合表现会强大非常多。以下是使用 sysbench 测试的结果,其中的 10GB SSD 指的是 GCP 的 平衡持久磁盘,表中同时给出了 Azure 的同规格虚拟机测试结果,其中 Azure B2pts v2 为 Arm Neoverse V2 架构,Azure B2ats v2 为 AMD Milan 的 EPYC 7763

架构磁盘events per second
AMD Rome10GB SSD890.42
AMD Rome30GB HDD699.63
Intel Broadwell10GB SSD302.53
Intel Broadwell30GB HDD324.70
Azure B2pts v264GB P6 SSD2539.95
Azure B2ats v264GB P6 SSD1585.44

表中所有机型的价格都在每月 6 美元左右,Arm 性能强,x86 生态好。那么 Azure 确实比 GCP 强吗?是的,Azure 的虚拟机确实更强,而且 pts 和 ats 也是 Azure 最热门的机型,在每个区域的需求都很高。

GCP 声称 e2 系列可以开出 AMD Rome 和 AMD Milan 架构的虚拟机,但是 e 系列所有规格在创建时都无法指定 CPU 架构,只能通过多次创建 e2-micro 来尝试。用鼠标来回操作有点麻烦,可以设置好条件后复制创建按钮右侧的的 等效代码 来更加方便地创建虚拟机,也可以使用虚拟机模板。

最高性价比实践

在开出 AMD 系列的 CPU 之后,可以尝试为其添加一个 10GB 的平衡持久磁盘作为启动盘,价格为每月 1USD,但是带来的提升是立竿见影的,同时可以把 30GB 的机械硬盘挂在上去作为数据盘,最终就会得到一个价格 1USD 每月的拥有 2vCPU AMD Rome + 1GB 内存 + 40GB 存储的虚拟机,这个性价比是全网独一档的,在 GCP 之外的地方有这种性价比的都被称为灵车了。

SSH

首先需要生成一个 ssh 密钥对,需要注意的是 GCP 会自动管理 SSH 密钥,但是有个要求是密钥的邮箱必须有权限访问该虚拟机,权限的配置较为复杂,个人建议直接使用自己的 Gmail 创建密钥对,然后在 Metadata 中添加公钥

cd ~/.ssh
ssh-keygen -t ed25519 -C "your_gmail@gmail.com"

弹出的第一个输入框可以输入该密钥的名字,其他的直接回车跳过。使用以下命令可以查看公钥内容

cat ~/.ssh/ed25519.pub

添加密钥到 Metadata 中,注意 ssh-keys 后面可以跟多行字符串,每行都应是完整的公钥内容,且会覆盖之前的内容,所以推荐去控制台添加。

gcloud compute project-info add-metadata --metadata-from-file ssh-keys=${ed25519.pub}

挂载硬盘

lsblk   # 查看磁盘列表
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda       8:0    0   30G  0 disk            # 初始的 30GB 标准持久磁盘
sdb       8:16   0   10G  0 disk
├─sdb1    8:17   0  9.9G  0 part /
├─sdb14   8:30   0    3M  0 part
└─sdb15   8:31   0  124M  0 part /boot/efi

# sudo mkfs.ext4 /dev/sda # 格式化该磁盘
sudo blkid /dev/sda    # 查看 sda 的 UUID
dev/sda: UUID="${sda-uuid}" BLOCK_SIZE="4096" TYPE="ext4"

mkdir /mnt/data    # 创建挂载点
echo "UUID=${sda-uuid} /mnt/data ext4 defaults 0 2" >> /etc/fstab
systemctl daemon-reload    # 重新加载 fstab
mount -a    # 挂载所有磁盘

lsblk    # 查看挂载结果
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda       8:0    0   30G  0 disk /mnt/data
sdb       8:16   0   10G  0 disk
├─sdb1    8:17   0  9.9G  0 part /
├─sdb14   8:30   0    3M  0 part
└─sdb15   8:31   0  124M  0 part /boot/efi

df -h    # 查看磁盘使用情况
Filesystem      Size  Used Avail Use% Mounted on
udev            446M     0  446M   0% /dev
tmpfs            97M  476K   97M   1% /run
/dev/sdb1       9.7G  2.3G  6.9G  25% /
tmpfs           485M     0  485M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/sdb15      124M   12M  113M  10% /boot/efi
/dev/sda         30G   24K   30G   1% /mnt/data
tmpfs            97M     0   97M   0% /run/user/1000

中英对照表

中文English
标准持久磁盘Standard Persistent Disk
平衡持久磁盘Balanced Persistent Disk
标准网络层级Standard Network Tier
高级层级Premium Network Tier
Tata 通信Tata Communications

参考

  1. e2-medium 磁盘性能
  2. Google Cloud 流量定价