数据库系列:业内主流MySQL数据中间件梳理
数据库系列:MySQL慢查询分析和性能优化
数据库系列:MySQL索引优化总结(综合版)
数据库系列:高并发下的数据字段变更
数据库系列:覆盖索引和规避回表
数据库系列:数据库高可用及无损扩容
数据库系列:使用高区分度索引列提升性能
数据库系列:前缀索引和索引长度的取舍
数据库系列:MySQL引擎MyISAM和InnoDB的比较
数据库系列:InnoDB下实现高并发控制
数据库系列:事务的4种隔离级别
数据库系列:RR和RC下,快照读的区别
数据库系列:MySQL InnoDB锁机制介绍
数据库系列:MySQL不同操作分别用什么锁?
1 背景
作为一线互联网的架构师,数据库存储是必不可的一个知识领域,而MySQL是数据库存储层最常用的组件之一。
随着互联网的不断发展,大规模流量场景的广泛应用,单单掌握MySQL技术是远远不够的。数据持久化还需要能应对以下复杂场景:
- 读写分离场景:需要一主多从的架构(写主读从),支持读写请求的自动负载,支持故障驱逐和主从自动切换等,
- 分库分表场景:随着数据库规模的变大,检索性能会下降,所以需要,支持横向(Scale Out)和 纵向(Scale Up)的分库分表和跨库跨表检索
- 权限控制:针对不同的用户或者角色组进行操作权限控制
- 监控告警:多维度对存储服务的可用性、性能、读写比、请求量级变化 进行实时监控,如果感知异常,及时预警,避免线上故障扩大化
- 日志审计:大规模业务场景,经常出现多业务公用存储费服务,如果存储层能够自行进行日志审计,那在每个业务侧就可以避免重复造轮子
- 并发控制:互联网下流量规模都是巨量的,具备并发控制能力,可以确保纠正由并发操作导致的错误,以保护数据库的完整性。
当然这些能力并不是MySQL天然支持的,需要一些中间件的支持,所以我们调研了业内常用的一些中间件的,从业务需求驱动,看看各有哪些,是能够满足的。
2 业务需求驱动
从问题出发,看看行业内对存储层有哪些共同的痛点,然后根据这些痛点输出解决方案
| 问题 | 说明 | 解决方案 |
|---|---|---|
| 连接池管理 | 客户端连接无限制,不可复用,不可隔离,业务间互相影响(如单个服务超载调用可能导致雪崩) | 归口到Proxy统一管理,提供连接池、连接数限制、重试、超时断开保护等能力 |
| 读写分离机制 | 需要为业务提供读写分离机制 | 数据服务存在主从部署模式,业务在路有时Porxy自动区分读写,写路由到主存储服务,读路由到从存储服务 |
| 负载均衡机制 | 需要为业务提供备机负载均衡 | 读能力能自动均衡的负载到多个从服务器上 |
| 数据库分库分表sharding | 数据量比较大的场景下,需提供业务分库分表能力 | 调用方屏蔽分表细节,跟单表操作一直。Proxy实现对分库分表的核心细节,不同组件会有一些限制(如带分表字段,不支持跨库join等) |
| 故障切换 | 主/备发生宕机等故障,需业务来处理故障切换 | 屏蔽后端DB故障问题,自动故障切换 |
| 权限 | 一方面账号权限放太开,没有最小化权限;另一方面机器迁移等都需手动申请权限较麻烦 | 通过user/pwds/ip等做权限控制,最小化权限。机器迁移自动权限扩缩容。 |
| 安全 | 需业务自己处理sql注入,核心数据加密等问题 | Proxy加一层保护,像sql注入,sql黑名单(如sleep/drop),数据加密等 |
| 日志审计 | Mysql数据被修改了,找不到是被谁修改的 | 提供便捷的日志审计,日志流控和动态变更,方便定位查询 |
| 监控告警 | 需业务根据自己需求搭建监控系统 | 提供连接数/慢查询数/Sql延迟/Sql语句统计/DB负载等监控告警 |
| 事务 | 部分业务会使用事务能力 | 支持单机/分布式事务。事务是mysql中间件最难做的点,单机事务基本中间件都能支持到,分布式事务不同中间件实现程度也不同 |
| 缓存 | 有DB数据缓存的场景,都需业务单独来做 | Proxy提供一些通用可配置的缓存策略(如基于查询、用户、schema等) |
3 常用MySQL中间件介绍
3.1 ProxySQL
介绍:
ProxySQL是使用C++开发的一个功能强大的数据库代理,具有连接池、读写分离、负载均衡、故障切换、SQL路由、多协议支持、可扩展性、安全性、监控和日志以及易于配置和管理等特性。具备轻量、高性能(千亿级数据处理能力)等优势,功能完善,能满足中间件所需的绝大多数功能

