1.3 Serverless应用场景

Serverless透过比较成熟的FaaS产品展示和具体的技术能力,在行业内衍生出各种应用场景和最佳实践。Serverless主要有如下应用场景。

1.微服务

开发者可以使用FaaS产品提供的模板框架,填充业务的处理逻辑代码,轻而易举地开发和部署一个服务。通过API(application programming interface,应用程序接口)网关(gateway)的形式原生支持在线流量的入口,可以完成微服务之间的调用。同时FaaS产品会提供原生的监控、日志、报警等功能,帮助开发者完成端到端的服务落地。值得一说的是,以上的微服务能力不仅包含HTTP框架类的应用,也涵盖主流gRPC/Thrift RPC等框架的应用,进一步扩展了微服务在FaaS产品上的表达能力。

2.流式处理消息

在流式处理消息的场景中,一般会有消息队列产品作为中间件来缓存消息,所以消费消息队列是在日常开发中经常需要考虑的场景。针对各种消息队列产品,消费的逻辑可以被抽象成各类触发器,作为FaaS产品的事件触发源。用户就无须关心消费消息队列的复杂逻辑,特别是在多机房容灾、消费调度分配等场景,平台提供消费的托管型方案,用户只需关心处理数据的代码逻辑,然后FaaS产品自动扩缩容,以应对波峰、波谷场景,获得快速接入、敏捷开发、低成本和少运维的收益。

3.视频编解码任务处理

视频文件一般存放在对象存储系统中,FaaS产品提供的对象存储触发器,可以直接进行业务逻辑的联动,例如自动感知文件的新增事件,使用FaaS产品进行对应的业务逻辑处理加工,等等。视频编解码是典型的资源密集型短任务场景,函数计算可以控制单实例的并发处理,按需进行横向扩缩容,根据视频文件的流量来进行自动的资源供给,针对短任务的调度和运行是FaaS绝佳的应用场景之一。

4.小程序开发

小程序开发是面向固定生态的开发模式,程序的鉴权、接入、存储、通知等功能基本上是标配。在FaaS产品上开发小程序生态,一般会内置周边生态的支持,提供SDK(software development kit,软件开发工具包)对接各种常用BaaS产品,同时FaaS产品敏捷开发、快速发布的特点可以让小程序开发者迅速地把想法落地、快速迭代。如要进一步考虑后续小程序的上线运营、热点事件的流量不确定性,可以利用Serverless自动伸缩的能力,解放运维负担。因此,小程序开发也是Serverless的一个重要应用场景。

5.批处理异步任务

视频编解码的短任务是适合FaaS产品的一个天然应用场景,一般短视频或者经过切片后的视频短任务处理时间比较短,可以使用传统的同步请求模式,但是不乏一些场景需要FaaS产品单个请求有更长的执行时间,并且用户希望能更简单地管理任务。通过FaaS产品异步任务的支持,用户只需要提交任务,已经提交的任务会在FaaS产品的内部系统中进行存储和排队,按照服务设置的节奏来进行分发处理。使用FaaS产品批处理异步任务,用户无须在FaaS之外维护额外的存储队列,可减少组件的运维负担。批处理异步任务一般具有瞬时提交的特点,其瞬间的波峰、波谷尤为明显,这也比较契合Serverless的能力特点。

6.定时任务

定时任务也是一个日常开发中比较常见的场景需求,在FaaS产品中会使用定时任务,因为FaaS产品具有快速启动的特点,定时任务的时效可以得到更好的保障。另外,在一些对时效要求严苛的场景,系统可以在定时任务被触发之前,预先冷启动实例,如此触发时间的准确性就会得到更好的保障。

7.边缘场景

FaaS产品本身以轻量级、快速冷启动著称。在边缘场景中,FaaS产品的典型特征是边缘机房资源相对中心机房而言明显受限,在有限的资源供给下,需要更加轻量的运行时来降低业务请求之外的系统消耗,同时边缘场景大部分是针对延迟敏感型应用进行优化的,需要整体轻量的架构和精简的请求链路来承载业务的请求,才可以达到毫秒级别的冷启动能力。针对边缘场景,以WebAssembly、V8作为运行时基础的精简架构,成为一个明显的趋势。在获得Serverless特性的基础上,追求更加极致的冷启动性能和降低系统开销,同时保证多租户的安全隔离能力,是边缘场景下FaaS产品的建设目标。