当前位置: 首页 > 科技观察

Java数据库读写分离-数据库中间件DBProxy_0

时间:2023-03-14 19:23:19 科技观察

前言断言好久没更新了,今天引用美团技术团队的一篇文章给大家分享一个数据库中间件-美团DBProxy!众所周知,随着数据量越来越大,传统的直接连接数据库访问数据的方式已经不能满足一般公司的需求。相比于业务逻辑分库分表,通过DBProxy数据库中间件,数据库的横向扩展可以更简单、更容易、更快捷,从原来的单库变成多库,数据库中间件将数据传递访问请求通过路由规则路由到其中一个数据库,大大降低了数据访问的瓶颈和单一数据的压力。开源项目地址:https://github.com/Meituan-Dianping/DBProxy概述本次分享的主要内容包括6个部分:***是我对美团点评DBProxy的简单介绍;第二部分将介绍美团点评DBProxy的整体架构;第三个是美团点评DBProxy的主模块,主模块介绍了我们美团点评在上面的主要工作;第四部分是线路状态;第五部分是我们后续的一些安排,未来的打算;***是质量检查的一部分。DBProxy的优点首先介绍一下为什么需要使用DBProxy:使用DBProxy后,应用程序只需要在连接字符串中设置DBProxy的地址,不需要关注整个数据库集群的节点;DBProxy实现内部负载均衡,读写分离;Slave的上下联机操作,DBA在自动化操作系统上鼠标一键即可完成。这大大减少了DBA和应用程序开发人员的工作量;在没有DBProxy的情况下,这些工作都是由RD来完成的,DBProxy的引入对于系统的可管理性和便捷性有很大的帮助。DBProxy的软件模块描述了DBProxy的软件模块。软件模块分为三层:第一层是访问控制,包括用户处理、IP过滤等;中间层是SQL处理过程,包括SQL解析、SQL重写、SQL执行;第三层是主要与DBA连接相关的模块,如读写分离、负载均衡、连接池等;贯穿整个三层的还有另外三个模块:***是连接管理,负责管理发送和接收数据的底层连接;二是日志管理,三是监控管理。DBProxy连接改进首先介绍连接管理:根据我们链路比较长的特点,重点增加连接异常的检测和处理,包括:DBProxy上游和MGW交互连接检测;DBProxy下游与MySQL连接检测;DBProxy宿主机的连接检测。MTAltasSESSION级变量SQL处理模块增加SESSION参数功能:客户端分配DB连接时,如果两个SESSION级参数不同,则先进行修正,修正后才真正执行查询.DBProxy连接池改进对连接池的管理做了如下修改:链表改为Hash表,Hashkey为用户名,Hash值为用户建立的连接的链表。如下图,connections是按用户划分的,clients会划分到各自用户建立的dbconnections。两者互不影响,既保证了查询的正确性,又保证了高性能。DBProxy访问控制先说访问控制模块,它是我们整个软件模型的最顶层。第一个是添加一个SQL过滤功能:这个功能是通过黑名单来实现的,黑名单的形式是下面两条语句;黑名单可以根据执行频率和执行时间自动添加,其中频率和时间可以根据自己的需要动态修改。此外,我们还提供了手动添加黑名单的功能。第二种是根据后台db的线程运行情况进行负载均衡。每当分配后台连接时,首先查看后台运行的线程数,直到有一个线程运行数在我的阈值内才去。分发。三是用户IP限制。我们限制了用户的主机地址,相当于控制了一个权限。***一个是从库流量配置。我可以指定某个用户只能访问某些从库,或者反过来,某些从库只允许某些用户访问。这可以以更详细的方式进行。分配数据库资源。DBProxy监控模块DBProxy的监控系统实现了一个从无到有的过程。目前主要监控DBProxy内部运行相关的一些参数:DBProxyShardingimprovement对于sharding版本,做了如下改进:首先,我们将分库改为components数据库分表,并提供了5种方式分库分表;二是完善Lemon,使其基本兼容MySQL语法;第三个是在单个库中对JOIN的有限支持。Lemon解析后发现,涉及到的表如果都在同一个数据库中,则支持表的JOIN;同理,也支持单个数据库的事务。最后一个是增加错误处理:当一个库在执行过程中出现错误时,会有一些回滚机制来处理一些异常情况导致的执行失败。Q:能简单说一下在这方面是如何改进的吗?A:首先是语法支持。我们只是支持中间不支持的语法。在这种情况下,我们可以使用这个语法来执行一些复杂的查询。比如where条件的分析可以知道分布表的情况。然后是表的更换。在线给大家分享一下DBProxy的现状:自2015.5推出第一个版本以来,87%的服务群都接入了DBProxy,DBProxy也经历了5次版本迭代。DBProxy的未来计划先说说未来的计划:第一个是更强大的SQL处理:增加一些SQL优化,Rowcache功能;分库分表全面的SQL支持,如聚合、排序;更全面的Connect上下文信息;第二:监控管理要与故障自动处理相结合,真正做到监控信息智能化;第三:下一步是和我们美团点评自己的MHA集成,支持自动故障转移;第四:支持分布式事务。