美团数据库中间件DBProxy开源

随着数据量的不断增大,传统的直连数据库对数据进行访问的方式已经无法满足一般公司的需求。通过数据库中间件,可以对数据库进行水平扩展,由原来单台数据库扩展到多台数据库,数据库中间件通过路由规则将数据的访问请求路由到其中一台数据库上,从而大大降低了数据访问的瓶颈和单台数据库的压力。通过数据库中间件还可以将DBA和研发进行解耦,提升DBA运维效率。

奇虎360公司开源的Atlas是优秀的数据库中间件,美团DBA团队针对公司内部需求,在其上做了很多改进工作,形成了新的高可靠、高可用企业级数据库中间件DBProxy,已在公司内部生产环境广泛使用,较为成熟、稳定。相关工作的详细介绍可以参考之前的博客文章《美团的DBProxy实践》。

现在,我们非常高兴地将DBProxy开源,希望与业内有类似需求的团队,一起打造一款优秀的企业级数据库中间件产品。项目的Github地址是https://github.com/Meituan-Dianping/DBProxy。

  1. 支持多语言MySQL客户端
  2. 读写分离
  3. 负载均衡
  4. Slave故障感知与摘除(Master需要MHA等其他联动)
  5. 后端连接池
  6. 自定义SQL拦截与过滤
  7. 流量分组与控制
  8. 丰富的监控状态
  9. 支持分表(分库版本正在内测中)
  10. Client IP限制
  • 新增功能点
    • 从库流量配置
      指定查询发送到某个从库
    • 参数动态设置(完善show proxy status/variables)
      支持save config,动态增加、删除分表
    • 响应时间percentile统计
      统计最近时间段DBProxy的响应时间
    • kill session
      支持DBProxy的admin接口kill session操作
    • backend平滑上下线
      支持平滑的backend上下线
    • DBProxy非root用户启动
      使用非root用户启动
    • admin账号的安全限制
      admin账号密码的动态修改及host限制
    • 增加异步刷日志的功能
      增加日志线程、异步刷日志,提高响应时间
    • 支持DBProxy平滑重启功能
      1. normal:等待所有当前事务结束后退出
        ① KILL -SIGTERM `pid of mysql-proxy`; ② admin 命令: shutdown [normal],其中等待过程有超时机制
      2. immediate:不等待当前事务结束直接退出
        ① KILL -SIGINT `pid of mysql-proxy`; ② admin 命令: shutdown immediate
      3. 配置参数shutdown_timeout: 在normal方式下,等待shutdown_timeout时间后退出,单位是s, 默认值是600
    • 支持SQL过滤的黑名单功能
      • 添加到黑名单中需要满足两个条件:SQL执行的时间和频率
      • 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:立即生效
      • 黑名单的管理
        • 提供了查看、修改、添加、删除黑名单的功能
        • 黑名单管理提供了将黑名单保存到文件以及从文件中Load到内存中的功能
        • 在手动添加黑名单时,只需要将用户的SQL语句输入,在内部自动转化成过滤条件,手动添加时是否生效由参数 manual-filter-flag 来控制,OFF:不生效,ON:立即生效
        • 手动添加与自动添加两种情况下的过滤条件是否生效是分别由不同参数控制,这个要区分清楚。另外,也可以使用 admin 的命令来设置是否开启/关闭某个过滤条件
    • 支持对于MySQL后台的thread running限制功能
      该功能通过在DBProxy内限制每个后台MySQL的并发查询,来控制对应MySQL的thread running数 当发向某个MySQL后台的的并发查询超过某个阈值时,会进行超时等待,直到有可用的连接,其中阈值与超时等待的时间都已经参数化,可以动态配置
      • 新增参数
        • backend-max-thread-running用于指定每个MySQL后台的最大thread running数
        • thread-running-sleep-delay用于指定在thread running数超过backend-max-thread-running时,客户端连接等待的时间
    • set backend offline不再显示节点状态
    • 支持set transaction isolation level
    • 支持use db
    • 支持set option语句
    • 支持set session级系统变量
    • 支持建立连接时指定连接属性
    • 改进连接池的连接管理,增加超时释放机制。当连接池中的空闲连接闲置超过一定时间后,自动释放连接。由参数 db-connection-idle-timeout 控制
    • 增加客户端连接的keepalive机制,避免网络异常后释放已断开的连接
    • 完善管理日志,增加了管理命令日志、错误语句日志以及详细的错误日志
    • 完善SQL日志信息,包含了详细的连接信息,并包含了DBProxy内部执行的隐式SQL语句。隐式SQL语句主要是连接重用时切换database、字符集的语句
    • 增加SQL日志rotate机制,可设置日志文件最大大小和日志文件最大个数,自动清理早期的SQL日志。分别由参数sql-log-file-size和sql-log-file-num控制
    • 增加后台MySQL版本号设置,主要影响MySQL连接协议中的server版本,客户端驱动可能依赖于server版本处理机制有所不同。由参数mysql-version控制
    • 性能改进,将SQL词法分析从串行方式改进为并发方式;其次,在每次执行SQL前如果database相同时,不再需要执行COM_INIT_DB命令。根据测试结果,在特定环境下sysbench的QPS从7万提升至22万
    • 增加监控统计信息,包括连接状态、QPS、响应时间、网络等统计
    • sql log动态配置
    • 改进autocommit为false时频繁连接主库的问题
  • Bugs修复
    • DBProxy建立连向MySQL连接时,新建的socket添加keepalive和非阻塞的属性
    • rpm安装时,创建conf目录并创建默认的配置文件的功能
    • rpm安装时,需要手动修改mysql-proxyd文件中的proxy-dir, 现在直接在rpm安装后就修改好
    • 解决了绑定后端连接断开时,客户端连接未及时断开的问题
    • 屏蔽了KILL语句,避免在后端MySQL可能误KILL的问题
    • 修改了事务内语句执行错误时,DBProxy未保留后台连接导致rollback发送到其它结点的问题
    • 修复分表查询结果合并时列字符集错误的问题,该问题可能会导致结果乱码
    • 解决在分表情况下,返回值有 NULL 的情况下,查询超时的问题
      此问题是DBProxy在多个分表merge结果的过程中未处理 NULL 值,导致结果集返回不对,而JDBC接口会认为此种情况下是未收到结果,会处于一直等待状态,触发超时
    • 解决在分表情况下, IN 子句中分表列只支持 int32,不支持int64 的问题
    • 解决连接断开的内存泄露问题
      在连接的结构体的释放接口中,lock 的成员变量未释放,导致在连接断开,回收连接对象时会泄漏24个字节
    • 取消admin操作中不必要的日志
    • 去掉了在连接 admin 时报”[admin] we only handle text-based queries (COM_QUERY)“的信息,此信息属于无用的信息
    • 去掉了在set backend offline/online时的返回值信息,此信息是无用信息
    • 解决用户权限不足、DBProxy用户名密码配置错误等导致使用错误用户的问题
    • 解决SQL_CALC_FOUND_ROWS之后SQL语句发往主库的问题
    • 解决SQL语句中有注释时语句分析不正确的问题
    • 解决客户端发送空串导致DBProxy挂掉的问题

新功能和Bug修复描述,详见release notes。

和各位同行共同打造一款企业级高可用、高可靠的数据库中间件产品,希望大家能够积极参与。

欢迎大家将需求或发现的Bug在Github上提交issue,帮助DBProxy的壮大;也欢迎大家在DBProxy用户交流群(QQ: 367199679)相互交流,共同学习。

QQ

DBProxy的github地址

  1. DBProxy快速入门教程
  2. DBProxy用户使用手册
  3. DBProxy开发手册
  4. DBProxy架构和实践
  5. DBProxy release notes
  6. DBProxy 测试手册
  7. FAQ
  8. DBProxy开发规范

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不卷学术了,这次卷一波NLP实战落地经验

作为最典型的 AI 领域之一,NLP 这些年也是越来越热门,基本上是各大厂必备了。随着 OpenAI 等技术的诞生、迁移学习等技术的成功应用,使得 NLP 技术在搜索、推荐、信息流、互联网金融、社交网络等领域不断发展壮大。与此同时,NLP 工…

docker挂载文件躺过的坑

Docker 实现挂载的三种方式 docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused “exec: “-v”: executable file not found in $PATH”: unknown. 看着启动成功了,但查日志启动失败 日…

美团团购订单系统优化记

团购订单系统简介 美团团购订单系统主要作用是支撑美团的团购业务,为上亿美团用户购买、消费提供服务保障。2015年初时,日订单量约400万~500万,同年七夕订单量达到800万。 目标 作为线上S级服务,稳定性的提升是我们不断的追求。尤…

论文浅尝 | emrKBQA: 一个面向临床医疗问答的KBQA数据集

笔记整理 | 谭亦鸣,东南大学博士生来源:BioNLP ’21 workshop, ACL ‘21链接:https://www.aclweb.org/anthology/2021.bionlp-1.7.pdf论文主要包含两个部分的核心工作:emrKBQA数据集,对应的benchmark。基于MIMIC-III …

Fine-tune之后的NLP新范式:Prompt越来越火,CMU华人博士后出了篇综述文章

文 | 刘鹏飞源 | 机器之心CMU 博士后研究员刘鹏飞:近代自然语言处理技术发展的第四范式可能是预训练语言模型加持下的 Prompt Learning。近几年,NLP 技术发展迅猛,特别是 BERT 的出现,开启了 NLP 领域新一轮的发展。从 BERT 开始&…

会议交流 | 世界人工智能大会“大数据关联”论坛举行

