对象存储的多租户实现思路

一、概述

背景

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天再删除,给予一定的缓冲时间。

下线域名方式

        下线域名来禁止访问,然后将空间文件改为归档模式,一年后再彻底删除。

        这种方式可以在用户续费后,额外支取一定费用进行恢复。

        以上两种方式各有利弊,但一般情况下用户不再续费后希望系统保留文件的情况相对较少。建议采用删除空间方式,在删除前发送提醒,给用户选择权利(实际也是激活用户)。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>