设为首页收藏本站我的广告

运维网

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
总共321条微博

每日一博

查看: 4110|回复: 0

[业内动态] 【站长推荐】美团点评数据库中间件 DBProxy 开源【顶】

[复制链接]

该用户从未签到

dfger2000 发表于 2017-1-6 11:54:00 | 显示全部楼层 |阅读模式
【站长推荐】介绍随着数据量的不断增大,传统的直连数据库对数据进行访问的方式已经无法满足一般公司的需求。通过数据库中间件,可以对数据库进行水平扩展,由原来单台数据库扩展到多台数据库,数据库中间件通过路由规则将数据的访问请求路由到其中一台数据库上,从而大大降低了数据访问的瓶颈和单台数据库的压力。通过数据库中间件还可以将DBA和研发进行解耦,提升DBA运维效率。
奇虎360公司开源的Atlas是优秀的数据库中间件,美团点评DBA团队针对公司内部需求,在其上做了很多改进工作,形成了新的高可靠、高可用企业级数据库中间件DBProxy,已在公司内部生产环境广泛使用,较为成熟、稳定。相关工作的详细介绍可以参考之前的博客文章《美团点评的Atlas实践》
现在,我们非常高兴地将DBProxy开源,希望与业内有类似需求的团队,一起打造一款优秀的企业级数据库中间件产品。项目的Github地址是https://github.com/Meituan-Dianping/DBProxy
DBProxy的优点

  • 支持多语言MySQL客户端
  • 读写分离
  • 负载均衡
  • Slave故障感知与摘除(Master需要MHA等其他联动)
  • 后端连接池
  • 自定义SQL拦截与过滤
  • 流量分组与控制
  • 丰富的监控状态
  • 支持分表(分库版本正在内测中)
  • Client IP限制
DBProxy对Atlas的改进

  • 新增功能点

    • 新增参数
    • backend-max-thread-running用于指定每个MySQL后台的最大thread running数
    • thread-running-sleep-delay用于指定在thread running数超过backend-max-thread-running时,客户端连接等待的时间
    • 添加到黑名单中需要满足两个条件:SQL执行的时间和频率
    • 提供了查看、修改、添加、删除黑名单的功能
    • 黑名单管理提供了将黑名单保存到文件以及从文件中Load到内存中的功能
    • 在手动添加黑名单时,只需要将用户的SQL语句输入,在内部自动转化成过滤条件,手动添加时是否生效由参数 manual-filter-flag 来控制,OFF:不生效,ON:立即生效
    • 手动添加与自动添加两种情况下的过滤条件是否生效是分别由不同参数控制,这个要区分清楚。另外,也可以使用 admin 的命令来设置是否开启/关闭某个过滤条件
    • SQL执行的时间
      由参数 query-filter-time-threshold 来指定,如果SQL执行时间超过此值,则满足条件
    • SQL执行频率
      由参数 query-filter-frequent-threshold 来指定,如果SQL执行频率超过此值,则满足条件
      频率就是在时间窗口内执行的次数。时间窗口则是由频率阈值和最小执行次数来计算出来的,当时间窗口小于60s时,扩展到60s
      参数 access-num-per-time-window 用来指定在时间窗口内的最小执行次数,添加此参数是考虑到执行时间长的SQL在计算频率时同时参考其执行的次数,只有执行一定次数时才去计算其频率。当执行时间与执行频率都满足时条件时,会自动将查询作为过滤项放到黑名单中,加入到黑名单中是否生效由参数 auto-filter-flag 来控制,OFF:不生效,ON:立即生效
    • 黑名单的管理
    • 从库流量配置
      指定查询发送到某个从库
    • 参数动态设置(完善show proxy status/variables)
      支持save config,动态增加、删除分表
    • 响应时间percentile统计
      统计最近时间段DBProxy的响应时间
    • kill session
      支持DBProxy的admin接口kill session操作
    • backend平滑上下线
      支持平滑的backend上下线
    • DBProxy非root用户启动
      使用非root用户启动
    • admin账号的安全限制
      admin账号密码的动态修改及host限制
    • 增加异步刷日志的功能
      增加日志线程、异步刷日志,提高响应时间
    • 支持DBProxy平滑重启功能
    • 支持SQL过滤的黑名单功能
    • 支持对于MySQL后台的thread running限制功能
      该功能通过在DBProxy内限制每个后台MySQL的并发查询,来控制对应MySQL的thread running数
      当发向某个MySQL后台的的并发查询超过某个阈值时,会进行超时等待,直到有可用的连接,其中阈值与超时等待的时间都已经参数化,可以动态配置
    • set backend offline不再显示节点状态
    • 支持set transaction isolation level
    • 支持use db
    • 支持set option语句
    • 支持set session级系统变量
    • 支持建立连接时指定连接属性
    • 改进连接池的连接管理,增加超时释放机制。当连接池中的空闲连接闲置超过一定时间后,自动释放连接。由参数 db-connection-idle-timeout 控制
    • 增加客户端连接的keepalive机制,避免网络异常后释放已断开的连接
    • 完善管理日志,增加了管理命令日志、错误语句日志以及详细的错误日志
    • 完善SQL日志信息,包含了详细的连接信息,并包含了DBProxy内部执行的隐式SQL语句。隐式SQL语句主要是连接重用时切换database、字符集的语句