基于Gin框架的SAAS模式下多商户数据连接隔离问题, 寻求高端方案
各位大神帮指点下.
目前在做一个多租户系统,web框架gin , mysql xorm 开发,大概流程是这样的
- 登陆总后台,添加一个商户 (名称, 唯一标示,数据库链接),
- 根据商户分配的数据库链接地址 生成商户的数据库(一租户一库) 和 初始化数据
- 给租户添加后台管理登陆域名,前台访问域名
- 完成域名指向
======= 问题来了 ========
- 同一套代码,多个商户登陆商户后台,执行操作,数据库链接有可能不一样,数据库名一定不一样.
- 商户登陆的时候在中间件里根据域名判定是哪个商户登陆 然后找到这个商户对应的数据库配置,
- 通过配置连接数据库, DB链接指针存放到 gin.Context里面
- 每次查询的时候,从context获取链接地址
问题是,如果函数调用比较深,每次都要传context,这样代码太冗余.后续redis/ ES 也会分开
有哪位大佬有好的处理方案或者思路.
项目刚开开始, 参考地址 admin.mk117.com
那传DB 链接指针
@catcn 是需要两次请求,不同的商户的DB的连接不同
那判断商户的身份,根据身份创建不同的链接,每个链接添加一个标识,中间件进行商户的判断,获取商户标识对应的链接指针呢
@caoayu 目前是这样做的,但是有问题.
类似这样, 每次都要传context(里面带的有本次数据库连接),
怎么样 c gin.Context 能自动注入
@theegg 公共变量设置为与用户标识相关,应该不容易覆盖吧,没想到好的方案 :joy:
@caoayu go 一个请求生命周期不是独立的
用一个分库中间件?
目前是在中间件把每个商户的标识都放到一个context 里向下传递,感觉不够优雅