AWS 计费计算的幕后 - 按秒计费、按 100ms 计费、按请求计费是如何计量的

解析 EC2 的按秒计费、Lambda 的按 1ms 计费、S3 的按请求计费等 AWS 多样化计费粒度是如何计量、汇总和出账的,从计量系统机制进行说明。

计费粒度的演进 - 从按小时到按 1ms

AWS 的计费粒度随着服务的发展不断细化。EC2 在 2006 年推出时采用按小时计费。即使只使用 1 分钟也会产生 1 小时的费用。2017 年 10 月,AWS 将 EC2 的计费改为按秒(最低 60 秒)。这一变更使得短时间批处理或 Spot 实例中断时,只需支付接近实际使用时间的费用。Lambda 更加精细,2020 年从 100ms 单位改为 1ms 单位。在 100ms 单位下,即使执行时间仅 1ms 也要支付 100ms 的费用,改为 1ms 单位后,高速函数的成本最多可降低 99%。Fargate 按秒(最低 1 分钟)、RDS 按秒(最低 10 分钟)、S3 基于请求数和数据量,各服务的计费粒度各不相同。这种多样性是为各服务的使用模式提供最优计费模型的设计决策。

计量系统 - 使用量如何被测量

AWS 计费的背后存在着收集和汇总海量使用数据的计量系统。各服务将使用事件(实例启停、API 请求、数据传输量等)记录为计量记录。EC2 的情况下,Nitro System 的虚拟化管理程序精确记录实例的启动和停止时间,从差值计算使用秒数。Lambda 的情况下,Firecracker 微型 VM 以毫秒精度记录函数的执行开始和结束时间。S3 的情况下,每个请求被记录到日志中,按请求类型(GET、PUT、DELETE 等)分别计数。这些计量记录通过 AWS 内部管道汇总,最终以 Cost and Usage Report(CUR)的形式提供给客户。CUR 中每行对应一条使用记录,大规模 AWS 环境中月度可达数亿行。计量精度直接关系到计费的公平性,因此 AWS 将计量系统的可靠性维持在极高水准。

数据传输费用的复杂性 - 为何难以理解

AWS 费用体系中最难理解的是数据传输费用。数据传输费用因数据移动方向、源和目标区域、源和目标服务、数据量阶梯而异。基本规则是:向 AWS 传入数据(入站)免费,从 AWS 向互联网传出数据(出站)收费。但同一可用区内的数据传输免费,同一区域内不同可用区间的数据传输收费(0.01 USD/GB),不同区域间的数据传输更贵(约 0.02 USD/GB)。通过 CloudFront 的数据传输有时比从 EC2 直接向互联网传输更便宜。这是因为 CloudFront 的费率与 EC2 的数据传输费率分别设定。例如,从 us-east-1 向日本传输数据,EC2 直接为 0.09 USD/GB,CloudFront 为 0.114 USD/GB(日本向)。但由于 CloudFront 从 S3 的源站获取免费,S3 + CloudFront 的组合在很多情况下比从 S3 直接分发更便宜。

账单到达前的幕后管道

AWS 的月度账单在月末截止后次月 3-5 日确定。期间进行海量计量数据的汇总、折扣应用(Savings Plans、RI、批量折扣)、税金计算和货币换算。Cost Explorer 显示的成本数据不是实时的,最多有 24 小时延迟。这是因为计量数据的收集和汇总存在时间差。特别是数据传输费用和第三方 Marketplace 费用往往需要更长的汇总时间。Savings Plans 和 RI 的折扣不是月末统一应用,而是在使用发生时实时应用。Savings Plans 的情况下,每小时比较承诺金额和实际使用金额,承诺金额以内的使用适用折扣价,超出部分适用按需价格。使用 AWS Organizations 的合并账单(Consolidated Billing)时,组织内所有账户的使用量合计后计算批量折扣。例如,S3 的存储费用前 50TB 为 0.023 USD/GB、接下来 450TB 为 0.022 USD/GB 的阶梯定价,合并账单按所有账户总量判定阶梯,比单独计费更有利。

防止意外账单的实践对策

由于 AWS 费用体系的复杂性,出现意外高额账单的情况并不罕见。最常见的原因是忘记停止的资源。为开发测试启动的 EC2 实例、NAT Gateway、Elastic IP、RDS 实例被放置不管,月末收到数百到数千美元账单的模式。设置 AWS Budgets 告警后,可在达到预算 80% 时收到通知。进一步使用 AWS Budgets Actions,可在超出预算时自动应用 IAM 策略限制新资源创建。Cost Anomaly Detection 基于机器学习检测异常成本增长,对偏离正常模式的支出发出告警。例如,平时月额 100 USD 的 S3 费用突然跳升到 1,000 USD 时,数小时内会发送告警。另一个容易忽视的成本是 CloudWatch Logs 的数据摄入费用。Lambda 或 ECS 的日志大量输出时,CloudWatch Logs 的摄入费用(0.50 USD/GB)会超出预期。适当设置日志级别和缩短不必要日志的保留期限是有效对策。如需系统学习云成本管理方法,专业书籍 (Amazon) 可作为参考。