转载公众号 | 创邻科技2021年7月8日,由世界人工智能大会组委会与浙江创邻科技有限公司共同筹办的“大数据关联时代下的图数据库技术与应用论坛”在上海世博中心圆满落幕。论坛邀请了清华大学、北京大学、复旦大学、浙江大学、天津大学等多位学术届的思想领袖和工商银…

LeetCode 994. 腐烂的橘子(图的BFS)

1. 题目 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂…

美团酒店直连产品数据一致性演进

美团酒店直连项目自2013年末开始,通过业务上的不断完善和技术上的不断改进,至今已经接入200多家供应商,其中在线酒店3万以上,在线SPU30万以上。经过两年的成长,美团酒店直连平台终于在2015年末发展为国内最大的酒店直连…

直击行业痛点!端侧模型部署的成熟解决方案有了!

深度学习经过多年发展,AI已经深入人心,事实上,在图像、文本领域,AI在多个产业已经落地了诸多应用,我们熟知的自动驾驶、语音助手,背后就大量运用了AI技术。当下,飞桨PaddlePaddle、TensorFlow、…

OpenKG开源系列 | 大规模中文概念图谱OpenConcepts (浙江大学)

OpenKG地址:http://openkg.cn/dataset/openconcept官网:http://openconcepts.openkg.cn(提供Dump)开放许可协议:CC BY-SA 4.0(署名-相同共享)OpenConcepts 介绍OpenConcepts (http://openconcepts.openkg.c…

LeetCode 594. 最长和谐子序列(map)

文章目录1. 题目2. 解题2.1 map两次扫描2.2 map一次扫描1. 题目 和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。 现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。 示例 1: 输入: [1,3,2,2,5,2,3,7] …

MTDDL——美团点评分布式数据访问层中间件

2016年Q3季度初,在美团外卖上单2.0项目上线后,商家和商品数量急速增长,预估商品库的容量和写峰值QPS会很快遇到巨大压力。随之而来也会影响线上服务的查询性能、DB(数据库,以下统一称DB)主从延迟、表变更困…

详解预训练模型、信息抽取、文本生成、知识图谱、对话系统技术

我们正处在信息爆炸的时代、面对每天铺天盖地的网络资源和论文、很多时候我们面临的问题并不是缺资源,而是找准资源并高效学习。其次,即便网络上的资源非常多,学习是需要成本的,而且越有深度的内容越难找到好的学习资源。如果一门…

会议交流 | 欢迎注册 CCKS2021 全国知识图谱与语义计算大会!

欢迎注册 CCKS2021 全国知识图谱与语义计算大会知万物过去 谱AI未来2021年8月18日至8月21日 广州http://sigkg.cn/ccks2021主办:中国中文信息学会语言与知识计算专业委员会 承办:广东外语外贸大学注册介绍早期注册 1800元/人2021年7月28日前&…

LeetCode 1171. 从链表中删去总和值为零的连续节点(哈希表)

1. 题目 给你一个链表的头节点 head,请你编写代码,反复删去链表中由 总和 值为 0 的连续节点组成的序列,直到不存在这样的序列为止。 删除完毕后,请你返回最终结果链表的头节点。 你可以返回任何满足题目要求的答案。 &#x…

移动端性能监控方案Hertz

性能问题是造成App用户流失的罪魁祸首之一。App的性能问题包括崩溃、网络请求错误或超时、响应速度慢、列表滚动卡顿、流量大、耗电等等。而导致App性能低下的原因有很多,除去设备硬件和软件的外部因素,其中大部分是开发者错误地使用线程、锁、系统函数、…

刷新SOTA!Salesforce提出跨模态对比学习新方法,仅需4M图像数据!

文 | 子龙多模态已经不是一个新鲜的话题,如何在一个模型中融合CV和NLP的信息同时吸引了两个领域的目光(CV、NLP的会都能投),但是很容易就能想到,来自图片的视觉特征和来自语料的文本特征来自不同的模型,所隐…

论文浅尝 - ACL2021 | 探讨跨句事件联合抽取问题

转载公众号 | 浙大KG论文题目:MLBiNet: A Cross-Sentence Collective Event Detection Network本文作者:娄东方、廖智霖、邓淑敏、张宁豫、陈华钧(浙江大学)接收会议:ACL 2021论文链接:https://arxiv.org/p…

LeetCode 343. 整数拆分(DP)

1. 题目 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。示例 2: 输入: 10 输出: 36 解释: 10 3 3 4, 3 3 4 36。 说明: 你可以假设 …

python-dotenv解析env文件

python-dotenv解析env文件 最简单和最常见的用法是在应用程序启动时调用load_dotenv,从当前目录或其父目录中的.env文件或指定的路径加载环境变量,然后调用os.getenv提供的与环境相关的方法 .env 文件内容写法 ADMIN_HOST https://uat-rm-gwaaa.cn A…