当今业界无论是 internet 还是 intranet ,即使没有任何负载,99.99% 的服务也都以服务的形式跑在服务器上。相比于浪费,带来的体验和稳定性的提升几乎可以忽略不计。
在之前的文章 名为“原生”,实则“排异”——有状态服务请对云原生say no[1] 和 云是一台新电脑[2] 里,我们反复提到云的优势在于弹性,而云的弹性的最佳体现就是 serverless function。我们下面就聊聊为什么用 serverless 技术栈可以大幅度降低浪费,减少复杂度。
几乎所有的业务都有波峰波谷。下图展示了一个互联网业务一天内的 PV 变化情况,从中可以看出,业务的波峰接近波谷的 10 倍。如果按照波峰来做容量规划,将会浪费大量资源。
放大上述图的一部分,只看30分钟的数据,即使将时间段缩小到分钟级,workload也不是平稳的。
唯一不变的就是变化,随着 Page View 的上蹿下跳,业务对资源的实际需求也上天入地,请问为了峰值规划的计算资源有多少时间能派上用场呢?
先直观的比较一下两者的成本
以 AWS Mumbai Region 的价格表为准,下面是 x64 架构的 Lambda 和 EC2 价格:
| 资源 | Lambda | C5.4xlarge EC2 |
|---|---|---|
| CPU | 2vCPU | 16vCPU |
| 内存 | 2G | 32GiB |
| 存储 | 512M | 0 |
| 网络 | 0.6Gbps | 10Gbps |
| 价格 | 0.0000000333 USD/ms | 0.68 USD/h |
我们用内存作为锚点, 用 16 个 Lambda 实例来对标 EC2,在 lambda 的 CPU 数量多一倍的情况下,双方成本比为 2.82 倍(RI 会严重影响云计算的弹性,因此不在本文讨论范围内)。从上面的表格我们可以看出,只要服务活跃时间少于 8.5 小时,使用 Serverless 架构的成本更低。大部分公司的峰值负载持续时间仅仅是几分钟最多不会超过一小时,而对于很多 To B 业务来说,非工作时间甚至只有个位数的访问 QPS。所以如果完全使用 serverless 技术栈,你的账单可能会被脚踝斩。