1. 从 Heroku 铁粉到账单焦虑,我经历了什么
如果不是那次季度对账,我大概到现在还在为 Heroku 付费。推动我换平台的不是技术瓶颈,而是一封财务提醒邮件。当时我们的 SaaS 后台工具刚跑了一年多,用户量谈不上爆炸,但已经在稳定增长。我顺手把 Heroku 的月度账单导出来,看到总额的那一刻,说实话有点愣住了:一个日活并不算高的业务系统,每个月居然要付 200 多美元给“部署平台”。
先交代一下背景:我从个人项目阶段就开始用 Heroku,前后在上面跑过 API 服务、定时爬虫、公司内部工具,一度对它非常依赖。git push 就完成部署的模式,让人再也不想回到配 Nginx、写 systemd 服务、手动续 HTTPS 证书的那种生活。就算是今天回头看,我仍然认为 Heroku 是“开发者体验”做得最早也做得最极致的一批平台之一。问题在于,当你的项目从“能跑”变成“要稳定地跑”,账单会突然变得不可爱。
这篇文章是我完整迁移过程的复盘:我会先讲清楚 Heroku 为什么值得喜欢,再拆解它的成本到底高在哪儿;然后说明为什么我选了一个开源云原生开发平台作为替代,以及迁移过程中做对了什么、踩了什么坑。如果你也是中小型团队的技术负责人,或者正犹豫自己的项目要不要从 Heroku 搬走,这篇文章可以直接当参考。
最终效果是:同一个系统,月成本从原来的约 220 美元降到了约 43 美元,算下来省了 80% 左右。而且部署速度、回滚能力、日志可观测性都没有缩水,某些地方甚至比以前更好用。
1.1 git push 即部署的开发体验,确实是当年的天花板
Heroku 最大的贡献,是把“部署”这件事简化到了几乎不需要思考。本地写好代码,提交后执行 git push heroku main,剩下的构建、启动、健康检查、日志收集全部由平台接管。你不需要知道后端跑在哪个进程里,不需要关心负载均衡怎么配,也不需要在半夜爬起来处理证书过期。
这种体验依赖的是它那套 Buildpack 机制。Heroku 会识别项目语言,自动拉取对应运行时,安装依赖,然后启动你在 Procfile 里声明的进程。比如一个 Node.js 项目,你只需要在 Procfile 里写:
code复制web: node src/index.js
worker: node src/worker.js
平台会自动为 web 进程分配公网入口,为 worker 进程提供后台任务执行环境。数据库、Redis、定时任务这类需求,也不用自己搭建,直接在 Add-ons 市场里点几下就能创建。一个研发团队不需要专职运维,也能把产品稳定对外提供服务。
这套体验在当年是革命性的。很多人说用过 Heroku 就回不去了,不是情怀,而是它真的把“上线”的门槛降到了极致。在我们团队只有两三个人的阶段,这套模式帮我们省掉了大量基础设施时间,让我们能把精力全部放在业务代码上。这是它值得被认可的地方,也是为什么后来做迁移决策时,我一直在想:能不能找到一套方案,既保留接近 Heroku 的开发体验,又不需要持续支付高昂的托管费用。
1.2 转折点:应用规模一上来,账单开始不受控制
转折发生在我们把第二个环境(预发布环境)加入 Heroku 之后。第一个环境只需要一个 web 实例加一个数据库,成本还在可接受范围;但为了测试和生产隔离,你需要两套 Postgres、两套 Redis,可能还要给预发布环境单独开一个 web dyno,否则测试流量会干扰生产实例。
也就是从这个时候开始,我注意到 Heroku 的计费逻辑有一个非常“吃”规模的特点:它不是按项目整体收费,而是按“应用实例 + 附加服务”逐项收费。Web 进程按数量、类型单独计费,Worker 单独计费,数据库按容量和连接数分档,Redis 又分档,日志、监控、证书、备份也各有各的费用。你以为自己在用“一个平台”,其实是在为十几个独立组件分别付费。
另一个容易被忽略的问题是 dyno 的规格和实例数量。Heroku 的单实例资源并不宽裕,一旦应用出现性能瓶颈,你通常不是去优化代码,而是直接加一个 dyno。加一个容易,加两个也容易,账单翻倍同样容易。到迁移前,我们一个并不复杂的 Rails 风格 Web 应用加后台任务系统,月账单已经超过了团队里任何一个人的云主机预算。这时候我终于开始认真思考:我们到底是离不开 Heroku,还是离不开它背后的部署能力?
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Heroku 账单里的三个“黑洞”,不是单看 Dyno 价格就能发现的
很多人对 Heroku 成本的理解,停留在“一个 web dyno 大概多少钱”的层面。实际上,等你真刀真枪跑起一个业务系统,会发现 Dyno 本身只是账单的一部分。下面我按当时的账单记录,拆解一个典型应用在 Heroku 上的月成本构成。
2.1 算一笔账:一个典型 Web 应用每月在 Heroku 花多少钱
以我们当时运行的 Web 工具为例:一个 Web 应用对外服务,一个后台 Worker 处理异步任务,数据库使用 PostgreSQL,缓存和队列使用 Redis,另外附加了日志、监控和备份服务。账单大致长这样:
| 项目 | 规格说明 | 月成本估算 |
|---|---|---|
| Web dyno × 2 | 标准 1X,保证并发处理能力 | 约 50 美元 |
| Worker dyno × 1 | 标准 1X,跑 Sid |
