SSD Nodes Learn 🎉 VPS $5.50/月起
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-13

DigitalOcean 替代方案:开发者云服务器怎么选

比较 DigitalOcean、Akamai 和 Hetzner 的每 GB 内存价格、包含流量、NVMe 存储与备份费用,并提供避免停机的迁移切换计划。

DigitalOcean 替代方案真正改变的内容

大多数 DigitalOcean 替代方案改变的是账单,而不是机器。无论选择哪家,您获得的通常都是一台带公网 IP、virtio 磁盘和 root 访问权限的 Linux 虚拟机;内核并不关心控制面板上显示的是哪家公司的徽标。真正影响选择的差异包括:每 GB RAM 的价格、包含的传输额度及超出额度后的每字节费用、磁盘的实际介质,以及操作系统之上有多少组件由服务商代为运行。

本指南按这些维度进行比较,因为开发者可以通过终端或已发布的价目表逐项核对。指南也会说明 DigitalOcean 适用的场景,因为完全不承认其优势的比较文章更像广告。

以下所有价格均为已发布的标准价格,核对日期为 5 August 2026。价格会变动,而且本文列出的不止一家服务商在 2026 年调整过价格。定价的结构变化要慢得多,因此请先比较价格比例和计费模式,再在提交使用前到服务商官网确认当天的价格。

每 GB RAM 的价格才是应比较的指标

ChartMonthly list price per GB of RAM, entry shared-CPU plans, checked 5 August 2026
The data behind this chart
[
  {
    "provider": "DigitalOcean 1 GB",
    "ram_gb": 1,
    "monthly_usd": "6.00",
    "usd_per_gb_ram": "6.00"
  },
  {
    "provider": "DigitalOcean 4 GB",
    "ram_gb": 4,
    "monthly_usd": "24.00",
    "usd_per_gb_ram": "6.00"
  },
  {
    "provider": "Akamai Nanode 1 GB",
    "ram_gb": 1,
    "monthly_usd": "5.00",
    "usd_per_gb_ram": "5.00"
  },
  {
    "provider": "Vultr NVMe 1 GB",
    "ram_gb": 1,
    "monthly_usd": "6.00",
    "usd_per_gb_ram": "6.00"
  },
  {
    "provider": "Hetzner CX23 4 GB",
    "ram_gb": 4,
    "monthly_usd": "6.49",
    "usd_per_gb_ram": "1.62"
  }
]

在同一家服务商内,每 GB RAM 的价格几乎不会变化。DigitalOcean 的 1 GB 方案每 GB 收费 $6.00,4 GB 方案的每 GB 价格同样是 $6.00,该方案月费为 $24.00。在同一家服务商处选择更大的方案不会获得折扣,因此方案大小不是决定因素,服务商才是。

Akamai 目前销售原 Linode 的产品,其 2 GB 和 4 GB 共享方案分别定价为 $12 和 $24,与 DigitalOcean 的价格完全相同。其入门方案价格为 $5.00,低于这两家服务商。两家公司价格完全一致,这一信号值得关注:该级别的定价是根据竞争对手制定的,而不是根据硬件成本制定的,并且会持续跟随竞争对手。

采用自建数据中心并以欧元定价的服务商,价格差距会从这里开始扩大。Hetzner CX23 提供 4 GB RAM,月费约为 $6.49,即每 GB $1.62,接近 DigitalOcean 价格的四分之一。这个美元金额由欧元标价换算而来,因此会随汇率变化。Hetzner 还在 2026 年上调了云服务价格,因此较早的对比文章中引用的价格可能已经不存在。

每 GB RAM 的价格无法说明你获得的 CPU 性能。共享 vCPU 意味着 hypervisor 会将你的核心与其他租户的任务共同调度。准确的检查应在一台你实际租用的服务器上进行:

vmstat 1 10

查看 st 列。该列统计 vCPU 已准备好运行、但 hypervisor 将物理核心交给其他租户的时间百分比。负载下出现几个百分点属于正常情况。持续达到两位数,说明宿主机超售严重;无法使用的核心不是更低的每 GB 价格可以弥补的。应在业务繁忙时段运行该测试,因为 steal time 取决于邻居负载,而邻居也有自己的使用时段。若要了解加上存储和流量后,一个月的托管实际成本,请阅读VPS 每月成本如何变化

包含流量的实际成本

