为什么公司会离开 Heroku(除了成本)

取决于你问谁,Heroku 自 2010 年被 Salesforce 收购以来,一直在稳步下降——或者至少在技术层面停滞不前。


 

鉴于最近的多次中断,关于许多工程团队与 Heroku 之间的爱恨交织关系已经有很多说法。取决于你问谁,Heroku 自 2010 年被 Salesforce 收购以来,一直在稳步下降 - 或者至少在技术层面停滞不前(请参阅本文以获得出色的概述)。

在这一点上,Heroku 的高昂定价(尤其是私人空间和 Heroku Shield)在 Hacker News 和 Twitter 的线程上都有很好的记录。然而,对于大多数从 Heroku 迁移的团队来说,成本通常只是等式的一部分——我们应该知道。我们的许多用户直接从 Heroku 切换到 Porter,迄今为止,作为我们迁移计划的一部分,我们的团队已经迁移了 150 多个 Heroku 应用程序。

因此,我们汇编公司决定离开 Heroku 的最常见技术原因。不用说,这只是我们根据经验观察到的,原因没有按特定顺序列出。

No. 1 - 缺乏资源控制

资源限制在 Heroku 上以两种主要方式表现出来:(1) 固定的测功机类型和 (2) 受限的自动缩放。

首先,Heroku 仅提供六种基本的测功机类型,无法调整可用的 CPU:


 

即使对于 Heroku Enterprise 用户来说,选择仍然很少:


 

虽然有可能有一些 Heroku dyno 可以满足给定服务的资源需求,但几乎没有甚至没有空间可用于优化。随着工程团队的成熟和扩展,这些不灵活的资源限制成为不必要开销的重要领域。

此外,自动缩放仅在Performance-tier 和 Private Spaces dynos上可用。除了将缩放任意限制到特定的测功机类型之外,Heroku 还对缩放策略提供了极其有限的控制。Heroku 的内置自动缩放器仅允许测功机根据 p95 响应时间进行缩放,并且对所有测功机强制执行严格的全局缩放限制。

No. 2 - 网络限制

许多团队需要他们的应用程序与需要静态 IP 才能列入白名单的第三方服务集成(我们经常在金融科技公司、数据管理工具和其他需要直接访问其用户环境的服务中看到这种情况)。

不幸的是,Heroku 的 Common Runtime 没有为静态出口 IP 提供原生支持。这是来自 QuotaGuard 的解释:

“Heroku 在通用运行时环境中不提供静态 IP 地址。在每月花费数千美元的 Heroku Private Spaces 中,静态 IP 可用,但它们不是负载平衡、在专用代理上运行或高度可定制的。”
--配额卫士

然而,虽然自定义插件(如 QuotaGuard)可以为 Heroku 上的静态 IP 提供更强大的解决方案,但这些插件每月要花费超过 1000 美元才能获得无限流量。相比之下,在像 Porter 这样的服务上,静态出口 IP 是开箱即用的,并且是集群范围的。
此外,对于不在 Heroku Private Spaces 上的用户(它本身仅会为隔离的 VPC 产生大量费用),许多附加组件必须公开,包括数据库和缓存等服务。

第 3 名 - 有限区域

Heroku 仅提供两个共享和六个私有空间区域来运行用户工作负载。虽然这对于刚开始的应用程序通常很好,但随着合规性和性能需求的发展,缺乏区域可选性可能成为一个重要的瓶颈。

对于具有某些数据处理要求的团队(尤其是在欧洲),Heroku 可能根本无法提供一个可行的区域来托管关键服务。在性能方面,无法将应用程序部署到更接近大多数用户的区域也可能会为面向用户的工作负载引入不良延迟。

虽然这涉及到下一个原因,但缺乏对可以将应用程序部署到哪些区域的控制也会导致对 AWS 中的区域中断的容忍度降低(Heroku 在后台依赖它)。

No. 4 - 频繁停电

虽然一些 Heroku 中断是由于 AWS 造成的,但许多问题完全是由于 Heroku 自己的基础设施造成的。就在一个月前,由于Heroku 端的DNS 配置更改无效,Heroku 上的所有常见运行时应用程序都关闭了一个小时。

最近,由于 GitHub OAuth 令牌泄漏,所有基于 GitHub 的 Heroku 部署(即几乎所有部署)都被阻止,并且所有用户的审查应用程序都被暂停。在撰写本文时,Heroku 团队仍在积极调查安全事件以确定根本原因。

结论

虽然此列表中省略了一些荣誉提及(例如,缺乏对 crons/jobs 的支持、不灵活的超时和连接限制等),但以上是我们看到团队从 Heroku 迁移的最常见的技术原因。

然而,离开 Heroku 的决定通常与特定的技术考虑一样具有战略意义。对于大多数成长中的工程团队来说,从 Heroku 迁移到 AWS 或 GCP 等云提供商的问题不是“如果”而是“何时”的问题。

虽然对于小型团队和个人开发人员来说,该平台仍然是一种以最小开销部署初始服务的绝佳方式,但随着公司的发展,Heroku 不可避免地会出现一个问题,即 Heroku 对开发人员的阻碍大于对他们的帮助。

分类: 默认 标签: 迁移 应用程序 服务 区域 限制 部署 缩放 静态 团队 用户 发布于: 2022-04-28 09:28:17, 点击数: