「时光不负,创作不停,本文正在参加2021年终总结征文大赛」
从 2019 年 Serverless Framework 进入中国以来,我便开始了 Serverless 领域的技术布道和运营工作,每年都有人提问 Serverless 相关的问题,从 Serverless 是什么到 Serverless 离大规模应用到底有多远?2022 年即将到来,三年过去了,谨以此文作为工作总结吧!
「Serverless」的中文译做「无服务器」,被认为是新一代的云计算发展方向。越来越多的行业及公司因其能显著地降低开发成本、按需自动扩缩容、免运维等诸多优势而采用 Serverless 技术。
评价一项技术的前景,要从技术的本质出发,看它能够真正带来什么?
▎Serverless 的原点
鉴古知今,加州大学伯克利分校 (UC Berkeley) 在 2009 年发表过一篇名为《Above the Clouds: A Berkeley View of Cloud Computing》论文,精准预测了未来十年云计算演进的方向。[1]
十年后,又在论文《Cloud Programming Simplified: A Berkeley View on Serverless Computing》中对 Serverless 的概念进行了描述,再次预测了 Serverless 的挑战及需要解决的问题。[2]
在 UC Berkeley 的描述中,Serverless Computing 是一种用云的简化方式,可以近似地认为 Serverless Computing = FaaS + BaaS。
论文里有个精妙的比喻:Serverless 极大地简化了基于云服务的编程,就好像汇编语言到高级编程语言般的转换。
一般来说,Serverless 有这么几个特点:
-
隐藏了服务器的概念。服务器依然存在,但开发者无需针对服务器进行繁琐开发和运维操作;
-
提供了一种按需付费的模型,并且在资源空闲时不收费;
-
提供极致的弹性伸缩能力,从而让计算资源能完美适配业务需求。
纵观云计算的发展史,Serverless 恰好接入了云计算的下一阶段:
从部署物理机到虚拟机的过程中,云计算通过「虚拟化」的方式对算力资源进行了更高效的分配。为了更细粒度的分配,容器在云计算发展浪潮中诞生了。那有没有可能再往前一步,将一次业务执行作为单元进行算力分配呢?每当执行的时候才分配一次资源,否则不消耗。
答案就是 Serverless 云函数。
不难看出,Serverless 对编程模式的转变极大地激励了开发者,可以让开发者专注于业务实现,拓展了能力边界。
▎不只是理念,Serverless 开始崭露头角
在那个云计算还在努力做市场教育的年代,Serverless 的想法极大地刺激了开发者的神经,还有什么比这更心动的开发方式呢?
在 2014 年的「亚马逊云科技 re: Invent 全球大会」上,Amazon 首次引入了 Lambda。再加上次年发布的 API Gateway,Serverless 配合已有的云服务开始崭露头角,它不再是学术圈的理念,走出了一条能够实际应用的产品化道路。
Lambda 是一项无服务器事件驱动型计算服务,可运行代码来响应事件,并且帮助开发者自动管理底层计算资源。当然,仅按照使用量付费。
Lambda 在高可用性计算基础设施上运行代码,用于执行计算资源的所有管理工作。这包括服务器和操作系统维护、容量调配和弹性伸缩、代码和安全补丁部署以及代码监控和日志记录。作为开发者,只需要提供代码。
下图是一个移动后端的例子:通过使用亚马逊云科技 Lambda 来构建无服务器后端,以处理 Web、移动、物联网 (IoT) 和第三方 API 请求。
作为事件驱动型服务,Lambda 可以自动运行代码来响应多个事件,例如,通过 Amazon API Gateway 发送的 HTTP 请求、Amazon S3 存储桶中的对象修改、Amazon DynamoDB 中的表更新以及 Step Functions 中的状态转换。
这里引出了 Serverless 的第二层,除了计算能力,在集成和数据存储这两个层级同样能够 Serverless 化:
- 应用程序集成上,有事件总线 EventBridge、工作流编排 Step Functions、托管式 API Gateway 等服务。
- 数据存储方面则有我们很熟悉的对象存储 S3、DynamoDB 数据库等服务。
通过在计算、集成和数据存储三个层级的 Serverless 化,现代应用程序在 Serverless 的基础上构建已经开始成熟。
来自 Serverless 社区的一项无服务器调查结果显示:亚马逊云科技是迄今为止使用最广泛的 Serverless 提供商,96% 的受访者使用 Lambda。[3]
▎大胆的承诺:只需要编写业务代码
其后,OpenFaaS, Serverless Framework, Apache OpenWhisk 等开源软件的出现让 Serverlss 愈发受到关注,一些担忧也渐渐出现。
首当其冲的便是「冷启动」,即下图的蓝色部分。尽管设置环境和代码这两个步骤耗费的时间并不需要付费,但它会增加整个调用持续时间的延迟。这会对一些时延敏感型业务造成影响。
对于这个问题,除了可以用 microVM 性能的提升来拉起延迟,还可以通过「预配并发」的技巧来减少冷启动。例如黑五大促,可以提前预热 Lambda,准备好具体预热的数量和时间后,效果跟调用一个激活完成的函数是一样的[4]。
这意味着所有设置活动都在调用发生之前,包括运行初始化代码:
同时,由于 Serverless 的无状态性,状态管理和共享仍然很困难。所以当我们讨论 Serverless 的时候,也要辩证地看待:Serverless 在一些场景下可以有着优秀的表现,另一些场景下可能并不是很理想。
文件处理、流处理、Web 应用程序、IoT 后端以及移动后端等领域,是 Serverless 最常用的应用场景。
美国电信 Verizon 的 Revvel 团队介绍了他们如何使用 Lambda 和 S3 进行视频不同格式的转码 —— 团队一开始使用的是 EC2 实例,高清转换可能需要 4-6 个小时。新方法则是将视频分为 5M 的小块分别存储在 S3 中,然后用 Lambda 启用上千实例并行计算,完成转码后再合并成一个完整的视频,整个过程缩短到不足 10 分钟,费用也降低到了原来的十分之一。
这个就是在合适场景下使用 Serverless 的典型例子。
另外,Lambda 也做了了很多自身的改进。比如现在可以将 Lambda 函数配置为每次执行最长运行 15 分钟[5]。相比以往的 5 分钟翻了三倍,利好大数据分析和批量事件处理等业务。
对于内存或计算密集型的工作负载,例如机器学习、高性能计算 (HPC) 等,最多可以为 Lambda 函数分配 10 GB 的内存 。与之前的限制相比,增加了 3 倍多 。同时,Lambda 根据配置的内存量线性分配 CPU 和其他资源。这意味着现在可以在每个执行环境中访问多达 6 个 vCPU 。
在一项调研报告里,Lambda 的调用率是两年前的 3.5 倍,冷启动延时也比一年前要短得多。[6]
既是探路者,也是引领者。
Lambda 从 Serverless 的传统艺能出发,到解决了冷启动的「先天问题」,加之基于业务的后天改进,这时候再看亚马逊首席技术官 Werner Vogels 宣称的「未来只有业务逻辑才是你唯一要写的代码」,似乎也不是什么大话了。
▎发挥数据价值,Serverless 大势所趋
当我们在谈论计算机科学时,我们谈论的究竟是什么?一言概之 —— 算力、算法、数据。
近年来,摩尔定律越来越难以维持,芯片没有变得更快、内存密度也没有大幅提高。
Serverless 的未来,在于提供更高效的算力分配方式,让开发者可以从 Serverless 架构上轻松获得更多的计算资源。 针对机器学习这样的计算场景,也有类似工作流调度,环境配置等能力进行支持。
拥有了海量算力,数据才能更好地发挥价值。今年的亚马逊推出了 Amazon EMR Serverless,无需管理服务器即可使用开源大数据框架(如 Apache Spark、Hive 和 Presto)运行分析应用程序。通过上下游服务的配合,也可以进一步帮助提升通用场景下的平台性能、效率和可靠性,让 Serverless 能够作用于更多的应用场景。
从这些举措我们也可以看出,未来云上服务是越来越多、更便宜更快。
最后,是各类硬件方面的发展。当前云计算强依赖 X86 架构,Serverless 可以考虑引入新的架构,让用户自行选择最适合的硬件来处理任务,从而实现更高的利用率和更强的性能。 前几个月,就看到了 ARM 架构上的支持[7],对开发者来说是个很好的兆头。
就整个行业发展来说,从物理机到云主机再到 Serverless 架构,去服务器化是越来越明显。
我在文首就说:评价一项技术的前景,要从技术的本质出发,看它真正能够带来什么 —— 对于 Serverless,用 Amazon 大中华区产品部总经理顾凡的话说就是将**「极致的易用性提供给客户」**
参考
- [^](www.zhihu.com/question/50… the Clouds: A Berkeley View of Cloud Computing》 www2.eecs.berkeley.edu/Pubs/TechRp…
- [^](www.zhihu.com/question/50… Programming Simplified: A Berkeley View on Serverless Computing》 www2.eecs.berkeley.edu/Pubs/TechRp…
- [^](www.zhihu.com/question/50… of the Serverless Community Survey Results www.serverless.com/blog/state-…
- [^](www.zhihu.com/question/50… Lambda: Performance optimization aws.amazon.com/cn/blogs/co…
- [^](www.zhihu.com/question/50… Lambda 函数最长可以运行 15 分钟 aws.amazon.com/cn/about-aw…
- [^](www.zhihu.com/question/50… state of serverless www.datadoghq.com/state-of-se…
- [^](www.zhihu.com/question/50…: ARM comes to Lambda awsteele.com/blog/2021/0…