ChartIncluded outbound transfer and overage price, same plans, checked 5 August 2026
The data behind this chart
[
  {
    "provider": "DigitalOcean 1 GB",
    "included_tb": 1,
    "overage_usd_per_tb": "10.00"
  },
  {
    "provider": "Akamai Nanode 1 GB",
    "included_tb": 1,
    "overage_usd_per_tb": "5.00"
  },
  {
    "provider": "Vultr NVMe 1 GB",
    "included_tb": 2,
    "overage_usd_per_tb": "10.00"
  },
  {
    "provider": "Hetzner CX23 4 GB",
    "included_tb": 20,
    "overage_usd_per_tb": "1.20"
  }
]

DigitalOcean 在入门套餐中包含 1 TB 出站流量,超出部分按 GiB 计费,折算后每增加 1 TB 约为 $10.00。Akamai 包含相同的 TB 数量,但超出部分的费用约为其一半,即每 TB 约 $5.00。Vultr 包含 2 TB,超出部分的费率相近。Hetzner 包含 20 TB,超出后每 TB 约收取 $1.20,与其他服务商相差一个数量级。

有三个结构性细节比表面价格更重要。四家服务商的入站流量都免费,因此只有发送出去的流量会计费。DigitalOcean 和 Vultr 会将配额汇总到账号中的所有服务器,因此一台繁忙的服务器会消耗另一台服务器的配额;多台小型服务器共享同一个大流量池。服务器之间通过私有网络或 VPC 网络传输的流量通常完全不计入配额。因此,将数据库放在私有接口上不仅是安全决策,也是计费决策。

如果您的用量远未达到上限,这些差异并不重要。博客、返回 JSON 的 API 或小型 SaaS 通常不会在一个月内达到 1 TB。视频、图片库、游戏服务器、软件包镜像和异地备份目标则可能达到。先测量,再做判断:

sudo apt update && sudo apt install -y vnstat
sudo systemctl enable --now vnstat
vnstat -m

vnstat -m按月输出流量,并区分接收和发送。只有发送列会计费。数据库初始为空,因此安装后一天才能获得第一条有用记录;第一个完整月份的数据则要一个月后才会出现。在此之前,服务商自己的带宽图表是您唯一可用的记录。

还要问一个价格表无法回答的问题:超过配额后,服务商是向您收费,还是限制端口速率。收费会增加成本。限速会影响用户,而且发生在用户数量最多的时候。您需要提前确认,流量突增时会触发哪一种处理。

NVMe 还是 SATA,以及如何确认实际拿到的存储

面板显示为 NVMe。这只是主机磁盘类型的声明,不代表您的虚拟机实际运行在这些磁盘上。本地存储会将虚拟磁盘放在同一台物理机器内部的磁盘上。网络存储则将其放在独立的存储集群中,并通过数据中心网络访问。即时扩容、实时迁移和原地创建快照都依赖这种方式。

在来宾系统中,两者看起来完全相同:

lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotational

对于主机声明为非旋转介质的设备,ROTArotational 都会报告 0。因此,底层使用 NVMe 的网络卷与本地 NVMe 报告的结果完全相同。该值只能说明磁盘不是旋转式盘片,无法说明磁盘位于何处。确认 Linux 中的 NVMe 磁盘介绍了设备名称及其含义。

区分两者的方法是测试队列深度为 1 时的延迟,因为单次小型读取没有其他请求可以隐藏其耗时。本地 NVMe 可在同一机箱内返回结果。网络卷的每次读取都要经过数据中心网络完成一次往返,因此其延迟下限更高,即使深队列下的吞吐量看起来相近。

sudo apt update && sudo apt install -y fio
fio --name=lat --filename=/var/tmp/fiotest --size=1G --rw=randread --bs=4k \
  --ioengine=libaio --direct=1 --iodepth=1 --runtime=30 --time_based --group_reporting
fio --name=iops --filename=/var/tmp/fiotest --size=1G --rw=randread --bs=4k \
  --ioengine=libaio --direct=1 --iodepth=32 --runtime=30 --time_based --group_reporting
rm -f /var/tmp/fiotest

第一次运行会输出一个 clat 块,其中包含完成延迟。应查看第 99 百分位这一行,而不是平均值,因为平均值会掩盖用户实际感受到的停顿。第二次运行会在摘要行输出 IOPS=。请在您当前使用的服务商和正在考虑的服务商的试用实例上运行这两项测试,确保在同一天进行,然后比较您自己的两个结果。任一服务商公布的数据都是在您无法查看的机器上测得的。还应在不同时间分别运行 3 次,因为空闲主机和繁忙主机在同一套餐下会给出不同结果。正确测试 VPS 性能介绍了测试方法,SSD VPS 实际指什么解释了这些营销术语的实际含义。

