写点什么

Serverless 比你预期要贵得多

  • 2021-04-06
  • 本文字数:2186 字

    阅读完需:约 7 分钟

Serverless比你预期要贵得多

在运营一个持续集成(CI)公司多年后,你会发现架构决策中的许多隐藏成本。在本文,我想谈谈 Serverless 和它的主要替代方案——微服务(容器化)架构,它们之间的实际区别。

架构介绍:Serverless 和容器+CDN

我们在过去几年看到的新产品中的绝大多数后端架构都属于这两者之一。

Serverless

serverless 核心思想是指定一个策略来创建新的 Web 服务器,而不是自己启动它们。这样一来,如果你的产品在某个地方出彩,获得巨大的流量爆发,你的云提供商可以启动许多 Web 服务器副本,然后在流量减少时关闭这些 Web 服务器。



serverless 通常与其 AWS 商标名 Lambda 互用


当然,serverless 最终还是会使用 Web 服务器。关键是你不必自己去创建这些服务器。你所要做的只是指定构建它们的方法,然后你的云提供商会随着并发请求数量的增加或减少来创建 Web 服务器的副本。即使对于用户很少的小项目,你也可以通过在夜间没有人访问你的网站时关闭 Web 服务器来节省资金。

容器 + CDN

你可以将托管网站的计算成本最高的部分包给其他人,而非指定一个方法来创建 Web 服务器。这就是 CDN 的思路。当一个 Web 服务器的运行速度变慢,通常是由数百个请求要获取相同的不怎么变的资源。CDN 会为你负责这些常见的请求,例如静态图片。



容器(左)和 CDN(中间)处理来自用户的数百个请求


在这种架构中,你的网站用户会从 CDN 请求资源,CDN 将响应大部分(大约 90%)请求。只有那些不能明显缓存的请求会被转发到你的容器。

概述:serverless vs 容器

  • serverless“Web 服务器”通常是如何创建真正的 Web 服务器的方法,然后你的云服务商会在一个访问者首次请求某些东西时启动一个 Web 服务器。

  • 容器通常启动速度慢得多,因此你需要保持至少一台 Web 服务器 24/7 运行,以防有人访问你的网站。

Serverless 理论上看起来更便宜

当 AWS Lambda 在 2014 年推出时,它听起来不可思议:1GB 内存,每毫秒 0.0000000167 美元的计算量。一个典型的 API 请求可能是 20ms,因此你需要为每个请求支付 0.000000334 美元。


由于大多数工作负载都非常“火爆”,因此即使是用 Lambda 托管一个非常流行的服务,你也只需要支付不到 100 美元每年。


相比之下,对大多数产品来说,一个类似的容器+CDN 架构可能耗费每年 500 美元。


当然,这是一个非常简单的比较(弹性负载均衡、CDN 入口/出口、serverless 也可以使用 CDN 等...),但对于今天的大多数在线产品来说是正确的。在其它同等的情况下,serverless Web 服务器的成本是类似的容器的 10%-20%。

开发者工资是 serverless 的隐藏成本

基础设施成本是一个很好的指标——很容易预测,是比较一个“好架构”与一个“坏架构”的便捷方法。


然而,基础设施成本与开发人员的工资相比却相形见绌。每年 500 美元的容器会由一名每年 75000 美元的开发者维护。


实际上,人力成本是很多公司低估的。如果你有一个本地无法复现的 bug,开发人员使用一个闭源的 AWS 账户会很难复现和调试它。


三个因素结合在一起让用 serverless 进行开发变得异常困难:


  • 你不能本地模拟 serverless 实例,只能在云上模拟。

  • 很少有公司能创建它们的生产环境的基础设施的副本。开发人员通常会花几个小时来申请合适的环境,并确保没有其他人同时使用这个环境。

  • 开发人员很少能访问生产环境资源,因此它们不得不花费数个小时协调一个编程会话才能在生产环境调试。



世界各地的 slack 工程频道的一个常见场景


如果单个开发人员每周修复一个 bug,并且由于上述因素,修复每个 bug 所需的时间延长一个小时,那么你的公司每年会为单个开发人员的生产力损失支付 1872 美元。这个数字已经是最初成本差异的 4 倍。


相反,一个容器架构可能完全运行在一个开发人员的电脑上,因此每个开发人员都可以在他们自己的笔记本上重现 bug,而不必使用一个演示(staging)环境。

另一项成本:serverless 会给客户带来更多 bugs

出于与前一点相似的原因,使用一个持续集成/持续部署系统自动测试一个 serverless 架构要困难得多。


