- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于代理的分库分表中间件汇编
基于代理方式的分库分表中间件dbproxy
目的地技术部
周文斌
目录
解决的问题
总体架构
前端连接管理
路由模块
SQL执行模块
后端连接管理
负载均衡
权限控制
2017-4-13
Dbproxy是什么?
数据库代理
关系数据库的路由器
关系数据库升级到大数据的应用中间件
基于开源的mycat实现
支持数据的水平拆分
2017-4-13
解决的问题
数据的增长存储问题
数据库连接的集中式管理
数据库的透明化扩展
数据库的透明化迁移
2017-4-13
实现的功能
分库分表
读写分离
负载均衡
服务注册发现
权限控制
目录
解决的问题
总体架构
前端连接管理
路由模块
SQL执行模块
后端连接管理
负载均衡
权限控制
2017-4-13
总体架构
mysql
mysql
pg
BackendConnectionManager
pgDriver
FrontendConnectionManager
协议适配(mysql)
协议解析
Sql解析
规则路由
Sql executor
结果合并
响应报文
客户端
客户端
MysqlDriver
Mysql数据包
目录
解决的问题
总体架构
前端连接管理
路由模块
SQL执行模块
后端连接管理
负载均衡
权限控制
2017-4-13
前端连接管理
1. 跟客户端建立连接
2. 进行权限认证
3. 前端连接的创建及销毁
协议解析模块
MySQLMessage
封装了Mysql协议包的操作
方便对TCP的数据进行Mysql协议解析
3byte
1byte
n bytes
消息长度
报文数据
序号
消息头
消息体
1byte
n byte
命令
参数
mysql报文
请求消息体
协议解析模块
3byte
1byte
n bytes
3byte
1byte
n bytes
3byte
1byte
n bytes
3byte
1byte
n bytes
3byte
1byte
n bytes
Result Set Header
Field
EOF
Row Data
EOF
ResultSetHeaderPacket, FieldPacket,
EOFPacket,
RowDataPacket
Mysql响应报文
目录
解决的问题
总体架构
前端连接管理
路由模块
SQL执行模块
后端连接管理
负载均衡
权限控制
2017-4-13
路由模块
SQL解析
DruidParse
分库标示
路由规则
路由函数
读写分离
特殊路由
事务
强制读主库
无分库标示
qmq路由
SQL解析
获取分库标示,定位分片
参数 1分片 2分片 …
解析语句,定位主从
SelectStatement 从库
UpdateStatement,DeleteStatement,InsertStatement 主库
2017-4-13
路由配置
2017-4-13
dataNode name=dn0 dataHost=server0 database=des_trade /
dataHost name=server0 maxCon=15 minCon=10 balance=2 writeType=0
dbType=postgresql dbDriver=jdbc
heartbeatselect now()/heartbeat
writeHost host=hostM0
url=jdbc:postgresql://:5432/des_trade
user=tuan_usr password=“xxxxxxxxx
readHost host=hostS01
url=jdbc:postgresql://:6432/des_trade
user=tuan_usr password=“xxxxxxxxx /
/writeHost
/dataHost
数据库节点对应的dn0, dn1
路由配置
每个表都会配置分库规则
每条规则对应一个路由函数
table name=order_oplog primaryKey=ID dataNode=dn0,dn1
rule=begin-after-one-day-by-oid /
tableRule name=begin-after-one-day-by-oid
rule
columnsoid/columns
algorithmafterOneDayByOid/algorithm
/rule
/tableRule
function name=afterOneDayByOid
class=com.qunar.des.dbproxy.function.PartitionByOIDAfterDay
property name=dateFormatyyyy-MM-dd/prop
文档评论(0)