MySQL 中间件汇总比较

article/2025/10/6 6:20:17

 

360 Atlas

 

        较为活跃,Atlas 是由 360 Web平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用 Atlas 运行的 MySQL 务,每天承载的读写请求数达几十亿条。

 

        主要功能:

        1. 读写分离

        2. 从库负载均衡

        3. IP过滤

        4. SQL语句黑白名单

        5. 自动分表

 

Cobar (不维护了)

 

        Cobar是阿里巴巴(B2B)部门开发的一种关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。

 

        Cobar的分布式主要是通过将表放入不同的库来实现:

        1. 支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分

        2. 支持将不同的表放入不同的库

        3. 多数情况下,用户会将以上两种方式混合使用。

 

        这里需要强调的是,Cobar 不支持将一张表,例如test表拆分成test_1, test_2, test_3.....放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。

 

        在用户配置了 MySQL 心跳的情况下,Cobar 可以自动向后端连接的 MySQL 发送心跳,判断 MySQL 运行状况,一旦运行出现异常,Cobar 可以自动切换到备机工作。

 

        但需要强调的是:

        1. Cobar 的主备切换有两种触发方式,一种是用户手动触发,一种是 Cobar 的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。

        

        2. Cobar 只检查 MySQL 主备异常,不关心主备之间的数据同步,因此用户需要在使用 Cobar 之前在 MySQL 主备上配置双向同步,详情可以参阅MySQL参考手册。

 

        其次,我们也需要注意Cobar的功能约束:

        1. 不支持跨库情况下的join、分页、排序、子查询操作。

        2. SELECT 语句执行会被忽略,事务和字符集设置除外。

        3. 分库情况下,insert 语句必须包含拆分字段列名。

        4. 分库情况下,update 语句不能更新拆分字段的值。

        5. 不支持 SAVEPOINT 操作。

        6. 暂时只支持 MySQL数据节点。

 

        

 

Mycat

 

        前身 Cobar,开源,较为活跃。

 

        特点:

  • 遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理。
  • 基于心跳的自动故障切换,支持读写分离,支持 MySQL 一双主多从,以及一主多从
  • 有效管理数据源连接,基于数据分库,而不是分表的模式
  • 基于 NIO 实现,有效管理线程,高并发问题。
  • 支持数据的多片自动路由与聚合,支持 sum , count , max 等常用的聚合函数。
  • 支持2表 join,甚至基于 caltlet 的多表 join。
  • 支持通过全局表,ER 关系的分片策略,实现了高效的多表 join 查询。
  • 支持多租户方案。
  • 支持分布式事务(弱xa)
  • 支持全局序列号,解决分布式下的主键生成问题。
  • 分片规则丰富,插件化开发,易于扩展。
  • 强大的 web,命令行监控。
  • 支持前端作为 MySQL 通用代理,后端 JDBC 方式支持 Oracle、DB2、SQL Server 、 mongodb 、巨杉。
  • 集群基于 ZooKeeper 管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。

        

        

 

        参考有道:MySQL 中间件 Mycat【Blog】.note ,Blog:MySQL 中间件 Mycat

TDDL

 

        已经不再使用,下一代是 DDRS。

        

        淘宝根据自己的业务特点开发了 TDDL (Taobao Distributed Data Layer 外号:头都大了 )框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource 实现,具有主备,读写分离,动态数据库配置等功能。

 

        TDDL 通过部署在客户端的 jar 包,将用户的 SQL 路由到指定的数据库中。

 

        功能:

  • 数据库主备和动态切换
  • 带权重的读写分离
  • 单线程读重试
  • 集中式数据源信息管理和动态变更
  • 剥离的稳定 jboss 数据源
  • 支持 MySQL 和 Oracle 数据库
  • 基于 JDBC 规范,很容易扩展支持实现 JDBC 规范的数据源
  • 无 Server,Client,Jar 形式存在,应用直连数据库
  • 读写次数,并发度流程控制,动态变更
  • 可分析的日志打印,日志流控,动态变更

    

        

 

Heisenberg

 

        整合 Cobar、TDDL,目前并不活跃,由百度员工个人编写。

 

        功能:

  • 分库分表与应用脱离,分库表如同使用单库表一样
  • 减少 DB 连接数压力
  • 热重启配置
  • 可水平扩容
  • 遵守 MySQL 原生协议
  • 无语言限制,MySQLClient,C,Java等都可以使用

        Heisenberg服务器通过管理命令可以查看,如连接数,线程池,结点等,并可以调整

        

 