容器化架构更容易进行测试,因为你可以在单个 VM 中运行它。想要运行持续集成,serverless 架构需要请求你的云服务商为每次更改进行部署。



系统的最终测试是端到端(end-to-end,E2E)测试:通过创建一个假用户,然后像一个真用户一样与整个应用程序进行交互,来验证通用工作流程。如果可以根据需要创建架构副本,这些测试就能针对提出的更改自动运行。


在许多公司中,demo 演示中的一个 bug 可能意味着损失 6-7 位数的销售额。这些 bug 通常是影响不同组件交互的看似无害的更改结果。如果开发人员不在每次更改后测试这些流程是否继续生效,那么就很容易损坏一个“立即支付(pay now)”按钮或者登入。


如果整个堆栈能运行在单个机器上,那么它就可以不怎么麻烦地运行在一个持续集成服务商上。相比之下,一个 serverless 栈可能需要为每个更改在你的云服务商中从头创建整个环境,这会花费 10 倍更长的时间。

解决方案

显然,对于服务器的解决方案是让供应商采用一个通用标准(AWS kubeless 或 AWS OpenFAAS)。只要 serverless 与闭源云产品同名,那么就会因为开发人员的生产力的损失而大大增加成本。


实际上,最好的解决方案是完全避免使用 AWS Lambda 或 Cloudflare Workers 这样的平台作为核心基础设施,直到能自行托管它们进行问题复现和测试。


对于几乎每一个架构决策,托管成本都比开发者行动缓慢的成本要重要得多。在考虑到需要使用基础设施工作的开发人员的时间成本之前,不要因为价格来进行架构决策。


原文链接:


https://layerci.com/blog/the-hidden-costs-of-serverless/

2021-04-06 14:283675
用户头像

发布了 165 篇内容, 共 76.6 次阅读, 收获喜欢 343 次。

关注

评论

发布
暂无评论
发现更多内容

架构实战营 - 模块 6- 作业

请弄脏我的身体

架构实战营

MySQL基础之十一:创建表

打工人!

MySQL 6月日更

架构实战营-模块一作业

rubys_

架构实战营

🍃【SpringBoot技术专题】「StateMachine」FSM状态机设计及实现

洛神灬殇

springboot 6月日更 状态机 StateMachine

《原则》(十三)

Changing Lin

6月日更

Kubernetes手记(10)- POD 存储卷

雪雷

k8s 6月日更

SpringCloud Gateway 路由转发性能优化

黄仲辉

性能优化 动态路由 SpringCloud Gateway JMH性能基准测试

五种服务部署升级策略,你也许会用的到

架构精进之路

6月日更 服务升级

【音视频】基于声网的多人视频通话功能建设

轻口味

android 音视频 IM 声网

CSS 选择器总结

编程三昧

CSS html5 大前端 DIV+CSS CSS选择器

架构师实战营 模块六总结

代廉洁

【LeetCode】第一个错误的版本Java题解

Albert

算法 LeetCode 6月日更

HarmonyOS的万里长征和万里长城

脑极体

中国数字化转型为全球带来机遇

CECBC

「SQL数据分析系列」2. 创建和使用数据库

Databri_AI

数据库 语法

模块六作业 - 拆分电商系统为微服务

张大彪

新手讲解this

前端树洞

JavaScript 面试 大前端 js

模块6作业

薛定谔的指南针

架构实战营

产品开发的过程

Qien Z.

运营管理 6月日更

(VMware)ubuntu 环境下搭建docker环境

逸少

Docker Docker-compose vmware Ubuntu20.04

Java语言概述以及环境搭建

若尘

java编程 6月日更

【经验分享】RTC 技术系列之视频编解码

Hanson

音视频

策略模式怎么玩?

卢卡多多

设计模式 策略模式 6月日更

☕【JVM技术探索】重塑虚拟机性能调优计划

洛神灬殇

JVM jvm调优 GC调优 6月日更

从零开始搭建一个个人博客网站--Task0

IT蜗壳-Tango

django IT蜗壳教学 6月日更 Datawhale

JAVA设计模式系列--单例模式

加百利

Java 后端 设计模式 单例模式 6月日更

Single-Spa构建第一个微前端项目

devpoint

Vue 大前端 6月日更

Git 各指令的本质,真是通俗易懂啊

xcbeyond

6月日更

nacos配置中心模块详解

捉虫大师

nacos 配置中心

JavaScript学习(二)

空城机

JavaScript 大前端 6月日更

架构师实战营 模块六作业(拆分电商系统为微服务)

代廉洁

架构实战营

Serverless比你预期要贵得多_架构_COLIN CHARTIER_InfoQ精选文章