区域:测量延迟,不要看地图

区域列表在经过测量前只是营销信息。用户感受到的是其网络到服务器之间的往返时间,而这取决于数据包经过的路由,而不是地图上的距离。一台位于 300 km 外、但连接在拥塞中转链路后的服务器,会输给一台位于 1,500 km 外、但路径畅通的服务器。

ping -c 20 203.0.113.10
mtr -rwc 50 203.0.113.10
curl -o /dev/null -s -w 'dns %{time_namelookup} connect %{time_connect} tls %{time_appconnect} total %{time_total}\n' https://example.com

mtr会列出每一跳的丢包率和延迟。因此,两跳之间突然增加 60 ms 时,可以定位造成问题的链路,而不是误认为目标服务器有问题。请从与用户相同网络中的一台机器运行它。数据中心之间的路由通常是互联网中最优的路径,会让所有提供商的表现看起来同样出色。

有一点不受价格变化影响。如果提供商在您的大洲只有一个区域,那么您的灾难恢复计划实际上就是迁移到其他大洲,并且必须承受由此产生的延迟。请统计您实际会切换到的区域数量,而不是页面上列出的区域数量。

快照和备份需要单独付费

存储附加服务是低价方案变贵的原因。DigitalOcean 对快照按每月每 GiB $0.06 收费;自动备份则按服务器方案价格的一定比例收费:每周备份为方案价格的 20%,每日备份为 30%,也提供按使用量计费、按 GiB 收费的选项。这两种计费方式都有合理之处,但问题方向相反。按比例收费会随服务器规格增长,因此存储少量数据的大型服务器会多付费。按 GiB 收费会随数据量增长,因此连接到大型卷的小型服务器会多付费。

询问恢复需要多少费用以及需要多长时间,因为备份存储费用只是问题中较容易忽略的一半。还要询问销毁服务器是否也会同时销毁其快照。

此外,应保留一份由服务提供商无法控制的副本。服务提供商的快照位于其账户内部,因此登录凭据丢失、付款失败或账户被暂停时,服务器及其备份可能会同时失去。将 restic 备份到您拥有的存储中只需支付几美元的对象存储费用,即可恢复到任意服务提供商,从而让迁移可以回退,而不是变成不可逆的操作。

要运行整个技术栈的多少部分

云服务商处于一条连续的选择范围内。一端是租用一台机器,所有组件都由您自行运行。另一端是推送一个 git 分支,完全不接触服务器。只有在第一端,按每 GB RAM 计算价格才适合作为比较标准;到了另一端,您购买的是运维人力,而不是内存,人力没有按 GB 计价的标准。

在比较任何方案前,请先明确自己处于哪一端。每月 $15.15 的托管数据库,与 $6 的服务器相比似乎很贵,但如果把背后的工作时间算进去,结论就不同了:复制、故障转移、时间点恢复、小版本升级,以及在 03:00 唤醒值班人员的告警。如果这些工作由您负责,自行运行并保留差价。如果您的工作是开发应用,购买这些运维服务就很划算。托管与非托管的区别决定了您应该查看价格表中的哪一列。如果坦诚的答案是您希望独占整台机器及其磁盘,那么这属于 VPS 与专用服务器 的问题,而不是云服务商选择问题。同样的问题也会出现在开发者每月账单的其他部分:比较 Claude 和 ChatGPT 方案,关键在于您希望将多少工作交给服务完成,而不是只看标价。

DigitalOcean 适用的场景

当您购买的是平台而不是虚拟机时,DigitalOcean 更具优势。

  • 托管数据库。 托管 PostgreSQL 和 MySQL 的起价为每月 $15.15,包含 1 GiB RAM 和 10 GiB 存储空间;额外存储按 GiB 计费,备用节点按节点计费。自行构建同等可靠性,需要使用 Patroni 或 repmgr、共识存储、连接代理,并实际演练故障转移。两人团队无法长期维护这套系统,同时还要持续交付功能。
  • App Platform。 推送一个分支即可获得构建结果、证书和运行中的服务,无需修补操作系统。这个产品的廉价 VPS 版本就是您自己在周六完成这些工作。
  • 由成熟 Terraform provider 覆盖的对象存储和负载均衡器。 可以通过代码销毁并重建的服务器集群,其价值高于更低的单位价格。
  • 产品背后的公司。 公开的支持级别、带历史记录的状态页,以及能够回复客户安全问卷的组织。如果您转售托管服务,这些价值高于每 GB 少收几美元。