Oceanus

 

        用得较少,58 Oceanus 致力于打造一个功能简单、可依赖、易于上手、易于扩展、易于集成的解决方案,甚至是平台化系统。拥抱开源,提供各类插件机制集成其他开源项目,新手可以在几分钟内上手编程,分库分表逻辑不再与业务紧密耦合,扩容有标准模式,减少意外错误的发生 datanode:数据源节点。为一个数据源命名,配置链接属性、报警实现。

 

        主要概念:

  • namenode:数据源的簇。为一组数据源命名,指定这组数据源的负载方式、访问模式、权重
  • table:映射表。匹配解析sql中的table名称,命中table标签的name属性值后,会执行约定的路由逻辑
  • bean:实体。由其他标签引用,实体类必须有无参的构造函数
  • tracker:监控埋点。涉及到计算和IO的功能点都有监控点,自定义一个埋点实现类,当功能耗时超出预期时会执行其中的回调函数,便于监控和优化系统

        

 

Vitess

 

        较全 高大上,和开发中的 Mycat2.0 类似。谷歌开发的数据库中间件,集群基于 ZooKeeper 管理,通过 RPC 方式进行数据处理,总体分为,server,command line,gui监控 3部分。

        

 

OneProxy 

 

        商业、收费。

 

        OneProxy 分布式中间件,是平民软件完全自主开发的分布式数据访问层,帮助用户在 MySQL/PostgreSQL 集群上快速搭建支持分库分表的分布式数据库中间件,也是一款具有 SQ L白名单(防 SQL 注入)及 IP 白名单功能的 SQL 防火墙软件。采用与 MySQL Proxy 一致的反向协议输出模式,对应用非常简单和透明易用,让用户畏惧的分库分表(Horizontal Partitioning)工作变得极其简单可控。基于 Libevent 机制实现,单个实例可以实现25万的 SQL 转发能力,用一个 OneProxy 节点可以带动整个 MySQL 集群。

 

DRDS(推荐)

 

        整合云服务,收费、Cobar、TDDL整合,商用,首选。

 

        阿里分布式关系型数据库服务(Distribute Relational Database Service,简称DRDS)是一种水平拆分、可平滑扩缩容、读写分离的在线分布式数据库服务。前身为淘宝 TDDL,是近千个应用首选组件,已稳定服务了七年以上。

        

 


资料:

        Mycat在线视频培训  链接:https://pan.baidu.com/s/1K51J3AO4MfLHGrvBgPLQIA  密码:69tj

        

 

 


http://chatgpt.dhexx.cn/article/x6wqfkAy.shtml

相关文章

MySQL-中间件mycat(一)

目录 🍁mycat基础概念 🍁Mycat安装部署 🍃初始环境 🍃测试环境 🍃下载安装 🍃修改配置文件 🍃启动mycat 🍃测试连接 🦐博客主页:大虾好吃吗的博客 &#x1f9…

MySQL 分表方案及中间件介绍

