王志广的个人分享

DBProxy分析

admin发表于2016-07-20  6,234次浏览 标签: 

DBProxy为客户端和数据库端之间的中间代理程序,它负责检测分析和过滤请求以及服务器负载和读写分离等,避免MYSQL单点失效和压力骤增而引起的宕机。

1、DBProxy框架(3个基于)
基于epoll
基于进程模型(主进程、工作进程、日志进程、服务进程)
客户端、db请求处理基于状态机模型

2、程序框架
main->network_server_start->child_make->child_main->(process_ready_clinet_network_socket、process_ready_server_network_socket)
STATE_CONNECTED_CLIENT->STATE_SEND_HANDSHAKE->STATE_READ_AUTH->STATE_SEND_AUTH_RESULT->STATE_READ_QUERY->STATE_READ_QUERY_RESULT
STATE_CONNECTED_SERVER->STATE_READ_HANDSHAKE->STATE_SEND_AUTH->STATE_SEND_QUERY

3、主要功能点
SQL防攻击
白名单中配置的是SQL签名ID,匹配后,直接放行,否则阻断
黑名单中配置的是正则规则,匹配后,阻断SQL。
灰名单中配置的是正则规则,匹配后,输出警告。
conf/rules.conf
[xdb_black_list]
xxx
[xdb_grey_list]
xxx
[fw_white_list]

流传输(默认开启)
DBProxy针对大结果集提供流传输功能,当系统缓存结果的大小超过阈值之后,将结果发送到应用。避免出现查询结果过大,导致DBProxy内存被占满的情况

热加载
dbproxy.conf 发生变化,自动触发热加载
加载过程中,自动处理前后端连接、用户、以及数据库实例
加载详细配置记录在load日志中
加载失败自动回滚

连接解绑
绑定客户端和服务器关系

只读帐号
PRODUCT_USER:wr_flag=0表示读写账号1表示只读2表示只写
PRODUCT_USER:is_bind=0表示前后端解绑1表示前后端绑定

异步日志
实现QUERY业务处理和日志写入逻辑分离,IO磁盘压力较大情况下日志过程的阻塞不会影响到业务处理
日志的切分,按照大小和小时两种策略进行切分

流量控制
switch_flow_control=1打开用户级别的QPS流控2打开SQL级别的QPS流控3全部打开0关闭上述流控功能
flow_control_enter_standard进入流控判断标准,当10秒内由于连接打满导致业务请求占总请求比例超过flow_control_enter_standard,流控。
sql_flex_length_byte SQL级别的QPS流控针对SQL长度最大值取值范围1-40000
slow_sql_standard_ms SQL级别QPS流控针对的SQL执行时间

dbcache
DBPoxy可以把MYSQL数据缓存Cache中,不过是针对主键级别的操作

4、扩展
如果想让SELECT调用主库,DBProxy默认是不支持的,不过可以使用事物解决,就是开启事物后,DBProxy默认走的是主库。
如果想要DBProxy内部命令和日志说明的可以联系我。

你可以发表评论引用到你的网站或博客,或通过RSS 2.0订阅这个日志的所有评论。
上一篇:
下一篇:
已有2条评论
米表
2016 年 8 月 28 日

随便看看,随便转转!

尚爱思笑话
2016 年 8 月 29 日

感觉很不错的样子!

我来说两句

  Ctrl+Enter