同 database 不同 schema 多租户连接池问题

2023-12-12 10:32:47 +08:00
 dandankele

我开发的是一个多租户的系统,使用的是mysql,采用的是同 database 不同 schema 方式的数据库隔离方式。每个租户对应一个 schema ,并且拥有特定的 username 和 password 才能连接访问。

目前在用 Hikari 尝试做数据库连接池,由于多租户的特性,我需要延时到 runtime 中才能确定哪个租户,才能使用对应的连接信息建立连接,建立连接时如果不使用 username 和 password 就无法认证和完成连接。但如果使用了 username 和 password 成功建立连接,并放入连接池,等处理下一个租户时,从连接池中拿的连接的 schema 就不对了。

但如果要为每个租户创建一个连接池,有些浪费,首先就是不确定每个租户对数据库的使用程度如何,不可能为每个租户设置特定大小的连接池,否则会存在连接数的浪费,所以势必要采用共享连接池才能最大的利用上。然后就是阿里云的 RDS 一个 database 实例有最大连接数的限制,所以更要求最好是共享连接池。

我也查了下相关的 github ,也有类似的issue还没人解决。而且 mysql 应该是不支持在一个连接中切换 user 的吧,必须 quit 断开连接使用新的 user 重新建立连接。

难道我要创建一个高权限帐号,可以访问所有 schema 才行吗?还有其他方法吗?

有处理过这问题的朋友吗?

2890 次点击
所在节点    数据库
42 条回复
dyv9
2023-12-18 13:24:29 +08:00
既然都多用户名多 schema 了,直接多 mysql instance 搞定了 😂,多租户可以多应用-多 DB ,也可以单应用多 DB ,还可以单应用单 DB ,你这个场景是单应用多 DB ,可以考虑把多 DB 做得彻底点,直接来多个 MySQL instance 搭配多个连接池。
dyv9
2024-03-21 07:48:03 +08:00
直接每个租户一个 java 进程一套配置,物理隔离不容易出错,出错日志找原因也简单,在前端 nginx 代理。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/999606

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX