随笔分类
租户
多租户区分于多用户
现代软件一般属于多用户的应用,即同一台机器上同一个软件允许为不同的用户建立各自的账户,也允许拥有这些账户的用户同时登陆此计算机进行各自的操作,此时也就涉及到了计算机用户以及资源的调度
租户则是和组织进行挂钩的,许多组织会去使用同一个应用程序,组织之间相互隔离,允许各自组织里的用户去访问应用程序,并且此用户访问到的数据也只能是其所属组织里头的数据
多租户其实也就是逻辑隔离的一种,多租户技术的存在允许不同的租户去使用同一套应用架构,对供应商而言这一定程度上减少了环境建置的开销:硬件的成本、操作系统与应用程序的授权相关成本,受益于多租户技术,这些成本将由多租户共同承担
通过不同的数据管理手段,多租户的数据可以进行不同程度上的隔离,在供应商不同的架构设计下也自然会有多种数据隔离手段,而良好的数据隔离手段能够减少供应商维护成本 (设备与人力),而供应商也可以在合理的授权范围内取出这些数据进行分析,以作为改善服务的依据
多租户架构下所有的用户使用相同的软件环境,因此当软件环境进行迭代范围更新时,可以仅发布一次就能够在所有租户的环境上生效
在知乎上看到了这么一条颇有趣味的比喻:
多用户可以看做在你的屋子里给用户一个床位,让他和其他用户一样能用你的屋子的所有资源,但是可以做基本的权限控制,比如该藏的本子要藏的啊
多租户可以看做用户把你的整间屋子租了下来,你可以提供给每个租户相似的基本资源,他也可以针对他自己的需求,添加他自己的资源,而且别人看不到
从数据库的角度来看,多用户是所有的用户在同一个数据库里面,登录读写什么的都是同一个逻辑数据库
多租户是每个租户有他自己的一个企业或者组织,他以企业或者组织的代表者申请一套专门为他们提供服务的数据库,实现数据隔离和客户个性化定制
这比喻倒是学习了...
数据隔离的三种方案:
- 独立的数据库:一个租户独立地去使用一整个数据库,这种来说安全隔离级别最高,但也最耗成本
- 共享数据库 + 独立的 schema:多租户使用同一个数据库,但每个租户各自对应不同的 schema
- 共享数据库 + 共享 schema:多租户使用同一个数据库,同一个 schema,但表中需要添加
tenantId 租户 id
字段,此方式共享程度最高,成本最低,但安全隔离将级别最
mybatis-plus中租户插件便是基于第三种方案而实现的,感兴趣的可以看看官方样例,顺便也来简单入门下 spring-data.