Serverless架构自提出到现在经过若干年的发展,已经在很多领域中有着非常多的最佳实践。但是Serverless自身也是有局限性,由于其无状态、轻量化等特性,Serverless在一部分场景下可以有非常优秀的表现,但是在另外一些场景下可能表现的并不是很理想。在《CNCF Serverless Whitepaper v1.0》中对Serverless架构所适合的用户场景描述为:
- 异步的并发,组件可独立部署和扩展(原文:Asynchronous, concurrent, easy to parallelize into independent units of work)
- 应对突发或服务使用量不可预测(原文:Infrequent or has sporadic demand, with large, unpredictable variance in scaling requirements)
- 短暂、无状态的应用,对冷启动时间不敏感(原文:Stateless, ephemeral, without a major need for instantaneous cold start time)
- 需要快速开发迭代的业务,因为无需提前申请资源,因此可以加快业务上线速度(原文:Highly dynamic in terms of changing business requirements that drive a need for accelerated developer velocity)
在文章中还对Serverless架构可以更好支持的领域进行了简单的描述:Non-HTTP-centric and non-elastic scale workloads that weren’t good fits for an IaaS, PaaS, or CaaS solution can now take advantage of the on-demand nature and efficient cost model of a serverless architecture,针对Serverless比较适用的具体领域,在文章中这样举例:
• 响应数据库更改(插入、更新、触发、删除)的执行逻辑(原文:Executing logic in response to database changes (insert, update, trigger, delete) )
• 对物联网传感器输入消息(如MQTT消息)进行分析(原文:Performing analytics on IoT sensor input messages (such as MQTT messages) )
• 处理流处理(分析或修改动态数据)(原文:Handling stream processing (analyzing or modifying data in motion) )
• 管理单次提取、转换和存储需要在短时间内进行大量处理(ETL)原文:Managing single time extract, transform, and loarequire a lot of processing for a short time (ETL) )
• 通过聊天机器人界面提供认知计算(异步,但相关)(原文:Providing cognitive computing via a chatbot interface (asynchronous, but correlated) )
• 调度短时间内执行的任务,例如cron或批处理的调用(原文:Scheduling tasks performed for a short time, such as cron or batch style invocations )
• 机器学习和人工智能模型(检索一个或多个数据元素(异步、并发,易于并行化到独立的工作单元罕见或零星需求,与大,不可预测的方差比例要求无状态的,短暂的,没有一个主要需要瞬时冷启动时间高度动态变化的业务需求的驱动需要加快开发速度表7,NLP,或图像,并与预先学习的数据模型进行匹配,以识别文本、面孔、异常等。)(原文:Serving machine learning and AI models (retrieving one or more data elements such Asynchronous, concurrent, easy to parallelize into independent units of work Infrequent or has sporadic demand, with large, unpredictable variance in scaling requirements Stateless, ephemeral, without a major need for instantaneous cold start time Highly dynamic in terms of changing business requirements that drive a need for accelerated developer velocity 7 as tables, NLP, or images and matching against a pre-learned data model to identify text, faces, anomalies, etc.) )
• 持续集成管道按需为构建作业提供资源,而不是保持一个构建从主机池等待作业分派(原文:Continuous integration pipelines that provision resources for build jobs on-demand, instead of keeping a pool of build slave hosts waiting for jobs to be dispatched)
《CNCF Serverless Whitepaper v1.0》站在Serverless架构的特点,从理论上描述了Serverless架构适合的场景或业务,云厂商将会站在自身的业务角度,整体来描述Serverless架构的典型场景,不同云厂商虽然描述的典型场景可能有所不同,但是实际上整体思路或者类型是类似的:
云厂商 产品 |
典型场景举例 |
AWS Lambda |
|
阿里云 函数计算 |
|
华为云 函数工作流 |
|
腾讯云 云函数 |
|
综上所述可以看到在各个云厂商层面,所推出的典型场景主要包括:实时文件处理、实时数据处理、机器学习(AI推理预测)、IoT后端、移动应用后端、Web应用程序、音视频转码(实际上与实时文件处理是类似的)等。
实时文件处理
视频应用、社交应用等场景下,用户上传的图片、音视频的总量大、频率高,对处理系统的实时性和并发能力都有较高的要求。例如:对于用户上传的图片,我们可以使用多个函数对其分别处理,包括图片的压缩、格式转换、鉴黄鉴恐等,以满足不同场景下的需求。
数据ETL处理
通常我们要对大数据进行处理,需要搭建Hadoop或者Spark等相关大数据的框架,同时要有一个处理数据的集群,也被称为分布式系统。通过Serveerless技术,只需要不断地将获得到的数据不断的存储到对象存储,并且通过对象存储相关触发器触发数据拆分函数进行相关数据或者任务的拆分,然后再调用相关处理函数,处理完成之后,存储到云数据库中。例如:某证券公司每12小时统计一次该时段的交易情况并整理出该时段交易量 top 5,每天处理一遍秒杀网站的交易流日志获取因售罄而导致的错误从而分析商品热度和趋势等。云函数近乎无限扩容的能力可以使您轻松地进行大容量数据的计算。我们利用云函数可以对源数据并发执行多个 mapper 和 reducer 函数,在短时间内完成工作;相比传统的工作方式,使用云函数更能避免资源的闲置浪费从而节省资金。
实时数据处理
通过Serverless架构所支持的丰富的事件源,通过事件触发机制,可以通过几行代码和简单的配置对数据进行实时处理,例如:对 OSS zip 包进行解压、对 SLS 日志或 OTS 数据进行清洗、对 MNS 消息进行自定义消费等
机器学习(AI推理预测)
在 AI 模型完成训练后,对外提供推理服务时,可以使用Serverless架构,通过将数据模型包装在调用函数中,在实际用户请求到达时再运行代码。相对于传统的推理预测,这样做的好处是无论是函数模块还是后端的GPU服务器,以及对接的其他相关的机器学习服务,都是可以进行按量付费以及自动伸缩,从而保证性能的同时也确保了服务的稳定。
IoT后端
目前很多厂商都在推出自己的智能音响产品,用户可以对智能音箱说出一句话,智能音箱可以通过互联网将这句话传递给后端服务,然后获得到反馈结果,再返回给用户。通过Serverless架构,可以将API网关、云函数以及数据库产品进行结合来替代传统的服务器或者是虚拟机等,通过这样的一个架构,一方面,可以确保资源的按量付费,只有在使用的时候,函数部分才会计费,另一方面可以当用户量增加之后,通过Serverless实现的智能音箱系统的后端,也会进行弹性伸缩,可以保证用户侧的服务稳定,当我们要对其中某个功能进行维护相当于对单个函数进行维护,并不会对主流程产生额外风险。相对来说会更加安全、稳定等。
Web应用/移动应用后端
Serverless架构和云厂商所提供的其他云产品进行结合,开发者能够构建可弹性扩展的移动或 Web 应用程序 – 轻松创建丰富的无服务器后端,而且这些程序可在多个数据中心高可用运行,无需在可扩展性、备份冗余方面执行任何管理工作。
音视频转码
视频应用、社交应用等场景下,用户会上传一些视频,通常情况下,上传的视频会进行一些转码,包括转换为不同的清晰度,通过Serverless技术与对象存储相关产品组合,利用对象存储相关触发器,即上传者将视频上传到对象存储中,触发如果云函数对齐其进行处理,处理之后将其重新存储到对象存储中,这个时候其他用户过来就可以选择编码后的视频进行播放,包括对不同清晰度的选择等。
综上所示,Serverless架构的典型应用场景更多是由Serverless架构的特点决定的。当然,随着时间的不断推移,Serverless架构其实在不断的演进,特点会更加突出,劣势会被弥补,进而Serverless架构所适合的场景也会不断的更加丰富。