上云一年烧掉超过100万美元,我们的钱都去哪儿了?

编译 | 核子可乐、褚杏娟

ConvertKit 是一家全功能电子邮件服务提供商 (ESP),是发展最快的电子邮件营销公司之一。但作为一家自力更生的私营企业,没有外部资金的支持,云成本控制对 ConvertKit 来讲非常重要。

近日,ConvertKit 详细列出了 2021 年在 AWS 上的花费,回顾了自己到底花掉了多少钱,并思考哪里还能进一步优化。“过去这一年我们也犯了不少错,但好在这些问题都可以修正。”ConvertKit 基础架构工程师 Kris Hamoud 表示。

2021 年,ConvertKit 在 AWS 上一共花了 106 万 5754.35 美元,跟 2020 年比增长了 12.5%,占去年全年净收入的 3.9%。从 1 月到 12 月,ConvertKit 的 EC2 实例支出增长达 96%,主要原因是其扩展了 Cassandra 与 Elasticsearch 集群。

另外,ConvertKit 还投资建立了数据管道,并着手把客户从 FanBridge 迁移到 ConvertKit。虽然 EC2 实例增加了 96%,但其他 EC2 支出却只增长了 49.5%,这主要得益于更高的区域数据传输效率。最后,通过提升 CDN 使用率并优化备份流程,ConvertKit 将 S3 成本降低了 33%。

ConverKit 在 AWS 上的各项支出占比

“尽量提高效率,把好钢用在刀刃上”已经成为 ConvertKit 维持收入平衡、保障业务正常运转的核心指导思想。

钱都花哪里了?

从 1 月到 12 月,ConvertKit 的月度账单总额增长了 44%,主要原因是 EC2 实例和 Redshift 支出的提升。ConvertKit 需要在主 MySQL 服务器上执行强制维护,所以 11 月和 12 月的关系数据库服务支出也出现了一波上扬。更多细节,稍后会具体讨论。

9 月份的支出比整个 8 月要低出 36%,也比 10 月低了 38%。之所以成本下降,是因为 ConvertKit 跟 AWS 协商换得了不少抵扣积分。

“EC2 实例”花费约 34.8 万美元

去年 1 到 12 月,ConvertKit 的 EC2 支出共增加达 96%。其中涨幅最大的部分(18.3%)发生在 11 月(38636.86 美元)和 12 月(45730.12 美元)。这波飙升主要有以下几个原因。

首先,黑色星期五和网络星期一两大购物季让年末双月成为巅峰时段。ConvertKit 在黑色星期五内共发送 8510 万封邮件,网络星期一则为 9390 万封邮件。ConvertKit 因此增加了基础设施容量,以确保用户、待命工程师和支持人员都能安然度过这个假期。

其次,CovertKit 于 2021 年 4 月收购了 Fanbridge,并在下半年加快了相应的迁移过程。业务量的增加必然消耗更多资源。再者,ConvertKit 上调了多区域 Cassandra 集群与 Elasticsearch 集群的容量。

最后,ConvertKit 的很多计算类资源节约计划(Savings Plan For Compute Usage)其实 12 月就到期了,直到今年 1 月才重新续上。如果好好把握,成本应该会更低一些。

“关系数据库服务”花费约 24.2 万美元

ConvertKit 的关系数据库服务(RDS)账单可以算是“平地一声雷”。在前 11 个月,月平均支出仅为 19155.60 美元,跟 2019 年 8 月以来的各月份基本保持一致,但到了 12 月开销陡然上扬。

那么,12 月份究竟发生了什么?

11 月下旬,AWS 方面通知 ConvertKit 出于安全原因,需要进行一波强制操作系统更新,更新工作必须在 2022 年 1 月之前完成,否则 AWS 就要自动执行。

保障安全当然重要,但保障正常运行时、数据完整性和稳定性也同样重要。ConvertKit 拥有一套 9 TB 以上的 MySQL 数据库,而其中提供的默认维护选项在可预测性和可靠性方面都不太好。因此,ConvertKit 决定创建一个全新 MySQL 服务器,并将操作系统更新以只读副本的形式安装。之后,ConvertKit 在空闲时段把只读副本提升成主副本,这样就能把停机时间控制到最短。

由于 RDS 会将数据延迟加载到只读副本中,所以 ConvertKit 得在 12 月初就启动这个副本,给它时间慢慢与主节点同步起来。换句话说,整个 12 月份 ConvertKit 同时运行着两倍大小的 RDS 实例,成本自然也就翻了一番。

“事实证明,我们的努力完全值得。12 月 28 日凌晨 1 点(EST)我们完成了数据库更替,整个过程耗时约 30 分钟而且一切顺利。”Hamoud 表示。

“EC2 其他”花费约 14.7 万美元

大部分 EC2 其他成本来自数据传输。前文已经提到,第四季度整个基础设施的运行强度都比前三个季度要大一些。再加上 ConvertKit 在此期间组织了一次 Fanbridge 迁移,所以年底的支出肯定要比年初高得多。

ConvertKit 还用到了 AWS 托管的 NAT 网关。在 Hamoud 看来,这项服务价格不菲,但也确实很可靠,成本占 2021 年全年 AWS 开销的 3.5%(36829.50 美元)。“对于我们这种要靠一个团队支持两大项目的用户来说,花点钱换可靠性、换安心还是划算的。”

“计算类资源节约计划”花费约 9.7 万美元

2021 年,ConvertKit 通过购买节约计算省下了 35384 美元。从图表上看,月度开支呈现出下降趋势,这是因为 ConvertKit 购买了多项节约计划,而且都是在年内到期。这方面开支的下降,对应的就是 EC2 实例支出的上升,其中最大的问题出在 12 月。