相关链接
特性介绍
- 连接池:ProxySQL支持连接池,可以有效地管理数据库连接,减少连接和断开连接的开销。
- 读写分离:ProxySQL可以实现读写分离,将读操作和写操作分发到不同的数据库服务器上,提高系统的性能和可靠性。
- 负载均衡:ProxySQL支持负载均衡,可以将请求分发到多个数据库服务器上,实现负载均衡,提高系统的吞吐量和响应速度。
- 故障切换:ProxySQL支持故障切换,当某个数据库服务器出现故障时,可以自动将请求切换到其他可用的数据库服务器上,保证系统的可用性和稳定性。
- SQL路由:ProxySQL支持SQL路由,可以根据不同的SQL语句类型和条件,将请求分发到不同的数据库服务器上,实现精细化的路由控制。
- 多协议支持:ProxySQL支持多种数据库协议,如MySQL、PostgreSQL、Oracle等,可以轻松地与其他数据库系统集成。
- 可扩展性:ProxySQL支持横向扩展,可以通过添加更多的代理实例来扩展系统的处理能力。
- 安全性:ProxySQL支持SSL/TLS加密通信,可以保证数据传输的安全性。
- 监控和日志:ProxySQL提供了丰富的监控和日志功能,可以实时监控系统的运行状态和性能指标,方便进行故障排查和性能优化。
- 易于配置和管理:ProxySQL的配置和管理相对简单,可以通过配置文件或命令行工具进行配置和管理。
3.2 MaxScale
介绍:
MaxScale是MariaDB开发的一个MySQL数据中间件。它是一种数据库智能代理服务,旨在扩展MariaDB Server的高可用性、可伸缩性和安全性。同时,MaxScale通过将其与基础数据库基础架构分离,有助于简化应用程序开发。

