云函数 SCF 提供的是弹性按量计算的 Faas 服务,可作为 Workload 承载众多 Serverless 应用。SCF 在运行时,开发者会由于业务需求访问各类外部数据,如导入第三方库、非结构化数据以及函数计算输出,这就需要云函数 SCF 提供丰富的存储支持类型,以支持开发者的业务需要。
云函数 SCF 目前已支持的存储类型,其中包括对接云上的其他云产品对象存储 COS、文件存储 CFS,同时还要本地临时存储,以及层。本篇文档介绍这些存储类型之间的区别,供开发者选型时参考。
选型分析
下表从不同维度比对了云函数 SCF 的这四种不同数据存储选项的特性:
存储类型
对象存储 COS
腾讯云 对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。对象存储非常适合存储非结构化数据。这包括二进制数据,例如图像或媒体、日志文件和传感器数据。n
开发者可以利用 SCF 提供的 SDK,使用通用的 HTTP 协议以免挂载的方式,快速实现对 COS Bucket 中的对象创建删除等,来完成业务逻辑的闭环。同时 COS 可作为事件源将事件发布给 SCF,并携带事件数据调用函数,以此实现函数事件源集成。
基于 SCF + COS 实现实时音视频转码,满足当上传图片、音视频的总量大、频率高时,对应不同的清晰度使用多个云函数对其分别处理,以满足不同场景下用户的需求,同时适应移动网络带宽较小且不稳定的特性。对象存储是数据湖的重要存储库,Serverless 架构的入湖方案是通过云函数触发器拉起数据调用后,通过云函数捕获并记录批次数据信息,在函数内闭环相关的结构转换和数据格式转换,数据压缩等能力。
另外,对象存储 COS 的智能分层存储类型为数据提供了冷热分层机制,能够根据用户数据的访问模式,自动地转换数据的冷热层级,从而降低用户数据的存储成本。用于访问模式不固定或者无法预估访问模式的数据,为用户提供了与标准存储一致的低延迟和高吞吐的产品体验,但成本上则低于标准存储。
文件存储 CFS
CFS 符合标准的 NFS 文件系统访问协议,为多个计算节点提供共享的数据源,支持弹性容量和性能的扩展,现有应用无需修改即可挂载使用,是一种高可用、高可靠的分布式文件系统,适合于大数据分析、媒体处理和内容管理等场景。CFS 成本低廉,采用按量计费模式,以小时为计费周期,您只需为实际使用的存储空间付费。
云函数 SCF 支持与 CFS 无缝集成,只需进行相关配置,您的函数即可轻松访问存储在 CFS 文件系统中的文件。使用 CFS 的优势如下:
函数执行空间不受限。
多个函数可共用一个文件系统,实现文件共享。
临时存储 /tmp
云函数 SCF 执行环境在
/tmp
目录提供了一个文件系统供开发者使用,该空间的大小目前固定为 512 MB。该存储空间的数据是单个函数实例所独占的,一个函数的多次调用可以重用相同的执行环境以优化性能,并将会在函数实例执行的生命周期内保留。因此,这旨在作为临时存储空间。虽然函数可以在调用之间存储数据,但它应该仅用于单个调用中代码所需的数据。它不是永久存储数据的地方,而是更好地用于支持代码所需的操作。
操作使用方面,使用 /tmp 中的文件与云硬盘相同,直接用代码读写即可,并提供快速的 I/O 吞吐量。下面是使用 Python 进行文件压缩的示例。
import os, zipfileos.chdir('/tmp')with zipfile.ZipFile(yourzipfile, 'r') as zip:zip.extractall()
层
层,是云函数 SCF 来解决公共依赖库存储的方案。如果云函数 SCF 拥有较多的依赖库或公共代码文件,可以使用 SCF 中的层进行管理。层管理,可以将依赖放在层中而不是部署包中,可确保部署包保持较小的体积。
层管理是静态的。创建层的压缩文件将按照层的版本进行存储。层在与函数进行绑定时,将按照具体的层版本与函数版本进行绑定。一个函数目前最多支持绑定 5 个层的具体版本,并在绑定时有一定顺序。