这段时间团队在梳理mysql使用上的一些痛点(分库分表、读写分离、权限控制、监控告警、日志审计等),也调研了业内一些mysql中间件的实现,这里把对问题域的思考,以及常见中间件整理沉淀一下

一、问题域(业务自己搭mysql痛点是什么?目标是什么?)

  痛点 目标
连接管理 客户端连接使用不受限制,没有复用,业务之间互相影响(如1个服务写得有问题就可把mysql连接数撑爆) 归拢到Proxy统一管理,提供连接池、连接数限制、重连、超时断开等功能
读写分离 大请求量场景,需业务判断主备路由 自动读写分离,也是mysql中间件基础能力
负载均衡 大请求量场景,需业务做备机负载均衡 自动负载均衡,也是mysql中间件基础能力
分库分表
sharding
大数据量场景,需业务处理分库分表逻辑 屏蔽分库分表细节,客户端看来就是操作单库表。也是mysql中间件核心能力,不同中间件实现程度也不同,对sql语句也会有些限制(必须带分表字段,不支持跨库join等)
故障切换 主/备发生宕机等故障,需业务来处理故障切换 屏蔽后端DB故障问题,自动故障切换
权限 一方面账号权限放太开,没有最小化权限;另一方面机器迁移等都需手动申请权限较麻烦 通过user/pwds/ip等做权限控制,最小化权限。机器迁移自动权限扩缩容。
安全 需业务自己处理sql注入,核心数据加密等问题 Proxy加一层保护,像sql注入,sql黑名单(如sleep/drop),数据加密等
日志审计 Mysql数据被修改了,找不到是被谁修改的 提供便捷的日志审计,日志流控和动态变更,方便定位查询
监控告警 需业务根据自己需求搭建监控系统 提供连接数/慢查询数/Sql延迟/Sql语句统计/DB负载等监控告警
事务 部分业务会使用事务能力 支持单机/分布式事务。事务是mysql中间件最难做的点,单机事务基本中间件都能支持到,分布式事务不同中间件实现程度也不同
缓存 有DB数据缓存的场景,都需业务单独来做 Proxy提供一些通用可配置的缓存策略(如基于查询、用户、schema等)

参考ProxySql的中间件对比:https://proxysql.com/compare

二、常用mysql中间件列表

ProxySQL #Percona(轻量,功能较齐全)
MaxScale #MariaDB(商业)
Atlas #360开源(较热门)
DBProxy #美团在360Atlas上修改后开源
Oceanus #58同城
OneProxy #平民软件楼方鑫(商业)
KingShard #原Atlas作者离职后使用go开发
MyCat #社区推广(社区较活跃,改进版Cobar)
TDDL #阿里巴巴开源(停滞)
Cobar #阿里巴巴开源(停滞)
Fabric #Oracle官方产品
Heisenberg #百度员工个人编写
Vitess #Youtube(较复杂)

三、常用mysql中间件简介

ProxySQL
* ProxySQL是用C++开发的一款轻量级产品,但性能很好(据测试,能处理千亿级的数据),功能也足够,能满足中间件所需的绝大多数功能
* 官网:http://www.proxysql.com/
* Github:https://github.com/sysown/proxysql/

MaxScale
* MaxScale是MariaDB开发的一个数据库智能代理服务,允许根据数据库SQL语句将请求转向目标一个到多个服务器,可设定各种复杂程度的转向规则
* 官网:https://mariadb.com/
* Github:https://github.com/mariadb-corporation/MaxScale/

Atlas
* Atlas是由360Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性
* Github:https://github.com/Qihoo360/Atlas

DBProxy
* DBProxy是由美团点评公司技术工程部DBA团队(北京)开发维护的一个基于MySQL协议的数据中间层。它在奇虎360公司开源的Atlas基础上,修改了部分bug,并且添加了很多特性
* Github:https://github.com/Meituan-Dianping/DBProxy/

OneProxy
* 数据库界大牛,前支付宝数据库团队领导楼总开发,基于mysql官方的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件,楼总舍去了一些功能点,专注在性能和稳定性上
* 官网:http://www.onexsoft.com/
* Github:https://github.com/onexsoft

Oceanus
* Oceanus致力于打造一个功能简单、可依赖、易于上手、易于扩展、易于集成的解决方案,甚至是平台化系统。拥抱开源,提供各类插件机制集成其他开源项目,新手可以在几分钟内上手编程,分库分表逻辑不再与业务紧密耦合,扩容有标准模式,减少意外错误的发生
* Github:https://github.com/58code/Oceanus

KingShard
* Kingshard是前360Atlas中间件开发团队的陈菲利用业务时间用go语言开发的,目前参与开发的人员有3个左右, 目前来看还不是成熟可以使用的产品,需要在不断完善。
* Github:https://github.com/flike/kingshard

MyCat
* 社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活跃度很高,目前已经有一些公司在使用MyCAT。总体来说支持度比较高,也会一直维护下去
* 官网:http://www.mycat.io/
* Github:https://github.com/MyCATApache

TDDL
* 淘宝根据自己的业务特点开发了TDDL框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的jdbc datasource实现,具有主备,读写分离,动态数据库配置等功能。
* Github:https://github.com/alibaba/tb_tddl

