V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stonezing
V2EX  ›  程序员

多租户数据源修改方案

  •  
  •   stonezing · 2020-03-20 09:24:42 +08:00 · 2718 次点击
    这是一个创建于 1698 天前的主题,其中的信息可能已经有所发展或是发生改变。

    每家商户都有独立数据源,没有使用微服务, 一台 nginx+多台应用服务, 如果修改了商户数据源密码或者连接信息,怎么通知到应用服务的 DataSource 刷新;

    11 条回复    2020-10-29 17:29:28 +08:00
    npe
        1
    npe  
       2020-03-20 09:43:38 +08:00 via iPhone
    租户的连接信息、账号密码单独存放在表 T,程序里面通过表 T 连接相应的数据源
    stonezing
        2
    stonezing  
    OP
       2020-03-20 10:27:26 +08:00
    @npe 你说的是初始化加载, 现在问题是系统在运行, 租户的数据库密码被修改了, 怎么处理, 我有多台服务都要相应同步到, 除了重起服务方式。
    z960112559
        3
    z960112559  
       2020-03-20 14:18:20 +08:00
    重新加载数据源
    z960112559
        4
    z960112559  
       2020-03-20 14:27:02 +08:00
    按一楼说的,修改账号密码后肯定会报错,捕获异常,根据表内账号密码重新加载数据源
    ElmerZhang
        5
    ElmerZhang  
       2020-03-20 14:40:30 +08:00
    数据库用户名密码存储在配置中心(比如阿里开源的 Nacos ),写个 Listener 监听配置变化重建数据库连接。
    ourslay
        6
    ourslay  
       2020-03-20 15:45:01 +08:00
    stonezing
        7
    stonezing  
    OP
       2020-03-20 16:27:25 +08:00
    @ourslay
    @ElmerZhang @z960112559 主库里记录着所有租户的数据库连接信息, 现在是两台服务,接 nginx 负载,也就是修改了数据库租户的用户名密码后, 两台都要重新加载, 捕获异常也可以是, 但是如果改的是数据库的连接池信息呢,,有什么方案可以刷新这个 datasource 的对象
    gz911122
        8
    gz911122  
       2020-03-20 16:41:28 +08:00
    配置中心了解一下
    比如 Apollo
    ourslay
        9
    ourslay  
       2020-03-20 16:49:49 +08:00
    @stonezing 你只需把 demo 里面读取数据连接部分替换成读取租户的数据库连接,接下来遍历您的服务实例发送 `/actuator/refresh` 请求。下次请求时候连接池将获得一个新 URL 的连接。
    buliugu
        10
    buliugu  
       2020-03-21 00:50:13 +08:00
    这个似乎更适合 gaea 之类的中间件去做,应用层刷新 datasource 是件麻烦事儿
    liubx
        11
    liubx  
       2020-10-29 17:29:28 +08:00
    @stonezing 请问最终用的什么方案啊?我想参考下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1063 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:02 · PVG 04:02 · LAX 12:02 · JFK 15:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.