相关链接
特性介绍
特性介绍基于10.3.1以上版本
- 读写分离:支持读写分离模块,能够解析SQL语句,从而把对应的请求转发到对应的服务器上。
- 自动切换:能够根据主从状态实现写库的自动切换。
- 插件支持:支持多种插件,如认证、协议、路由、监控和日志与过滤插件,这些插件可以根据需要进行配置和扩展。
- 高可用性:通过路由插件实现负载均衡的功能,同时监控插件可以对各个数据库服务器进行监控,以确保系统的可用性和稳定性。
- 安全性:提供简单的数据库防火墙功能,对SQL进行过滤和容错,以增强系统的安全性。
- 可扩展性:MaxScale的体系结构支持横向扩展,可以通过添加更多的节点来提高系统的处理能力和容量。
3.3 DBProxy
介绍:
DBProxy是一个位于前端应用与后端MySQL数据库之间的中间件,它使得应用程序员无需再关心读写分离、分表等与MySQL相关的细节,可以专注于编写业务逻辑,同时使得DBA的运维工作对前端应用透明,上下线DB前端应用无感知。
DBProxy是由美团DBA团队研发和维护的一个基于MySQL协议的数据中间层。它在奇虎360公司开源的Atlas基础上,优化了部分问题,并且添加了很多特性。而Atlas是在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。
相关链接
- 介绍:https://tech.meituan.com/2016/09/09/dbproxy-introduction.html
- Github:https://github.com/Meituan-Dianping/DBProxy/
特性介绍
- 读写分离:DBProxy可以将读操作和写操作分发到不同的数据库服务器上,以提高系统的性能和可靠性。
- 负载均衡:DBProxy可以将请求分发到多个数据库服务器上,实现负载均衡,提高系统的吞吐量和响应速度。
- 支持分表:DBProxy可以支持分表,对数据进行水平和垂直拆分,以减轻单一数据库的压力。
- IP过滤:DBProxy可以设置IP过滤,限制特定IP的访问权限,提高系统的安全性。
- sql语句黑名单:DBProxy可以设置SQL语句黑名单,禁止执行某些特定的SQL语句,以防止潜在的安全风险。
- DBA平滑下线DB:DBProxy可以实现在不影响前端应用的情况下,平滑地下线某个数据库服务器。
- 从库流量配置:DBProxy可以对从库的流量进行配置,实现主从流量分离,提高系统的可用性。
- 动态加载配置项:DBProxy可以动态加载配置项,方便用户根据实际需求进行灵活的配置和管理。
3.4 MyCat
介绍:
MyCat源于阿里巴巴的Cobar项目,国内开源软件爱好者对Cobar项目进行了改进,加入了许多新的功能在其中,并将其命名为MyCat。目前MyCAT社区活跃度很高,有很多公司采用了MyCat技术,涵盖银行、电信、电子商务、物流、移动应用、O2O的众多领域和公司。算是发展比较好的。
相关链接
特性介绍
- 分布式架构:采用分布式架构,可以水平扩展,支持大规模数据存储和处理。
- SQL解析和优化:对SQL进行解析和优化,可以提高查询性能和效率。
- 数据分片:支持数据分片,可以将大表水平分割为多个小表,提高数据访问的效率和可扩展性。
- 读写分离:支持读写分离,可以将读操作和写操作分发到不同的数据库服务器上,提高系统的性能和可靠性。
- 故障切换:支持故障切换,当某个数据库服务器出现故障时,可以自动将请求切换到其他可用的数据库服务器上,保证系统的可用性和稳定性。
- 监控和管理:MyCat提供丰富的监控和管理功能,可以实时监控系统的运行状态和性能指标,方便进行故障排查和性能优化。
3.5 TDDL
介绍:
TDDL是淘宝开发的一种基于Java语言的分布式数据库系统,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的jdbc datasource实现,具有线性水平扩展能力、海量数据存储访问能力、高性价比、数据存储平滑扩容、分库分表、透明读写分离、成熟的管控系统等特点。
相关链接
特性介绍
- 线性水平扩展能力:TDDL能够实时提升数据库处理能力,提高访问效率,峰值TPS可达150万+,轻松应对高并发的实时交易场景。
- 海量数据存储访问:企业客户随着业务的快速发展,业务数据增长迅猛,会产生超过单机数据库存储能力极限的数据,造成数据库容量瓶颈,限制业务发展。TDDL可以线性扩展存储空间,提供PB级存储能力,可广泛应用于工业制造、智能家居、车联网等超大规模数据存储访问场景。
- 高性价比数据库解决方案:初创型企业初期发展阶段技术积累相对比较薄弱,资金投入有限,业务发展快,数据库的稳定性风险高。TDDL能够利用普通服务器提供阿里巴巴双十一同等处理能力的高性价比国产数据库解决方案。
- 数据存储平滑扩容:当应用单机存储(MySQL)出现容量或性能瓶颈时,TDDL提供在线数据扩容功能(该功能需要结合阿里其它内部中间件使用)。
- 分库分表:TDDL支持分库分表功能,只需选择拆分键,就可以按照拆分键进行分库分表的访问。
- 透明读写分离:通过使用MySQL只读实例或者MySQL备机实现读写分离,帮助应用解决事务、只读实例或者备机挂掉、指定主备访问等细节问题,对应用无侵入。
- 数据存储平滑扩容:当出现数据存储容量和访问量瓶颈时,TDDL支持存储容量在线扩展,扩容无需改造应用,扩容进度支持可视化跟踪。
- 成熟的管控系统:通过数据库运维支撑系统保障数据库的正常有序运转。
4 总结
大致介绍了互联网场景下数据存储服务的需求,以及当下业内知名MySQL中间件的功能特性。
后面我们对这些数据库中间件一个个详细拆解下,看看他能解决我们哪些痛点。
数据库系列:业内主流MySQL数据中间件梳理的更多相关文章
- shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机
shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机 备份mysql中的库或者表 mysqldump 常用参数详解: -u 用户名 -p 密码 -h ...
- Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录
Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...
- MySQL 数据操作与查询笔记 • 【第1章 MySQL数据库基础】
全部章节 >>>> 本章目录 1.1 数据库简介 1.1.1 数据和数据库定义 1.1.2 数据库发展阶段 1.1.3 数据库系统组成 1.1.4 关系型数据库 1.2 M ...
- Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解
返回<8天掌握EF的Code First开发>总目录 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to ...
- 8天掌握EF的Code First开发系列之3 管理数据库创建,填充种子数据以及LINQ操作详解
本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LI ...
- 【数据库】MySql常用函数梳理
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5866388.html MySql常用函数梳理: 1:数学函数 使用格式:一般用于插入.修改语句中,直接 函数( ...
- MySQL数据表修复, 如何修复MySQL数据库(MyISAM / InnoDB)
常用的Mysql数据库修复方法有下面3种: 1. mysql原生SQL命令: repair 即执行REPAIR TABLE SQL语句 语法:REPAIR TABLE tablename[,table ...
- Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)
1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...
- 利用PHP实现登录与注册功能以及使用PHP读取mysql数据库——以表格形式显示数据
登录界面 <body><form action="login1.php" method="post"><div>用户名:&l ...
- mysql数据库通过二进制 -【恢复数据记录】
1.修改配置文件 vi /etc/my.cnf log-bin = binlog systemctl restart mysqld mysql -uroot -p123456 mysql> sh ...
随机推荐
- 一款国产开源 Web 防火墙神器!
随着开源 Web 框架和各种建站工具的兴起,搭建网站已经是一件成本非常低的事情,但是网站的安全性很少有人关注,以至于 WAF 这个品类也鲜为人知. 一.WAF 是什么? WAF 是 Web 应用防火墙 ...
- redhat7 team bonding 双网卡绑定 主备 负载均衡
team简介 team也被称为网络组,是将多个网卡聚合在一起,从而实现冗错和提高吞吐量.适用于redhat7.0以上版本,至多可支持8块网卡.team相对于之前的bonding技术,能提供更好的性能和 ...
- 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(2)
在前面随笔<循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(1)>中介绍了Mvvm 的开发,以及一些界面效果,本篇随笔继续深入探讨 ...
- 使用GPU训练Pytorch模型
如何使用GPU训练Pytorch模型 这两天的深度学习实验真实让人头疼,传说中的"猫狗大战",对模型的训练用CPU的话9h起步,12h是常态,大学生哪耗得起,因此查找资料搭建了GP ...
- 模拟.NET应用场景,综合应用反编译、第三方库调试、拦截、一库多版本兼容方案
免责声明 使用者本人对于传播和利用本公众号提供的信息所造成的任何直接或间接的后果和损失负全部责任.公众号及作者对于这些后果不承担任何责任.如果造成后果,请自行承担责任.谢谢! 大家好,我是沙漠尽头的狼 ...
- Navicat连接MySQL,出现2059 - authentication plugin 'caching_sha2_password'的解决方法
cmd(管理员)登录mysql执行如下 ALTER USER 'YOURUSERNAME'@'localhost' IDENTIFIED WITH mysql_native_password BY ' ...
- 其它——CGI,FastCGI,WSGI,uWSGI,uwsgi一文搞懂
文章目录 CGI, FastCGI, WSGI, uWSGI, uwsgi一文搞懂 一 CGI 二 FastCGI 三 WSGI 四 uWSGI 五 uwsgi CGI, FastCGI, WSGI, ...
- 其它——MyCat实现分库分表
文章目录 MyCat实现分库分表 一 开源数据库中间件-MyCat 二 MyCat简介 三 MyCat下载及安装 3.1 MySQL安装与启动 3.2使用docker启动多个数据库 3.3 MyCat ...
- 11g GI监听测试增加其他本地端口
11.2 GI中监听器的地址和端口信息被移到了 endpoints_listener.ora中. 使用 endpoints_listener.ora的情况下不应使用lsnrctl管理LISTENER, ...
- C#学习笔记--复杂数据类型、函数和结构体
C#基础 复杂数据类型 特点:多个数据变量地一个集合体,可以自己命名 种类:枚举.数组和结构体 枚举:整型常量的集合 数组:任意变量类型的顺序存储的数据集合 结构体:任意变量类型的数据组合成的数据块 ...