Skip to content

route among database instances

kaven276 edited this page Jan 10, 2016 · 1 revision

模式一:每个 client 只连接一个 db inst

在客户端做 db 路由

  1. 先选中要访问的 db
  2. 然后 dbPool.findFree
  3. 然后用 connection 发送请求

noradle-dispatcher is unaware of db routing, just take easy.

这个是首选的

模式二:noradle-dispatcher hold RAC/DG instance,并作路由

客户端连接 noradle-dispatcher 只说明要连接哪个库,并不指定是RAC中的哪个节点,也不知道是 DG 中的 primary还是哪个 standby。 请求发过来后,noradle-dispatcher 自行决定使用哪个 db instance 来访问。

本方案优势:

  1. 客户端连接配置简单,只需指出是哪个库,如果dispatcher只hold一个库,都不用指定使用那个库
  2. 服务器侧可以动态的调整策略,比如RAC/DG节点扩容后,无需修改和重启客户端,就能利用上
  3. 运维管理员和系统自动,都能很好的将应用负载在 RAC/DG 环境下调整

模式三:client 请求中带有 db selector,需要发送给 noradle-dispatcher 用于路由

问题

  • 客户端连接,要不要明确提出要使用哪个db(instance)?