谈谈对多租户系统的简要理解
编辑导语:如今很多企业都引入了SaaS产品,那多租户也必然是SaaS的天然属性之一;多租户意味着应用逻辑层面的隔离,如何好单租户以及多租户才是SaaS 应用多租户设计的核心关注点;本文作者详细介绍了多租户系统的简要理解,我们一起来看一下。
SaaS领域一般都会涉及到租户的概念,在设计SaaS体系时,最重要的环节之一就是租户系统的构建了;本文从如何构建多租户系统出发,简要阐述对多租户系统的理解。
一、为什么要搭建多租户系统
多租户是SaaS领域的特有产物,探究何为多租户需回归到对SaaS的理解上。
SaaS服务是指部署在云上的,客户可以按需购买,并通过网络请求就能获取到的服务;也就是说,在这样的场景下,会有N个客户同时使用同一套SaaS服务。
那么对SaaS服务供应商来说,构建SaaS体系需要完成两部分工作:上层服务+底层多租户系统。
上层服务是供应商对外售卖的软件服务,其可以为客户创造价值、为公司带来营收;而底层多租户系统则是SaaS模式实现的具体方式,公司在对外售卖SaaS服务时,需要考虑如何实现客户之间的数据隔离、服务的权限控制、计费管理等;因此需要引入多租户概念来解决上述问题。
通过多租户系统,公司可以更好的管理客户和上层服务,客户也可以更好的使用软件服务。
这也就是多租户系统存在的意义了。
二、什么是多租户系统
这里借用一下百度百科对多租户的定义:多租户技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共享相同的系统或程序组件,并且仍可确保各用户间资料的隔离性;简单来说是指一个单独的实例可以为多个组织服务。
其中涉及到了很多的细节点,需要进行说明一下,加深对多租户的理解。
首先是对租户概念的理解。租户是指被赋予了SaaS服务使用权的企业组织,即客户。
SaaS服务供应商根据客户购买需求在多租户系统中配置对应的软件服务版本,生成租户账号,客户拿到租户账号之后就可以使用SaaS服务,那么该客户就是该SaaS服务的一个租户。
一般来说,租户和客户两者是一对一的关系,客户买了a软件服务,开通了一个租户账号,后来又买了b软件服务;此时只需在给之前的租户账号上配置b软件服务的使用权就可以,不需要在重新建立租户账号。
由租户又可延伸到用户和角色这两个概念,这三者是多租户系统中账号和权限体系的重要组成部分,这里面又是有非常大的可钻研空间,后续会单独补充。
其次是多租户与单租户的区别。租户可分为多租户和单租户,简单一点理解就是——多租户是多个客户使用同一个实例,数据存储在相同的位置,通过数据库、数据表和tenantID字段三种方式进行数据隔离,适合标准化程度较高的场景;单租户是指多个客户使用多个实例,各个客户使用的实例和数据存储单独运行,更适合定制化需求场景。
最后是多租户系统与开放平台、aPaaS之间的区别;在查关于多租户系统资料的时候,容易把这几个平台概念和作用搞混,特此进行说明。
1)aPaaS指应用程序平台即服务,由PaaS衍生而来,PaaS面向开发者,提供软件开发所需的平台环境(各类中间件等)或者以API、SDK的形式被客户应用调用;但由于应用开发成本和门槛较高,aPaaS出现,其帮助客户实现低代码甚至0代码开发应用
2)开放平台实际上是PaaS的一种表现形式,我们先来看一下开放平台的定义:软件系统通过开放API或函数使得外部程序可以增加该软件系统的功能或者使用该软件系统的资源;常见的开放平台如微信开放平台、支付宝开放平台、钉钉开放平台等。举例来说,第三方可以调用微信对外开放的微信登录和微信支付接口来实现自己的服务,或者,ISV在微信开放平台上开发自己的小程序等
三者之间的区别是,aPaaS/PaaS/开放平台是软件服务供应商为第三方提供帮助/服务的工具,多租户系统则是软件服务商为自己的软件服务提供帮助的工具。
三、如何搭建多租户系统
区别于传统的软件供应,在服务模式上,SaaS服务采用按需订购模式;在底层设计上,SaaS服务核心点在于数据隔离与数据安全;那么多租户系统作为SaaS模式实现的具体方式,自然也是关注上述几个点。
具体来说,针对多租户使用者(客户和公司),多租户系统主要解决以下几个层面的需求:
租户注册与身份认证、账号管理、权限配置;
计费方式、定价、收费、支付、欠费;
应用增删改查、代码接入教程、应用监控、统计报表、消息中心;
数据存储方案、安全机制;
针对产品需求进行剖析,由需求引申到功能,梳理出多租户系统的基本功能清单。
备注:笔者负责的产品是基于SDK开发出来的SaaS服务,因此客户使用服务时需配置应用集成SDK,并非是提供SDK标准接口供第三方直接调用或二次开发;所以本次多租户系统的搭建会和直接部署使用SaaS服务(如ERP、CRM)的有所不同,但又会和开放平台的搭建存在相似之处。
多租户系统使用者是客户和公司内部管理员,可将多租户系统的功能划分为两类:面向公司内部管理员和面向客户,两类功能通过权限来进行数据范围访问控制。
面向公司内部管理员的功能主要有:租户管理、产品管理、计费管理中的计费方案、权限管理、运营管理;面向客户的功能主要有:权限管理、应用管理、运营管理、计费管理中的充值、账单等。
1. 租户管理
客户接入服务时,需提供公司名称、机构代码等信息,经过审核后创建租户账号,租户账号中的产品权限、功能权限等配置可根据客户选择接入的产品版本自动配置;或者由商务线下沟通,线上手动完成配置。
2. 产品管理、计费管理
SaaS服务对外售卖时会分为多个不同的版本,比如按用量或按功能来划分,因此一般需设计多种计费方案,公司按照不同的计费方案来配置产品版本和权限。
客户使用不同的产品版本时,涉及到购买、账户充值、支付、账单管理,以及续费、欠费、产品升级等。
3. 权限管理
客户的公司在使用服务时,总会涉及到权限问题:哪些人只能使用服务的一个功能,哪些数据只能高层看等等,这时可以通过对角色和用户进行权限分配。
一般来说,先设置角色,对角色赋予权限,然后再将角色赋予到用户上,这样用户就有了该角色所拥有的权限,需要进行权限修改时,只需修改角色的权限就可。
在用户管理中可以导入客户公司的组织架构,包括人员、岗位、部门等,对特定人员、岗位、部门赋予角色权限就可。
4. 应用管理
有的SaaS服务需要先接入SDK进行使用,这时就需要客户先创建应用,添加SDK代码;公司提供SDK接入教程、接口规则、接入限制等;当应用调用服务时,一般需要校验签名、防止乱塞数据。
5. 运营管理
客户和公司都需要对服务的使用情况进行监控,通过统计报表进行可视化展示,当出现异常情况或服务快到期时,进行消息提醒。
6. 数据隔离与安全
数据隔离和数据安全是图中没有体现出来的部分,但实际上体现在每一个使用环节。
数据隔离方式分为三类:独立数据库、共享数据库通过数据表隔离、共享数据库和表通过字段隔离;一般来说,数据隔离可以按租户和租户下面的应用两种方式进行隔离。
数据安全包括应用和敏感数据加密、身份认证、权限控制、网络监控、数据传输、IP地址管控、黑白名单等。
四、多租户系统的设计
有了功能模块之后,如何将功能模块串联起来,只有在实际的业务场景中跑的通的系统才有价值,这也能帮助我们对多租户系统的设计有更全面的认知。
一个典型的SaaS服务购买流程是:免费试用申请→demo体验→付费购买→使用服务→续费or取消服务。
将这一过程展开,可得到下面具体的业务流程。
有几个注意事项:
1)多租户系统和SaaS服务系统使用同一套账号体系,同一用户免费试用和正式付费阶段账号不变,通过权限控制访问范围就可。
2)免费试用阶段可以给客户提供两个选择,接入SDK和不接入SDK试用demo,后者是mock数据让客户体验,但正式付费后还是需要接入SDK。
3)SDK接入之后,会先在测试环境跑通,在发布到生产环境,两个环境通过参数进行区分。
4)计费方案中期限和使用额度应该配置在租户账号下还是配置在具体的应用下?分不同情况而定:
一般来说,对于按量(调用次数、人数等)售卖的SaaS服务来说,期限和使用额度配置在租户账号下,也就是说,SaaS服务供应商不需要关心客户具体是怎么使用的服务的,只需要在租户层面控制服务的使用期限和使用额度就好。
另外一种情况,对于按以单个应用为服务整体不可拆分的SaaS服务来说,使用期限配置在应用层面,比如腾讯云的移动应用安全产品。
5)免费试用到期和正式付费后不再续费的租户,一般会由商务进行跟进,如果完成不了转化,对于这些到期账号下的数据,一般在保存1个月后自动删除
五、后记
至此,一个简单的多租户系统就搭建起来了,可大概窥见全貌;但是,实际上,这套多租户体系中仍然有非常多需要深挖的细节,比如权限管理、计费方案设计等,后续会出文章补充。
文中如有不正确的地方欢迎指正,也欢迎同行一起沟通交流呀~
本文由 @细嗅蔷薇 原创发布于人人都是产品经理
题图来自 Unsplash,基于 CC0 协议