对于普通虚拟机,尤其是在数量较多且存在实际出站流量时,DigitalOcean 的成本会变高。这正是替代方案能够解决的场景,也是自托管开发者购买的主要产品。

迁移到新服务商且不中断服务

迁移期间出现中断,原因只有一个:数据已经迁移到新 IP,但流量仍到达旧 IP。下面的每一步都是为了缩短并稳定地控制这个时间窗口。

至少提前 48 小时处理 DNS。解析器会在 A 记录的 TTL(生存时间)内缓存该记录,因此 TTL 为 24 小时的记录在修改后,最长仍会将用户发送到旧服务器 1 天。切换时再降低 TTL 没有帮助,因为解析器已经保存了带有原过期时间的旧值。应先降低 TTL,等待旧值过期,然后再迁移。

dig +noall +answer example.com A
dig +noall +authority example.com SOA

第一个命令会在返回结果的第二列显示当前 TTL。请在 DNS 服务商处将其设置为 300,然后等待的时间要长于刚刚替换的数值。

然后按以下顺序操作。

  1. 先配置新服务器并完成加固,再让任何其他内容进入该服务器。新 VPS 上的前 10 分钟介绍了人们赶时间时常跳过的部分。
  2. 安装应用程序栈。在旧服务器继续正常提供服务期间,先使用 rsync 完成一轮数据复制。
  3. 现在在新主机上签发 TLS 证书,并使用 DNS-01 challenge。HTTP-01 challenge 会根据 DNS 当前指向的 IP 进行验证,而该 IP 仍是旧服务器。DNS-01 challenge可以完全避免这个顺序问题。
  4. 在进行任何公开变更前,通过覆盖自己笔记本电脑上的 DNS 来测试新主机。将 203.0.113.20 example.com 添加到 /etc/hosts,访问真实站点,然后删除该行。此测试不会影响任何用户。
  5. 处理数据库大小问题。如果数据库小于几 GB,导出和恢复可以在写入冻结期间完成。如果更大,应提前几天建立从旧数据库到新数据库的复制并让其追上进度,这样冻结只需覆盖提升过程。
  6. 冻结写入。将应用置于维护模式或只读模式。这是用户唯一能够看到的部分,持续时间应为几分钟。
  7. 执行最终增量同步:再次运行相同的 rsync,然后执行最终数据库同步。
  8. 将 A 和 AAAA 记录改为新 IP。TTL 为 300 秒时,大多数解析器会在约 5 分钟内跟随变更。
  9. 让旧服务器继续运行并保持可访问至少 1 天,因为部分解析器会忽略较短的 TTL。如果旧应用仍可写入,延迟到达的请求会写入错误的数据库,因此应让旧主机连接新数据库,或从旧主机返回维护页面。
  10. 监控新服务器的错误率 1 天,将 TTL 恢复为正常值,并在 1 周后销毁旧服务器,不要在当天晚上销毁。

复制过程本身需要执行 2 个命令,并且每个命令都要运行 2 次。文件同步命令如下:

rsync -aHAX --numeric-ids --delete -e ssh /srv/ deploy@203.0.113.20:/srv/

-a保留所有者、权限和时间戳,-H保留硬链接,-AX保留 ACL 和扩展属性,--numeric-ids阻止 rsync 根据两台机器之间不同的名称重新映射用户 ID。提前几天运行一次,然后在冻结期间再次运行,此时它只会传输发生变化的内容。

对于大小适合导出的 PostgreSQL:

pg_dump --format=custom --no-owner --dbname=appdb --file=appdb.dump
scp appdb.dump deploy@203.0.113.20:/var/tmp/
pg_restore --clean --if-exists --no-owner --dbname=appdb /var/tmp/appdb.dump

对于 MySQL 或 MariaDB:

mysqldump --single-transaction --routines --triggers --databases appdb > appdb.sql

--single-transaction会在一个事务中导出 InnoDB 表,因此结果保持一致,并且应用可以在导出期间继续写入。没有该标志时,mysqldump 会锁定表。这意味着写入冻结会比计划提前开始,并且冻结时间不再由您决定。