“所以大家千万别忘了续订节约计划,否则浪费掉的可是真金白银。”Hamoud 建议道。另外,因为拿到了不少积分,所以 ConvertKit 整个 9 月份的节约计划一分钱都没花。

“S3 存储”花费约 7.4 万美元

2020 年底,ConvertKit 改进了备份流程,让 S3 账单降低了 47%。之后,ConvertKit 支出逐渐增加,是因为其产品使用量迎来了预期增长。ConvertKit 在电子邮件附件、登录页面、商务、备份及应用程序的各个位置都会用到 S3 存储。

“S3 开销的增加其实是件好事,代表使用我们产品的用户群体有所增长。”Hamoud 表示。

“支持”花费约 6.5 万美元

支持成本同样是跟着使用量来走的。由于 ConvertKit 的 AWS 总体成本开始逐月增加,所以在支持方面花的钱自然更多。其中的例外同样出现在 9 月份,原因也是前边提到的:积分兑换。

“EC2-ELB”花费约 3.7 万美元

ConvertKit 的 ELB 成本在 1 月到 12 月之间增长了 12.5%。考虑到 ConvertKit 在 2021 年的月度经常性收入(MRR)增长了 12.8%,这部分新增账户肯定形成了新的收入来源,但同时也会给连接和传输带宽带来额外的负载均衡成本。

ConvertKit 主要在 Web 应用程序中使用 ELB。随着服务用户数量的增长,Hamoud 预计这部分成本也将继续水涨船高。

“Redshift”花费约 2.1 万美元

多年以来,ConvertKit 的分析团队一直使用 Redshift。但 ConvertKit 2021 年在数据和分析管道上投入的资金确实创下了历史新高。

改进数据流意味着在 2021 年开始摄取更多数据并转而使用更强大的配套硬件。ConvertKit 在 7 月和 8 月完成了对旧 Redshift 集群的迁移。在此次迁移期间,ConvertKit 同时运行着两套 Redshift 集群,所以 8 月份内出现了一波成本峰值。

“其他成本”花费约 3.2 万美元

3 月到 5 月之间,ConvertKit 引入了由 AWS 提供的 Apache Kafka 托管流(Managed Streaming for Apache Kafka)服务。ConvertKit 之前在某个项目里用过 Kafka,但后来又因为发展方向的变化而选择放弃。如果要继续使用该项目,那么 Kafka 集群的月度托管成本约在 1100 美元左右。

除此之外,其他 AWS 开销都基本保持稳定、没什么大的波动。

云使用不当便是“杀器”

越来越多的企业应用迁移到云原生架构上,但如果不把云成本控制当回事儿,原本天然具备降本增效特点的云原生架构也会引起大量云上资源闲置、云支出浪费。

比如,2020 年 3 月,新冠疫情的全面爆发使得云的使用量迅速增加,初创公司 Milkie Way 便是其中之一。因为团队规模很小,Milkie Way 关注的重点就放在编写代码、设计 UI 以及准备产品身上,根本没在云管理上花多少心思。

因此, Milkie Way 在对 Firebase 和 Cloud Run 进行内部测试的期间,一不小心在几个小时里就烧掉了 72000 美元(约 47 万人民币),这差点导致这个创业公司破产。幸运的是,经过一系列咨询、讨论与内部研究后,谷歌免除了该笔账单。该事件后,Milkie Way 花了几个月时间学习云架构和研究自己的业务体系。

更多详情可以查看:应用上云 2 小时烧掉近 50 万,创始人:差点破产,简直噩梦

2021 年 CNCF《FinOps Kubernetes Report》调研报告显示,迁移至 Kubernetes 平台后,68% 的受访者表示所在企业计算资源成本有所增加,36% 的受访者表示成本飙升超过 20%,这都说明即使是资源利用率更高的云原生架构也需要合理的资源成本管理。

像 ConvertKit 这样了解自己的账单只是第一步。星汉未来联合创始人 &CPO 胡忠想在此前的文章中在优化云成本方面提出了四点建议,不同企业可以根据自己现阶段情况有条件地加以选择:

  • 做到成本可观测。通过建立资源利用率指标和每日对账机制,让企业各部门对成本的认识及管理能力保持一致。
  • 公有云物尽其用。企业由于对云产品了解不够、对云成本认识不足,引入公有云从而导致业务复杂度提升、相应成本提高。企业可以通过定时扩缩容和机型降配两种手段,充分利用公有云的弹性和退改灵活性,直接有效降低公有云的使用成本。
  • 充分利用弹性与共享。企业可以利用 Kubernetes 切割现有资源并以固定 IP 形式交付资源,并对流量模型进行抽象,结合具体业务建立自动扩缩容和错峰调度等。
  • 异地部署、混合编排和在离线整合。这些方式需要从企业整体层面考虑,通常不是一个部门能解决的。企业内部可以公司名义成立专项来实施,先从小业务入手,待验证平台功能完善后,再考虑逐步把核心业务迁移到平台,最终达到优化企业整体资源利用率的目的。

更多详情可以查看:来自一线大厂的云原生成本优化实践指南

降低云成本会对企业利润产生重大影响。Zoom 公司在 2021 年一季度的财报中称,其毛利率从前一季度的 69.4% 上升至 73.9%,这主要是由于在公共云资源的优化上下了很大功夫。Spotify 自研追踪云计算开支的工具,同时鼓励工程师们掌握云计算支出的所有权,使其每年节省了几百万美元的云计算开支。

显然,企业在云计算成本优化上下一番功夫是很值得的。

了解更多:

https://convertkit.engineering/2022/04/22/aws-2021-year-in-review/