云函数 SCF 存储空间应用背景
目前 Serverless 架构曾经在很多场景中落地,无论是应用 API 网关 + 云函数 SCF 实现 API 服务和 Web 服务,还是通过对象存储 COS 触发函数运行,进行文件上传事件的传递和文件的解决,或者通过音讯队列中的音讯触发函数,进行音讯的过滤转储;Serverless 依附其疾速开发上线,无需简单运维的个性,正逐渐进入到更多的业务场景中。
在理论的应用过程中,云函数作为计算状态的产品,提供了计算高度的弹性扩缩容。在云函数运行时,运行环境中的文件系统为只读,在 /tmp
目录下提供了 512MB 的长期存储空间;长期存储空间为单并发实例应用,各并发实例之间不共享;长期空间在并发实例复用时会保留文件,业务代码如果有写文件,须要自行留神清理防止空间写满;同时在并发实例长时间未应用销毁时,长期空间也会清理。
目前,应用对象存储 COS 进行云函数中的文件相干操作,当用户须要应用文件,从对象存储中下载到本地;在本地实现解决或生成的文件,在函数执行完结前上传到对象存储中长久保留。很多场景通过应用对象存储 COS 产品能够解决。因为这种解决办法均须要应用 SDK 来实现对象存储的文件操作,从文件操作的便利性上来说,不如间接的本地文件操作来的简略不便。
文件存储 CFS 给云函数提供按需扩大的存储空间
文件存储(Cloud File Storage,CFS)产品提供了安全可靠、可扩大的共享文件存储服务,能够为各种计算类产品提供容量和性能可弹性扩大的高性能共享存储。通过与云函数产品的对接,CFS 能够提供按需扩大的存储空间,并按理论的应用容量来付费,合乎 Serverless 架构的个性。
从 COS 对象存储和 CFS 文件存储的个性比照上,能够看到两者均提供了短缺可扩大的存储空间,均应用按理论使用量的形式进行付费;CFS 因为通常是通过文件系统挂载的形式应用,因而通常在 VPC 内网中提供服务,而 COS 因为通过 HTTP API 提供服务,因而在内外网中均能够提供服务;应用形式的差别,造成了咱们通过代码在实际操作文件时,COS 要依赖 API 或 SDK 来进行文件相干操作,而 CFS 能够和应用本地文件系统一样的形式,通过各种开发语言自带的规范文件系统库来进行操作。
文件存储 CFS + 云函数 SCF 的劣势
通过 CFS 提供的共享文件存储服务,能够为云函数解决在理论应用过程中碰到的存储方面的问题,并进一步扩大云函数能够反对的应用场景。从性能点上来说,对接 CFS 能够取得的劣势包含了:
- 扩大存储空间,函数运行环境内的存储空间不再受限与 512 MB 的长期存储空间。
- 存储空间的长久保留,CFS 提供的存储空间,不会随着函数并发实例的销毁而清理,而是能够长久保留。
- 跨并发和跨函数拜访,CFS 的存储空间,是在函数的并发实例间共享的,而如果将同一个 CFS 存储空间挂载到多个函数上,存储空间也能够在多个函数间共享;共享个性能够带来很多文件操作的便利性,然而同时也须要留神文件读写的并发个性,在多并发写同一文件时留神写程序或应用写锁来互斥。
- 规范 posix io 接口,应用各个语言自带的 file system 文件系统库即可操作,无需额定的 SDK;而如果须要额定应用一些 SDK、Agent 等,也能够间接进行文件读写。
文件存储 CFS 给云函数带来的业务新场景
通过 CFS 文件存储产品取得的劣势,能够改善和扩大现有云函数所实现的一些场景,也能够带来很多新的场景。
如上图所示,在应用云函数进行对象存储文件解压的场景中,由 COS 对象存储中的 ZIP 文件上传事件触发函数,函数在获取到事件后,通过下载 ZIP 文件,在本地实现解压并再次上传到对象存储中,实现 ZIP 文件的上传主动解压能力。受限于函数的长期空间 512 MB 的限度,以及原始文件和解压后文件均须要搁置在长期空间中,这种时候,函数能够解压的文件大小受限,过大的 ZIP 文件,要么下载压缩文件后没有空间寄存长期的解压文件,要么无奈下载超过限度的压缩文件。而通过 CFS 扩大存储空间,可读写的空间不再受到长期空间的大小限度,在文件解压缩场景下,也能够实现大压缩文件的解压了。
而在有些科学计算或 AI 推理的场景中,因为函数的代码包目前仅反对解压后 500 MB 的大小,因而一些很大的依赖库,无奈随着代码包上传,或上传为层;在这种状况下,一些依赖库或依赖文件例如 AI 推理所须要的模型,须要在函数启动运行时从内部例如对象存储中下载到函数的长期空间中,下载和解压过程会大大拉长函数的启动工夫,造成初始化耗时变长,影响函数的理论执行。这个问题同时也在一些 Nodejs 的运行环境中容易呈现,node 的 modules 依赖较多的状况下,很容易超过代码包的体积大小限度。通过挂载应用 CFS 提供的共享可扩大空间,能够将依赖包搁置到内部空间中,来防止受限。这种状况下,依赖包能够通过另一个挂载了同样 CFS 空间的函数甚至是 CVM 虚拟机来进行不便的治理,在 AI 推理场景中,模型都能够通过共享的 CFS 来很容易的从训练的环境或虚拟机中实现更新。
在应用云函数进行对象存储文件上传触发的音视频转码场景中,CFS 的引入一样能够扩大音视频转码能够解决的文件大小。在受限临时文件存储空间大小的状况下,音视频转码之前仅能进行小体积视频文件或音频文件的下载、转码和上传,而大体积视频的解决,须要利用对象存储来进行分段的下载、转码、上传和拼接。通过 CFS 的扩大空间,能够反对进行大体积视频文件的转码处理过程。同时,在大体积的视频文件解决上,通常利用云函数的多并发能力,会通过将视频文件分片、别离转码解决、再次合并转码后文件的解决流程,通过这种流程,能够大大减速大文件的处理速度,充分利用函数的多并发解决能力。在这种解决流程上,能够通过 CFS 的扩大,以及跨多并发实例多函数的能力,在同一个 CFS 的空间中,由不同函数别离来实现分片、转码、合并的工作。通过这种形式,大大简化了开发方法,升高了文件操作的复杂性。
通过对接 CFS 文件存储与 SCF 云函数,为云函数带来了很多的扩大应用场景,除了下面提到的 3 种之外,还有很多方面能够去尝试,应用 CFS 来解决 Serverless 利用开发过程中碰到的存储问题。例如能够通过 CFS 来存储全局的业务配置信息,并在多个函数间共享实现配置共享;能够通过 CFS 存储 Web 服务中用户的 session 记录这类状态数据等场景。
咱们也期待更多的 Serverless 利用开发者,从 CFS + SCF 的应用过程中,继续发现和摸索更多的利用场景。
作者演讲回放地址:Tencent Serverless Hours 第七期
One More Thing
立刻体验腾讯云 Serverless Demo,支付 Serverless 新用户礼包 ???? serverless/start
欢送拜访:Serverless 中文网!