背景 什么情况下需要分表?这里归纳了3点: (1)某个表被操作的频率过于频繁的时候(可以查看某个表的访问频繁),在流量越来越大的时,可以考虑分表。 (2)某个表的数据量过于庞大的时候(我给自己设…

中间件之MYSQL

体系结构 server层 负责建立连接、分析和执行 SQL 连接器:与客户端进行TCP三次握手;校验用户名和密码;读取权限。查询缓存:key-value缓存在mysql8.0后默认将其关闭;高级版本默认采用页缓存。解析器:词法…

mysql优化——mycat数据库中间件

文章目录 目录 文章目录 前言 一、mycat原理 二、mycat完成读写分离 2.1搭建MySQL的主从模式 2.2实现读写分离 三、mycat垂直分库 四、水平分表 五、水平拆分表的连表操作 六、全局表 总结 前言 Mycat是数据库中间件,所谓中间件,是一类连接软件组件和应用的计算机软件,以…

mysql中间件汇总

一、写在前面 mysql作为互联网公司都会用到的数据库,在使用过程中。会用主从复制来提高性能。会用分库分表解决写入问题。以下介绍mysql中间件的一些实现方案 二、Atlas Atlas时 360 公司开发维护的一个基于MySQL协议的数据中间层项目。 2.1 atlas架构 Atlas是一…

makfile的编译选项:CFLAGS、CPPFLAGS、LDFLAGS、LIBS

1、LDFLAGS & LIBS 关于makefile的依赖规则以及目标生成的步骤,这篇先不介绍,这里主要关注我在看makefile时遇到的一堆CFLAGS与LDFLAGS定义进行说明。 费了牛劲,才查到GNUmake中文手册中关于CFLAGS与LDFLAGS的说明,他们都是…

Makefile 编译与链接选项及CFLAGS与LDFLAGS说明

CFLAGS与LDFLAGS的说明,他们都是是隐含规则的变量,且是一种命令参数变量. makefile内嵌隐含规则的命令中,所使用的变量都是预定义的变量。我们将这些变量称为“隐含变量”。这些变量允许对它进行修改:在Makefile中、通…

Go新项目-项目添加版本说明,以及参数传递:ldflags、gcflags,外加stripped说明(5)

在Go项目中,会存在展示该项目的版本信息,以及打包日期,项目版本,Go版本等;继Go新项目-编译项目的细节(4)以后再记录下编译优化方向,刚好也有项目版本输出的需求。 关键词&#xff1…

linux编译参数CPPFLAGS、CFLAGS、LDFLAGS参数的理解

参考到下面博客,把编译步骤分解的很细 linuxC编译参数CPPFLAGS、CFLAGS、LDFLAGS参数的理解 - yongfengnice - 博客园 CPPFLAGS : 预处理器需要的选项 如:-I (大写i指定头文件路径) CFLAGS:编译的时候使用的参数 –Wall –g -c LDFLAGS &…

【Java位运算】异或运算的使用

异或运算有个特性:两个相同的数做异或运算,结果为0。 n ^ n 0;常用的方式是查找数组中只出现一次的数字。 例如:在一个数组中,只有一个数字出现了一次,其余数字都出现了两次。 求这个数字。利用异或运算的特性进行计…

java中与运算,或运算,异或运算

Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^) 位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻…

Java中的与、或、非以及异或( | ~ ^)运算符的运算原理

首先,我们要知道Java存储数据是保存的补码,如果对原码、反码以及补码不太懂,可以参考我的另一篇博客。 1. Java的 与( & ) 运算 所有的逻辑运算都是按位计算的,所以第一步就是先把数据转成二进制,然后相应位进行…

java运算符 与()、非(~)、或(|)、异或(^)

欢迎大家关注我的公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。 位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符&…

java中的异或非运算

一、java 与或非 操作 与(&)、非(~)、或(|)、异或(^) 1.与运算符 与运算符用符号“&”表示,其使用规律如下: 两个操作数中位都为1&#x…

java运算符异或(^)的用法

Java中的位运算符中有一个叫做异或的运算符,符号为(^),其主要是对两个操作数进行位的异或运算,相同取0,相反取1。即两操作数相同时,互相抵消。 试例:13 与15 两个整数的异或 public static void…

一文搞懂 位运算 异或(Java实现)

提起异或想必很多小伙伴们既熟悉又陌生,熟悉是因为好像在离散数学或者学某个编程语言 时听过这个东西,而陌生呢,则是因为自己平时并没有用过,以至于当在某个场景 (我猜是在看 题解或者某篇博客时) 看到这…

java中异或运算的应用

java中异或运算(^)的应用 异或运算法则 1. a ^ b b ^ a   2. a ^ b ^ c a ^ (b ^ c) (a ^ b) ^ c;   3. d a ^ b ^ c 可以推出 a d ^ b ^ c.   4. a ^ b ^ a b. 异或运算 1、异或是一个数学运算符。应用于逻辑运算。   2、例如:真异或假的结果是…

java的异或运算

一、题目 输入两个数,交换后输出 二、解题思路 一开始学习的语言是c语言,里面非常有特色的是指针,通过传引用可以直接交换两个数。但java无法达成这种操作,翻阅资料找到了一种有趣的解法:异或! 异或原理: …

java基础-异或运算

小伙伴们,你们好呀!我是老寇! 异或运算主要用于判断两个值是否一样 异或运算的3个性质: 1.任何数和0进行异或运算,结果是原来的数,即b⊕0b 2.任何数和其自身进行异或运算,结果为0,即…

Java中的异或运算符^

Testpublic void test2() {int a2;int b3;aa^b;ba^b;aa^b;System.out.println("a"a",b"b);}第一种:用真实值计算 ^是异或运算符,异或的规则是转换成二进制比较,相同为0,不同为1. 一个数a与另一个数b异或的结果…