阿里云服务器免费领卷啦。

捡代码论坛-最全的游戏源码下载技术网站!

 找回密码
 立 即 注 册

QQ登录

只需一步,快速开始

搜索
关于源码区的附件失效或欺骗帖, 处理办法
查看: 4895|回复: 2

[java源码] Spring boot + Hibernate + Postgresql的多租户实现Demo

[复制链接]

4208

主题

210

回帖

12万

积分

管理员

管理员

Rank: 9Rank: 9Rank: 9

积分
126084
QQ
发表于 2017-9-29 19:29:10 | 显示全部楼层 |阅读模式

多租户

多租户(Multi Tenancy/Tenant) 是一种软件架构,其定义是:在一台服务器上运行单个应用实例,它为多个租户提供服务。
概念是抽象的,但是理解起来并不困难,简单来说就是分组,举个例子:我们管理学校学生的时候,可以按照不同的范围来进行分组,比如我们可以按照学生个人为单位进行分组,也可以按照班级为单位进行分组,然后班级下面有很多的学生,也可以按照年级为单位进行分组,以学校为单位……这样的每一个分组的单位,都可以是我们概念里面说的一个租户。
但是这样不就和我们以前说的按照面向对象来分类是一样的吗?其实是差不多的,但是有着一些细节上的差别,首先多租户架构的概念是针对数据存储的,我们是一个数据服务提供商,假设我们给所有的学校提供服务,对于我们来说,分组是按照学校为单位的,而且学校与学校之间互相没有任何关系,也就说学校与学校之间是隔离的,对于不同学校的数据我们需要将它们隔离开来。这种数据的分组就是多租户架构要研究的问题。
当然这只是概念上的区别,在实际使用上和我们传统的分组并无太大差异。

多租户的三种模式

多租户的架构分为以下三种:

独立数据库
共享数据库,独立Schema
共享数据库,独立Schema,共享数据表
注:在这个架构的概念里面,数据库指的是物理机器数据库,也就是我们的一部运行着数据库软件的计算机是一个物理数据库,Schema就是我们在数据库软件里面创建的“数据库”,实际上都是在同一个物理机器里面的,表就是表,一个简单的表

独立数据库是一个租户独享一个数据库实例,它提供了最强的分离度,租户的数据彼此物理不可见,备份与恢复都很灵活;
共享数据库、独立 Schema 将每个租户关联到同一个数据库的不同 Schema,租户间数据彼此逻辑不可见,上层应用程序的实现和独立数据库一样简单,但备份恢复稍显复杂;
最后一种模式则是租户数据在数据表级别实现共享,它提供了最低的成本,但引入了额外的编程复杂性(程序的数据访问需要用 tenantId 来区分不同租户),备份与恢复也更复杂。
这三种模式的特点可以用一张图来概括:


1.jpg


多租户模式选择

从上面的图我们可以看到,在成本上,独立数据库是最高的,毕竟我们一个租户就是一个物理机器,而且数据共享起来会麻烦,涉及到跨物理机器的通信,但这种模式的优势体现在单个租户数据量庞大,而且有非常大的扩展需求,那么单个机器内的调整就非常容易,而且不会影响到其他的租户,因为它的隔离程度是最高的。
事实上,多租户模式的选择,主要是成本原因,对于多数场景而言,共享度越高,软硬件资源利用效率更好,成本更低。但同时也要解决好租户资源共享和隔离带来的安全与性能、扩展性等问题。毕竟,也有客户无法满意于将数据与其他租户放在共享资源中。

Hibernate 多租户的使用

Mybatis 多租户的使用

一开始我也是使用Mybatis进行多租户的设计,但是事实上Mybatis本身是没有对多租户提供支持的,也就说我们如果使用Mybatis设计多租户的架构的话,那么我们就需要手动实现sql语句的拦截然后在执行具体sql语句之前执行use tenant_id的操作,拦截sql语句的一个比较简单的方式是通过spring aop在service层的操作里进行切入实现拦截。
实际上Hibernate也是这么干的,不过Hibernate在框架层面帮我们进行了sql语句拦截,不需要自己设计。
虽然最后我选择了Hibernate进行多租户的设计,但是这里也记录下Mybatis的设计思路,实现起来就简单了。




下载地址:

游客,如果您要查看本帖隐藏内容请回复


捡代码论坛-最全的游戏源码下载技术网站! - 论坛版权郑重声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与捡代码论坛-最全的游戏源码下载技术网站!享有帖子相关版权
3、捡代码论坛版权,详细了解请点击。
4、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
5、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
6、如无法链接失效或侵犯版权,请给我们来信:jiandaima@foxmail.com

回复

使用道具 举报

0

主题

258

回帖

2013

积分

金牌会员

Rank: 6Rank: 6

积分
2013
发表于 2017-10-1 09:52:52 | 显示全部楼层
登录可见评论
回复

使用道具 举报

0

主题

4

回帖

38

积分

新手上路

Rank: 1

积分
38
发表于 2018-4-29 20:10:50 | 显示全部楼层
登录可见评论
回复

使用道具 举报

0

主题

1

回帖

14

积分

新手上路

Rank: 1

积分
14
发表于 2019-5-12 00:35:08 | 显示全部楼层
登录可见评论
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立 即 注 册

本版积分规则

技术支持
在线咨询
QQ咨询
3351529868

QQ|手机版|小黑屋|捡代码论坛-专业源码分享下载 ( 陕ICP备15015195号-1|网站地图

GMT+8, 2024-3-29 23:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表