route among database instances - noradle/noradle-dispatcher GitHub Wiki
模式一:每个 client 只连接一个 db inst
在客户端做 db 路由
- 先选中要访问的 db
- 然后 dbPool.findFree
- 然后用 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 来访问。
本方案优势:
- 客户端连接配置简单,只需指出是哪个库,如果dispatcher只hold一个库,都不用指定使用那个库
- 服务器侧可以动态的调整策略,比如RAC/DG节点扩容后,无需修改和重启客户端,就能利用上
- 运维管理员和系统自动,都能很好的将应用负载在 RAC/DG 环境下调整
模式三:client 请求中带有 db selector,需要发送给 noradle-dispatcher 用于路由
问题
- 客户端连接,要不要明确提出要使用哪个db(instance)?