有两件事会在服务器之外导致问题。新 IP 地址没有邮件信誉,因此直接从新主机发送的邮件会被过滤为垃圾邮件:应通过已有良好信誉的中继发送邮件。任何将您的出站 IP 加入允许列表的合作方,例如支付网关或客户端防火墙,也必须在切换前更新,否则流量迁移后,这些调用会立即失败。

提交前需要检查的事项

  • 价格是否为促销价,以及续费时的价格是多少。首期折扣在续费时翻倍,意味着实际成本只是延后支付。
  • 服务期限是否需要预付。SSD Nodes 采用多年预付方案,以预付资金换取更低的每 GB RAM 价格。代价是下个月无法随时退出,因此应根据自己的确定程度选择期限。
  • 每月快照费用是多少,以及恢复需要多少费用和时间。
  • 超出用量后是计费还是限速。
  • IPv6 是否已正确路由,还是只附加了一个地址。
  • 是否提供 API,以及是否有持续维护的 Terraform provider。如果您计划通过代码而不是手动操作重建环境,这一点很重要。
  • 如何联系支持团队,以及针对服务器宕机问题公布的响应目标是什么。不要只看销售咨询的响应目标。

应根据对您账单影响最大的因素进行选择。如果主要因素是内存,则每 GB RAM 的价格可以决定选择。如果主要因素是出站流量,则包含的传输量可以决定选择。如果主要因素是您自己的时间,则托管平台可以决定选择;在这里比较的四个平台中,DigitalOcean 的表现最强。

FAQ

Hetzner 总是比 DigitalOcean 便宜吗?

对于普通虚拟机,按每 GB RAM 计算,Hetzner 便宜得多:截至 2026 年 8 月 5 日,入门级共享方案约为 $1.62,而 DigitalOcean 为 $6.00。但纳入托管服务后,比较结果会发生变化。Hetzner 提供服务器和网络服务,因此托管数据库或推送部署平台需要由您自行提供,或使用第三方服务,而这些服务需要付费。Hetzner 也在 2026 年上调了云服务价格,因此请查看当前的欧元价格,不要直接参考旧文章。

如果需要托管数据库,我应该选择哪个 DigitalOcean 替代方案?

Vultr 和 Akamai 都提供托管数据库。如果您使用 DigitalOcean 的主要原因是托管数据库,它们是最接近的替代方案。价格较低的欧洲主机通常不提供这项服务,因此您需要自行运行 PostgreSQL 或 MySQL,包括配置复制和经过测试的故障转移。这需要实际投入工作。在决定低价服务器是否真的节省成本之前,应将这些工作与每月 $15.15 的托管 1 GiB 实例费用进行比较。

如何在不中断服务的情况下将在线网站迁移到新服务商?

至少在迁移前 48 小时将 DNS TTL 降低到 300 秒,因为解析器会按照之前的 TTL,在相应时间内继续返回旧 IP。旧服务器仍提供流量时,先构建并测试新主机;在您自己的计算机上使用 /etc/hosts 覆盖,这样其他用户不会看到新主机。然后暂停写入几分钟,执行最终的 rsync 增量同步和最终数据库同步,切换 A 和 AAAA 记录,并让旧服务器继续运行一周,以防某个解析器忽略了较短的 TTL。

更便宜的 VPS 是否意味着磁盘速度更慢?

不一定。关键在于虚拟磁盘是位于主机本地,还是位于网络存储集群,而控制面板通常不会说明这一点。lsblk -o NAME,ROTA 对两者都报告为 0,因为两者都不是旋转介质。应改为进行测量:使用 --iodepth=1 --bs=4k --direct=1 运行 fio,然后读取第 99 百分位的完成延迟。网络卷的每次读取都需要经过数据中心网络往返,因此其延迟下限高于本地 NVMe,即使深度队列吞吐量看起来相近。

从新服务器发送的邮件还能正常投递吗?

通常不能立即正常投递。新 IP 地址没有发送历史,因此收件方会将来自该地址的邮件视为可疑邮件,邮件可能进入垃圾邮件箱,或直接被拒收。SPF 和 DKIM 记录在更新前也仍然指向旧主机。应通过已有良好信誉的中继或邮件服务发送应用邮件,并在切换前更新邮件相关的 DNS 记录,而不是等到切换后再更新。