无服务器计算的前景如何?2022 再看 Serverless|社区征文

社区征文Serverless

前言: 从 2019 年 Serverless Framework 进入中国以来,我便开始了 Serverless 领域的技术布道和运营工作,每年都有人提问 Serverless 相关的问题,从 Serverless 是什么到 Serverless 离大规模应用到底有多远?2022 年已经到来,三年过去了,谨以此文作为工作总结!

「Serverless」的中文译做「无服务器」,被认为是新一代的云计算发展方向。越来越多的行业及公司因其能显著地降低开发成本、按需自动扩缩容、免运维等诸多优势而采用 Serverless 技术。

评价一项技术的前景,要从技术的本质出发,看它能够真正带来什么?


一、Serverless 的原点

鉴古知今,加州大学伯克利分校在 2009 年发表过一篇名为《Above the Clouds: A Berkeley View of Cloud Computing》论文,精准预测了未来十年云计算演进的方向。

十年后,又在论文《Cloud Programming Simplified: A Berkeley View on Serverless Computing》中对 Serverless 的概念进行了描述,再次预测了 Serverless 的挑战及需要解决的问题。

Cloud Programming Simplified: A Berkeley View on Serverless Computing

在 UC Berkeley 的描述中,Serverless Computing 是一种用云的简化方式,可以近似地认为 Serverless Computing = FaaS + BaaS。

论文里有个精妙的比喻:Serverless 极大地简化了基于云服务的编程,就好像汇编语言到高级编程语言般的转换。

一般来说,Serverless 有这么几个特点:

  1. 隐藏了服务器的概念。服务器依然存在,但开发者无需针对服务器进行繁琐开发和运维操作;
  2. 提供了一种按需付费的模型,并且在资源空闲时不收费;
  3. 提供极致的弹性伸缩能力,从而让计算资源能完美适配业务需求。

纵观云计算的发展史,Serverless 恰好接入了云计算的下一阶段:

从部署物理机到虚拟机的过程中,云计算通过「虚拟化」的方式对算力资源进行了更高效的分配。为了更细粒度的分配,容器在云计算发展浪潮中诞生了。那有没有可能再往前一步,将一次业务执行作为单元进行算力分配呢?每当执行的时候才分配一次资源,否则不消耗。

答案就是 Serverless 云函数。

image.png

不难看出,Serverless 对编程模式的转变极大地激励了开发者,可以让开发者专注于业务实现,拓展了能力边界。


二、不只是理念,Serverless 开始崭露头角

在那个云计算还在努力做市场教育的年代,Serverless 的想法极大地刺激了开发者的神经,还有什么比这更心动的开发方式呢?

2014 年,Amazon 首次引入了 Lambda。再加上次年发布的 API Gateway,Serverless 配合已有的云服务开始崭露头角,它不再是学术圈的理念,走出了一条能够实际应用的产品化道路。

AWS Lambda 是一项无服务器事件驱动型计算服务,可运行代码来响应事件,并且帮助开发者自动管理底层计算资源。当然,仅按照使用量付费。

Lambda 在高可用性计算基础设施上运行代码,用于执行计算资源的所有管理工作。这包括服务器和操作系统维护、容量调配和弹性伸缩、代码和安全补丁部署以及代码监控和日志记录。作为开发者,只需要提供代码。

下图是一个移动后端的例子:通过使用 Lambda 来构建无服务器后端,以处理 Web、移动、物联网 (IoT) 和第三方 API 请求。

image.png

作为事件驱动型服务,Lambda 可以自动运行代码来响应多个事件,例如,通过 Amazon API Gateway 发送的 HTTP 请求、Amazon S3 存储桶中的对象修改、Amazon DynamoDB 中的表更新以及 Step Functions 中的状态转换。

这里引出了 Serverless 的第二层,除了计算能力,在集成和数据存储这两个层级同样能够 Serverless 化:

  • 应用程序集成上,有事件总线 EventBridge、工作流编排 Step Functions、托管式 API Gateway 等服务。
  • 数据存储方面则有我们很熟悉的对象存储 S3、DynamoDB 数据库等服务。

