好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

saas平台各租户的数据,应该是做分库还是分表,亦或是分行?

作者:決題達零(瑞理)
链接:https://www.zhihu.com/question/329739118/answer/719435791
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

SaaS服务需要支持多租户,支持的方式大致有如下三种情况:

1、物理(IaaS)隔离——这种模式下,每个租户的资源都是独立的,从入口到应用部署到数据,都是完全隔离的。每个租户相当于“托管”在提供服务的公司里面,公司做的其实是统一运维。好处在于,这个隔离非常彻底,基本不太会有相互影响;如果有特殊客户要求的定制化,也没啥处理难度。缺陷在于,很容易因为隔离和定制,导致版本不统一,资源也浪费比较大,因为是“代运维”的模式,因此服务成本也比较高。

这个时候通常采用的数据库方式是分库,因为很可能最终每个库的结构会有不同,基础数据也有不同。

2、平台(PaaS)隔离——在这种模式下,应用的体系架构是完全一致的,如果应用层面是无状态的,那么应用侧可以复用,数据侧在资源上也可以复用。好处在于,这个隔离比较轻量级,可以保持版本的一致,资源复用率比较高,运维成本比较低;缺陷在于,客户的定制化做起来会相对麻烦一些,而且通常版本要完全保持一致,对开发的要求也比较高。

这个时候通常采用分表,因为基础数据通常是共用,整体的数据架构也是基本一致的,通过合理的设计模式也可以支持客户的功能定制(通常用插件)。

我个人认为这个是当前中国做偏业务的SaaS服务最好的模式了。

3、逻辑(SaaS)隔离——在这种模式下,公司维护的就是一个应用而已,所有租户实际上是平台的用户,从入口到应用到数据都是完全一个平台。好处当然是运维、成本、版本等都非常低,没有能力定制,只有能力扩展;缺陷非常明显,所有数据只能通过业务逻辑进行隔离,坦率讲数据安全性方面比较容易出现问题。

这个时候分表也不用,所有客户相关的数据打上一个客户标签就好了。

如果是轻量级的SaaS,基本上用这个跟简单一些。


查看更多关于saas平台各租户的数据,应该是做分库还是分表,亦或是分行?的详细内容...

  阅读:2523次