Serverless 架构下如何上传文件与持久化文件
如何上传文件
在传统 Web 框架中,上传文件是非常简单和便捷的,例如 Python 的 Flask 框架:
但是在 Serverless 架构下,却不能直接上传文件,因为:
一般情况下,一些云平台的 API 网关触发器会将二进制文件转换成字符串;不便直接获取和存储;
一般情况下,API 网关与 FaaS 平台之间传递的数据包有大小限制,很多平台被限制在 6M;
FaaS 平台大都是无状态的,即使存储到当前实例中,也会随着实例释放而导致文件丢失;
所以,传统框架中常用的上传方案是不太适合在 Serverless 架构中直接使用的,在 Serverless 架构上传文件的方法通常有两种:
一种是 BASE64 后上传,持久化到对象存储或者是 NAS 中,这种做法可能会触及到 API 网关与 FaaS 平台之间传递的数据包有大小限制,所以一般使用这种上传方法的通常是上传头像等小文件的业务场景;
第二种上传方法是通过对象存储等平台来上传,因为客户端直接通过密钥等信息来将文件直传到对象存储是有一定风险的,所以通常情况是客户端发起上传请求,函数计算根据请求内容进行预签名操作,并将预签名地址返回给客户端,客户端再使用指定的方法进行上传,上传完成之后,可以通过对象存储触发器等来对上传结果进行更新等:
图 1.82: Serverless 架构下文件上传方案示例
文件读写与持久化方法
应用在执行过程中,可能会涉及到文件的读写操作,或者是一些文件的持久化操作。在传统的云主机模式下,通常情况下是可以直接读写文件,或者将文件持久化某个目录下,但是在 Serverless 架构下并不是这样的。
由于 FaaS 平台是无状态的,并且用过之后会被销毁,所以文件如果需要持久化并不能直接持久化在实例中,可以选择持久化到其他的服务中,例如对象存储、NAS 等。
同时,在不配置 NAS 的情况下,FaaS 平台通常情况下之后/tmp 目录具有可写权限,所以部分临时文件可以缓存在/tmp
文件夹下。
版权声明: 本文为 InfoQ 作者【刘宇】的原创文章。
原文链接:【http://xie.infoq.cn/article/bfe6d5280b34b5ec2aa366689】。文章转载请联系作者。
评论