一、概述
背景
SaaS软件下的租户如要存储图片、视频、office文档等文件,这些文件的存储及访问都需要支付不小的费用,有必要对租户作出限制,实现按使用量付费。
方案
本文提出一种方案,该方案基于现有各厂商的对象存储,可以实现对象存储的多租户模式。对租户的限制包括存储空间和流量大小。虽然从成本上讲自行搭建分布式存储、CDN,单价肯定更低,但前期投入和后期运维成本肯定不菲,不适合初创业务和小公司。
本方案适用于相册、云笔记、云盘,也适用于商城等租户需要上传大量文件的SaaS软件。
注意
本文中的对象存储以七牛为例,域名及DNS以阿里云为例。其他厂商应该也提供了类似接口,大同小异。
本文仅为设计思路。文中接口我并没有使用和测试过,如您发现有问题,请评论留言。
本文提供的方案不适合对存储及流量价格比较敏感的业务场景。因为相对于自建分布式存储、CDN的方案,本方案单价偏高。
二、SSL证书
必要性
由于七牛的流量监控只支持按域名统计,要方便监控某一租户的流量,只能给租户分配一个子域名。
目前https访问已成主流,ssl证书是必需的。
单域名证书
单域名,如qn-a1.rcode.cc
单域名证书有免费的,阿里云提供了申请API 阿里云 OpenAPI 开发者门户{}
缺点:虽然可以给子域名申请免费的单域名证书,但我估计阿里云对免费证书有数量限制(每账号每年20张),不适于多租户模式。另外证书的申请时间最长可达几小时,难以让租户满意。
泛域名证书
泛域名如 *.rcode.cc
泛域名证书的价格:
TrustAsia 域名型(DV)通配符SSL证书 1699元/年
Digicert 域名型(DV)通配符SSL证书 1700元/年
Rapid 域名型(DV)通配符SSL证书 1519.8元/年
缺点:需要付费,但费用并不高。需要指出的是上述证书仅供个人和测试使用,要提高安全性可以购买EV证书。个人认为前期没有必要购买EV证书。
三、租户创建
创建租户专用的bucket、子域名
在七牛:
使用对象存储API创建单独bucket,如a1-oss。
接口文档:创建 Bucket_API 文档_对象存储 - 七牛开发者中心
使用CDN API 创建子域名,回源类型为qiniuBucket,bucket为a1-oss,如qn-a1.rcode.cc。
接口文档:域名相关_API 文档_CDN - 七牛开发者中心
使用CDN API 查询子域名的CNAME。
接口文档:域名相关_API 文档_CDN - 七牛开发者中心
增加域名解析
阿里云OpenAPI 增加子域名qn-a1.rcode.cc解析,方式为CNAME,值为上步获取的。
四、租户资源限制
存储空间限制
使用七牛对象存储数据统计接口,查询存储空间大小
接口文档: space_API 文档_对象存储 - 七牛开发者中心
超出租户存储上限后,如何限制租户上传?
首先说明一下上传流程:前端选择文件 》 前端从服务端获取上传凭证 》前端向七牛上传文件
限制租户上传的关键在于服务端生成上传凭证逻辑中,判断租户超出上限后,给前端反馈错误,不发上传凭证。
流量限制
使用七牛CDN 流量带宽API 批量查询 cdn 计费流量
接口文档:流量带宽_API 文档_CDN - 七牛开发者中心
由于上面的接口最多查询30天的流量,所以代码中要自行累加,判断租户流量超出后,可以移除空间的域名 或 下线域名。
接口文档:域名相关_API 文档_CDN - 七牛开发者中心
五、租户销毁
删除空间方式
该方式比较激进,但比较节省费用。
也可以在用户停用后30天再删除,给予一定的缓冲时间。
下线域名方式
下线域名来禁止访问,然后将空间文件改为归档模式,一年后再彻底删除。
这种方式可以在用户续费后,额外支取一定费用进行恢复。文章来源:https://www.toymoban.com/news/detail-762948.html
以上两种方式各有利弊,但一般情况下用户不再续费后希望系统保留文件的情况相对较少。建议采用删除空间方式,在删除前发送提醒,给用户选择权利(实际也是激活用户)。文章来源地址https://www.toymoban.com/news/detail-762948.html
到了这里,关于对象存储的多租户实现思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!