谈下mysql中间件(问题域、业内组件)

这段时间团队在梳理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

当然,团队目前使用CDB和TDSQL,一些运营能力和分库分表能力已得到解决,但是暴露的一些连接管理、权限管理、监控告警、数据安全等问题还是需要解决

二、常用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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信音视频小程序

教你从0到1搭建小程序音视频

升级微信到最新版本,发现页卡 => 小程序 => 搜索“腾讯视频云”,即可打开小程序Demo:

1.2K30
来自专栏北京马哥教育

小技巧:显示数据库查询耗时,改善开发者习惯

我会分享一系列在我开发生涯中积累的有用且容易实现的小技巧,本文是此系列的第一篇。 ---- 很多原因都可能导致网站运行缓慢,但这其中最常见的就是在数据库查询耗时...

30560
来自专栏美团技术团队

分布式会话跟踪系统架构设计与实践

美团点评技术沙龙由美团点评技术团队主办,每月一期。每期沙龙邀请美团点评及其它互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域。 目前沙龙会分别在北...

45060
来自专栏林德熙的博客

使用 RetroShare 分享资源 下载安装注册添加好友分享文件搜索资源获得资源

本文告诉大家如何使用 RetroShare 来分享资源。因为 RetroShare 是一个 p2p 分享的工具,所以他比现在很多云盘都好用,在网上,很多大神说可...

56510
来自专栏北京马哥教育

原创投稿 | Linux操作系统下的文件系统

? 乐乐快跑,马哥门徒,马哥教育原创作者联盟成员,专注于运维领域知识分享,强于知识体系构建。 操作系统我们粗略的可以分为两层即内核层和shell层,内核层下面...

38280
来自专栏王清培的专栏

RabbitMQ 高可用集群搭建及电商平台使用经验总结

面向EDA(事件驱动架构)的方式来设计你的消息 AMQP routing key的设计 RabbitMQ cluster搭建 Mirror queue poli...

781100
来自专栏BestSDK

英特尔曝出重大安全漏洞:亚马逊、微软等众多云服务受影响

该漏洞存在于英特尔的 x86 硬件之中,无法通过微码升级来解决,必须在系统层面通过安装软件、或者购买没有设计缺陷的新处理器来解决——所以包括苹果 64 位 ma...

29530
来自专栏王亚昌的专栏

vmstat命令详解与举例

[root@localhost ~]# vmstat -n 3       (每个3秒刷新一次) procs -----------memory-------...

9510
来自专栏YG小书屋

logstash 重复消费kafka问题

前两天业务方突然找到我说当天索引ES查询很慢,原来毫秒级的查询现在竟然要20s,让我处理下。我看了下索引大小,原来是1分片6g左右,今天突然就变成了1分片32g...

41430
来自专栏北京马哥教育

手把手教你无代码基础实现Linux运维管理平台

老早之前就想做一个运维管理平台的项目了,但是一直没沉下来去做,上半年的时候毕设选择了这个课题,想着逼自己一把,不管做出来的怎么样,先把它搞起来..... dj...

37050

扫码关注云+社区

领取腾讯云代金券