Cobar
* 阿里巴巴B2B开发的关系型分布式系统,管理将近3000个MySQL实例。 在阿里经受住了考验,后面由于作者的走开的原因cobar没有人维护了,阿里也开发了tddl替代cobar
* Github:https://github.com/alibaba/cobar

Fabric
* Fabric是Oracle公司开发的既有分片又有读写分离的MySQL集群管理工具。帮我们做了很多运维相关动作,方便了使用
* 官网:http://www.fabfile.org/ 
* Github:https://github.com/fabric/fabric

Heisenberg
* 分库分表与应用脱离,分库表如同使用单库表一样减少db连接数压力,热重启配置,可水平扩容,遵守Mysql原生协议,读写分离,无语言限制,mysqlclient,c,java等都可以使用 Heisenberg服务器通过管理命令可以查看
* Github:https://github.com/brucexx/heisenberg

Vitess 
* Vitess是 Youtube开源的数据库扩展及高可用方案,已经用于生产环境,功能强大,但是构架复杂,部署及运维成本较高
* 官网:https://vitess.io/
* Github:https://github.com/vitessio/vitess

谈下mysql中间件(问题域、业内组件)相关推荐

  1. mysql kingshard_浅谈 Kingshard MySQL 中间件

    实现功能: 可以实现MySQL的分表,以及分表之后的增加,删除,修改,查询等MySQL的一系列操作.可以扩展MySQL的主从架构,方便MySQL架构的分布式扩展. 实验测试架构为在两个MASTER上面 ...

  2. mysql主从复制中间件_linux下mysql主从复制(第二篇读写分离) mycat 中间件

    linux下mysql主从复制(第二篇读写分离) mycat 中间件 接着上篇文档补全,mysql 读写分离,在上篇文章案例下准备好Mycat-server-1.4-release-201510192 ...

  3. MySQL 中间件汇总比较

    360 Atlas 较为活跃,Atlas 是由 360 Web平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目.它是在mysql-proxy 0.8.2版本的基础上,对其进行了优 ...

  4. SpringBoot下MySQL的读写分离

    首页 博客 专栏·视频 下载 论坛 问答 代码 直播 能力认证 高校 会员中心 收藏 动态 消息 创作中心 02-下篇-SpringBoot下MySQL的读写分离 dusuanyun 2018-07- ...

  5. 运维企业专题(11)RHCS高可用集群下MySql数据库与共享磁盘(单点写入、多点写入)的设置

    实验环境 主机名 IP 服务 server1 172.25.6.1 ricci,luci, iscsi,mysql-server server2 172.25.6.2 ricci,iscsi,mysq ...

  6. psql where里有自定义函数慢_阿里P8架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结...

    MySQL优化概述 MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈. CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候. 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应 ...

  7. 浅谈Django的中间件与Python的装饰器

    浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...

  8. linux mysql数据库优化_MySQL_Linux下MySQL数据库性能调优方法,以下的环境具备一定的代表性 - phpStudy...

    Linux下MySQL数据库性能调优方法 以下的环境具备一定的代表性,可以说是中小企业一般配置和工作环境.希望通过本文能让大家理解Linux下MySQL数据库性能调优方法. 硬件准备环境: 硬盘: 1 ...

  9. mysql中间件研究(Atlas,cobar,TDDL)

    mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差.下面介绍几款能代替其的mysql开源中间件产品,Atlas ...

最新文章

  1. 《大数据、小数据、无数据:网络世界的数据学术》一 导读
  2. nginx服务器远程无法访问,客户端连接Nginx偶尔提示无法连接到远程服务器
  3. 【收藏】Win10:路径长度超过260个字符
  4. Java中加二怎么打_Java(一)(二)
  5. C++分文件的编写函数
  6. Rad Controls_Q2_2006 注册机
  7. ssm-学子商城-项目第五天
  8. 万嘉MOV格式转换器v1.00.102官方免费版
  9. Java和Android笔试题
  10. [中文/英文]VC6 sp6补丁下载|VS6 sp6补丁下载 [防VC6link死机]
  11. Photoshop - RGB 转 CMYK 如何不失真?
  12. 对话李春龙:如何用Kubernetes管理有状态服务
  13. jetson tx2平台调试EC20 4G模块
  14. LINUXmint18.2添加国内源以及安装各种流行软件(网易云音乐,搜狗,谷歌浏览器,virtualbox虚拟机)
  15. 微软IE网络霸业十年回眸
  16. 解决myeclipse中 保存代码时resetting selection耗时操作
  17. 利用c++进行程序词法分析
  18. App Widget
  19. linux搜索文件内容中关键字,linux系统搜索文件中关键字的位置
  20. java magic number_java的class文件的magic number, cafebabe

热门文章

  1. 随记 VUE(实战)
  2. 系统错误:下列引导或系统启动驱动程序无法加载: HWiNFO32
  3. 口琴简谱_卡农(晓月版)_C大调
  4. 应用软件-财务管理系统开发
  5. 不可不知的十个职场潜规则
  6. Linux下的无名管道
  7. 计算机数值数据的编码,数字数据编码
  8. Vue2.x项目SPA的SEO解决方案(预渲染-Prerendering)
  9. 新闻api接口 关键字检索最新新闻动态
  10. python程序设计夏敏捷答案_python程序设计夏敏捷答案