Load-Balance-Driver, wrapper of mysql-jdbc-driver, suitable for use in databases with proxy architecture, such as OceanBase, TiDB, etc.
- 参考了网易内部分库分表中间件DDB的LBDriver的代码,但是重写了代码,从而适配更一般的场景
- 适用于需要业务直连sql-proxy,而非通过负载均衡器(nlb/slb),使得负载均衡的逻辑从nlb/slb下沉到driver层
- 优点是使得sql-proxy的负载更均衡,且通过减少网络链路,降低rt,避免负载均衡器(nlb/slb)成为性能瓶颈
- 仅依赖slf4j-api和mysql-connector-java,没有其他依赖
- 适用于oceanbase、tidb等
<dependency>
<groupId>com.netease.nim</groupId>
<artifactId>lb-driver</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>driver=com.netease.nim.lbd.LBDriver
- 地址串配置的sql-proxy的节点列表,lbd-driver直接从地址串中获取完整的sql-proxy节点列表,lbd-driver会自动剔除不可用的sql-proxy节点
地址串示例:
jdbc:mysql:lb:local://10.189.0.1:6000,10.189.0.2:6000,10.189.0.3:6000/mydatabase?connectTimeout=5000&socketTimeout=10000&logStats=true
logStats表示是否打印统计日志
- 地址串配置的是config-server的地址,lbd-driver从config-server动态获取sql-proxy节点列表,从而可以不重启业务做sql-proxy的扩缩容
- config-server是无状态服务,可以部署多个节点,挂在nginx/nlb后端,达到集群高可用
地址串示例:
jdbc:mysql:lb:remote://config-server.xxx.com:8080/mydatabase?connectTimeout=5000&socketTimeout=10000&configServerApiKey=xxx&configServerSchema=im_user&logStats=true
config-server.xxx.com:8080表示config-server的地址,需要host:port的格式,必填configServerApiKey表示config-server的鉴权key,可选,取决于config-server是否开启了鉴权configServerSchema表示config-server的schema,必填logStats表示是否打印统计日志
config-server的部署配置,参考:config_server
参考:example
