SaaS多租户实现的思考

背景

最近在做SaaS权限设计的时候,一直在权衡着租户和组织的关系,以追求系统的简洁性。我们在做PaaS平台的时候,租户是有子租户的概念,而且是按照运营管理、客户域进行组织层级定义的。1,2级是对应的运营管理域,3,4级是对应的客户域。由于租户间是资源隔离的,对于租户间的资源访问问题,处理起来相当痛苦。

设计原则

多租户SaaS系统怎么设计,下面是我总结的几点原则,供大家参考:

1、租户间是资源隔离的。相互无法访问对方的数据。

我们目前做到逻辑隔离,通过表里面增加租户ID的方式来实现多租户的支持。当然我们自然想做到物理隔离,相应的成本也会多很多。这块大家必须有租户间资源是隔离的概念。为了能更好的理解整个SaaS系统的设计初衷,我们可以认为租户间资源是物理隔离的。

2、组织也是一种资源,各租户都有自己的组织。

每个租户是有各自的资源信息的,这些资源是租户私有的。比如:角色信息、用户信息、组织信息;产品、设备、应用等。

3、租户可以通过组织进行资源划分。

租户和组织这块有很多相近的地方,这块需要深刻的理解下。我个人是这么理解的:租户是对全部资源物理层面的隔离,而组织是对租户私有资源逻辑上的隔离。

4、租户不支持多层级,租户有不同的类型。

为了降低系统的复杂性,我们建议租户不支持多层级,只能建一级,租户是有类型的,通过类型区分不同的业务场景,租户间是平等的。

比如:XXX运营方也是独立的租户,与其它用户无本质区别。

5、通过组织的层级结构,来实现用户的数据权限。

这块也是我们做的最大改动:轻租户,重组织。发挥组织的天然业务隔离的特性,通过组织树来实现资源数据权限。

6、运营侧只管理到租户级别,不应该涉及到租户的私有资源。

组织是租户的私有资源,运营管理侧自然不应该去管理他,也不方便管理。

来张图,方便大家的理解:

为了方便,可以默认将租户的信息映射到组织上,做为组织的L0级。也可不映射,查询的时候自动加上。租户新建的时候,租户的默认管理员是挂在本账户下的,此时还没有组织的信息。

你可能感兴趣的:(SaaS多租户实现的思考)