基于代理的分库分表中间件_第1页
基于代理的分库分表中间件_第2页
基于代理的分库分表中间件_第3页
基于代理的分库分表中间件_第4页
基于代理的分库分表中间件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于代理方式的分库分表中间件dbproxy目的地技术部周文斌目录 解决的问题 总体架构 前端连接管理 路由模块 SQL执行模块 后端连接管理 负载均衡 权限控制2022-6-12Dbproxy是什么? 数据库代理 关系数据库的路由器 关系数据库升级到大数据的应用中间件 基于开源的mycat实现 支持数据的水平拆分2022-6-12解决的问题 数据的增长存储问题 数据库连接的集中式管理 数据库的透明化扩展 数据库的透明化迁移2022-6-12实现的功能 分库分表 读写分离 负载均衡 服务注册发现 权限控制目录 解决的问题 总体架构 前端连接管理 路由模块 SQL执行模块 后端连接管理 负载均衡

2、权限控制2022-6-12总体架构mysqlmysqlpgBackendConnectionManagerpgDriverFrontendConnectionManager协议适配(mysql)协议解析Sql解析规则路由Sql executor结果合并响应报文客户端客户端MysqlDriverMysql数据包目录 解决的问题 总体架构 前端连接管理 路由模块 SQL执行模块 后端连接管理 负载均衡 权限控制2022-6-12前端连接管理客户端FrontendConnectionManager连接请求acceptFrontendConnection握手报文发送握手报文构造握手报文认证信息校验认证

3、响应报文响应报文1. 跟客户端建立连接2. 进行权限认证3. 前端连接的创建及销毁协议解析模块MySQLMessage 封装了Mysql协议包的操作 方便对TCP的数据进行Mysql协议解析3byte1byten bytes消息长度报文数据序号消息头消息体1byten byte命令参数mysql报文请求消息体协议解析模块3byte1byten bytes3byte1byten bytes3byte1byten bytes3byte1byten bytes3byte1byten bytesResult Set HeaderFieldEOFRow DataEOFResultSetHeaderPac

4、ket, FieldPacket,EOFPacket,RowDataPacketMysql响应报文目录 解决的问题 总体架构 前端连接管理 路由模块 SQL执行模块 后端连接管理 负载均衡 权限控制2022-6-12路由模块 SQL解析 DruidParse 分库标示 路由规则 路由函数 读写分离特殊路由 事务 强制读主库 无分库标示 qmq路由SQL解析 获取分库标示,定位分片 参数 1分片 2分片 解析语句,定位主从 SelectStatement 从库 UpdateStatement,DeleteStatement,InsertStatement 主库2022-6-12路由配置2022-

5、6-12select now()数据库节点对应的dn0, dn1路由配置 每个表都会配置分库规则 每条规则对应一个路由函数oidafterOneDayByOidyyyy-MM-dd2015-09-24180路由模块 路由函数路由算法 RuleAlgorithmRuleAlgorithmAbstractPartitionAlgorithmPartitionByOIDAfterDayPartitionByDateAfterDay路由模块Sql语句DruidParserRouterWriteReadupdateselectselect * from table where id=1update ta

6、ble set status =2 where id=1SelectStatementselect * from table where id=1UpdateStatementupdate table set status =2 where id=1读写分离 事务 begin transaction select sql update sql insert sql commit transaction( rollback transaction) 直接路由到Write库,直到事务提交/回滚 强制读主库 /*balance*/方式 ReadMaster注解特殊路由2022-6-1219 无分库标

7、示 select语句,会查询所有的库表,将数据汇总后,返回给客户端 insert语句,直接报错 update语句,会更新所有库表的数据 delete语句,会删除所有的库表的数据 qmq_msg_queue的路由 参照同一事务内其他sql的路由 如果没有其他sql,则执行默认的路由特殊路由2022-6-1220目录 解决的问题 总体架构 前端连接管理 路由模块 SQL执行模块 后端连接管理 负载均衡 权限控制2022-6-12SQL执行模块ResponseHandlerSingleNodeHandlerMultiNodeHandlerCommitNodeHandlerRollbackHandle

8、rSingleNodeHandler.execute() 路由到一个分片时被执行执行MultiNoderHandlerNodeHandler.execute() 路由到多分片时被执行执行CommitNodeHmit() 提交事务执行CommitNodeHandler.rollback() 回滚事务执行SQL执行模块 NonBlockSession: 一个连接的会话,绑定前端连接跟后端连接 无事务:每个sql在不同连接执行 有事务:所有sql在同一个连接上执行 SQL执行模块NonBlockingSessioncon1con2con3Sql1, sql2, sql3sql1sql2sql3Non

9、BlockingSessioncon1sql1, sql2, sql3,commitSql1,sql2, sql3commitrelease con1release con1release con2release con3无事务有事务前端连接后端连接SQL执行过程客户端connectionSql请求路由Mysql报文postgresqlSQL执行器Sql语句报文转换执行结果Mysql响应报文执行结果Sql解析mysql目录 解决的问题 总体架构 前端连接管理 路由模块 SQL执行模块 后端连接管理 负载均衡 权限控制2022-6-12后端连接管理模块 管理后端数据库连接 创建新的数据库连接 回

10、收连接 分片主从管理 控制读写分离后端连接管理 管理后端真实数据库的连接DBBackendConnctionMangerSql执行请求Connection执行结果目录 解决的问题 总体架构 前端连接管理 路由模块 SQL执行模块 后端连接管理 负载均衡 权限控制2022-6-12负载均衡 注册发现使用zookeeper实现,dbproxy启动的时候在zookeeper上注册服务地址,客户端监听对应节点的信息,如果有服务上线,或者下线,动态的获得dbproxy的服务列表,然后动态生成数据源,供客户端使用。zookeeperdbproxydbproxydbproxyregisterclientda

11、tasourcedynamicDataSourcesubscribecreateinjection负载均衡 负载均衡,是使用了spring的动态数据源AbstractRoutingDataSource,扩展了该数据源,从动态数据源中根据一定的负载均衡策略,选出一个可以使用的数据源。(1). 随机策略 :随机选一个可用的数据源。 com.qunar.des.dbproxy.datasource.balance.RandomStrategy (2). 轮询策略 :从可用的数据源中,按照顺序轮询。com.qunar.des.dbproxy.datasource.balance.RoundRobinW

12、eightStrategy 可以通过实现BalanceStrategy.getNext实现不同的负载均衡策略。Dbproxy分组 通过为dbproxy配置不同的组,可以灵活的组装不同的dbproxy为一个集群dbproxydbproxydbproxydbproxydbproxydbproxydbproxydbproxydbproxydes.dbproxy.orderdes.dbproxy.voucherdes.dbproxy.task目录 解决的问题 总体架构 前端连接管理 路由模块 SQL执行模块 后端连接管理 负载均衡 权限控制2022-6-12权限控制 基于appcode进行权限控制 新增应用Qconfig动态增加appcode 增加新机器就已经有权限了2022-6-12 监控报警 慢查询监控 连接数监控

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论