通过在计算、集成和数据存储三个层级的 Serverless 化,现代应用程序在 Serverless 的基础上构建已经开始成熟。


三、大胆的承诺:只需要编写业务代码

其后,OpenFaaS, Serverless Framework, Apache OpenWhisk 等开源软件的出现让 Serverlss 愈发受到关注,一些担忧也渐渐出现。

首当其冲的便是「冷启动」,即下图的蓝色部分。

尽管设置环境和代码这两个步骤耗费的时间并不需要付费,但它会增加整个调用持续时间的延迟。这会对一些时延敏感型业务造成影响。

image.png

对于这个问题,除了可以用 microVM 性能的提升来拉起延迟,还可以通过「预配并发」的技巧来减少冷启动。例如黑五大促,可以提前预热 Lambda,准备好具体预热的数量和时间后,效果跟调用一个激活完成的函数是一样的。

这意味着所有设置活动都在调用发生之前,包括运行初始化代码:

image.png

同时,由于 Serverless 的无状态性,状态管理和共享仍然很困难。所以当我们讨论 Serverless 的时候,也要辩证地看待:Serverless 在一些场景下可以有着优秀的表现,另一些场景下可能并不是很理想。

文件处理、流处理、Web 应用程序、IoT 后端以及移动后端等领域,是 Serverless 最常用的应用场景。

比如说使用 Lambda 和 S3 进行视频不同格式的转码 —— 一开始使用 EC2 实例,高清转换可能需要 4-6 个小时。新方法可以将视频分为 5M 的小块分别存储在 S3 中,然后用 Lambda 启用上千实例并行计算,完成转码后再合并成一个完整的视频,整个过程缩短到不足 10 分钟,费用也降低到了原来的十分之一。

这个就是在合适场景下使用 Serverless 的典型例子。

另外,包括 Lambda 在内的很多 Serverless 产品也做了不少自身的改进。比如现在可以将 Lambda 函数配置为每次执行最长运行 15 分钟。相比以往的 5 分钟翻了三倍,利好大数据分析和批量事件处理等业务。

对于内存或计算密集型的工作负载,例如机器学习、高性能计算 (HPC) 等,也可以配置更大的内存,并同时线性分配 CPU 和其他资源。

AWS Lambda 开了个好头,我们也可以看到国内阿里云、字节火山引擎、腾讯云也都有相对应的 Serverless 函数产品,对国内的开发者来说相当友好。这时候再看「未来只有业务逻辑才是你唯一要写的代码」,似乎也不是什么大话了。

四、发挥数据价值,Serverless 大势所趋

当我们在谈论计算机科学时,我们谈论的究竟是什么?一言概之 —— 算力、算法、数据。

近年来,摩尔定律越来越难以维持,芯片没有变得更快、内存密度也没有大幅提高。

Serverless 的未来,个人认为:

首先在于 Serverless 提供了更高效的算力分配方式,让开发者可以从 Serverless 架构上轻松获得更多的计算资源。 针对机器学习这样的计算场景,也有类似工作流调度,环境配置等能力进行支持。

拥有了海量算力,数据才能更好地发挥价值。除了函数本身,我们也看到 Serverless 正在作用于更多的产品,甚至包括 Serverless 型数据库,通过上下游服务的配合,也可以进一步帮助提升通用场景下的平台性能、效率和可靠性,让 Serverless 能够作用于更多的应用场景。 这是第二点。

从这些举措我们也可以看出,未来云上服务是越来越多、更便宜更快。

最后,是各类硬件方面的发展。当前云计算强依赖 X86 架构,Serverless 可以考虑引入新的架构,让用户自行选择最适合的硬件来处理任务,从而实现更高的利用率和更强的性能。 前几个月,就看到了 ARM 架构上的支持,对开发者来说是个很好的兆头。


就整个行业发展来说,从物理机到云主机再到 Serverless 架构,去服务器化是越来越明显。

我在文首就说:评价一项技术的前景,要从技术的本质出发,看它真正能够带来什么 —— 对于 Serverless,我觉得这么一句话就足以概括:「将极致的易用性提供给客户」

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论