MySQL中间件方案盘点

 

首先数据库技术发展的基础还是在业务推动的背景下,能够实现相关的技术保障。业务需求的提升必然会在数据量,访问量等方面有更高的要求,而映射到数据库层面就不是简单的扩容和添加资源了,我们有时候更需要弹性,需要快速实现,需要更高的性能。这些都是摆在我们面前的问题,而不仅仅是DBA团队。

所以早期的很多数据库,从一主一从,一主多从的架构,逐步演变到了读写分离,分库分表,然后就是分布式。而同时从很多层面来说,行业内的方案真是百花齐放,记得前几天还和同事聊,说如果对比一下Oracle和MySQL,让我怎么评价,我说单纯评估单机的性能和功能,MySQL要落后很多,但是从成本,技术把控,定制层面来看,MySQL的简单反而成了其中的一个优势,在这个基础上,它有非常多的开源方案,这些让原本MySQL的应用变得非常丰富起来,你说MySQL能不能做企业级方案,你看看BAT的使用场景,还是能够经受住考验的,注意我在此处说的的使用场景,没有一刀切的场景。

回到正题,MySQL的中间件其实有很多,官方的开源的,我们就来简单来说说,行业里还有很多的方案,有些还没有做调研,就没在文中及时推出来。

先来说说MySQL中间件能够做什么?要回答这个问题,我们可以反向问一个问题,随着业务需求的变化,数据库会有哪些瓶颈,比如:

1.单台服务器无法承载已有的压力

2.数据库单表容量越来越大

3.大量的读写需求无法平衡

4.资源如果扩容,应用改动较大

5. 资源的负载没法拆分,或者不易拆分

所以市面上的很多数据库中间件主要是分担了其中的大部分或者一部分的功能点。

沃趣科技的董红禹总结的这个图不错,我直接拿过来了。

我们基本会讨论下面的几个中间件,有些不在上面的图中,会额外补充一些。

MySQL Fabric, MySQL Router,MySQL Proxy

Fabric能提供MySQL的HA和Sharding方案,MySQL Router是一个轻量级的中间件用来实现高可用和扩展性的功能。MySQL Fabric在驱动层面可以实现高可用和扩展功能,需要应用端来适配改造。而MySQL Router中间件的访问协议与MySQL一致,应用不需要做任何的修改,在MySQL官方近期推出的InnoDB Cluster中MySQL Router是作为“三驾马车”来使用的。而落寞的是MySQL proxy,目前已经无法下载了,自从推出以来主要就是测试版本,所以在很多功能上多多少少还是有些问题。

360 Atlas

这是国内360公司推出的一个中间件方案,github地址为:https://github.com/Qihoo360/Atlas

从github的情况来看,星级蛮高,最新的维护是在4天前。它的设计是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。

Mycat

这也是国内的一个中间件方案,业内比较火,官方链接是:http://www.mycat.io/

还有一本Mycat相关的书《分布式数据库架构及企业实践——基于Mycat中间件》

根据我的了解,他主要是支持MySQL,同时也支持其它的数据库,比如Oracle等等,也是一波好友一起来做得这个事情。

我比较喜欢它的一个原因是因为开源,而且源代码是Java.

oneproxy

这是前支付宝的架构师楼总开发,目前支持多中数据库,基于MySQL官方 的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件,专注在性能和稳定性上,是商业付费的。

DRDS

阿里分布式关系型数据库服务(Distribute Relational Database Service,简称DRDS)是一种水平拆分、可平滑扩缩容、读写分离的在线分布式数据库服务。前身为淘宝 TDDL,再之前还有Cobar,已经不维护了。

该图来自:http://blog.csdn.net/jerome_s/article/details/53966569

Vitess

谷歌开发的数据库中间件,集群基于 ZooKeeper 管理,通过 RPC 方式进行数据处理官方网站很简介: http://vitess.io/ 打开就是一个大V

Maxscale

MaxScale是mariadb研发的,目前版本不支持分库分表,在其它几个方面都很不错。github链接为:https://github.com/mariadb-corporation/MaxScale

时间: 2024-08-02 03:13:53

MySQL中间件方案盘点的相关文章

开源分布式MySQL中间件探究与应用

  11月6日,由DBA+社群主办的数据库技术沙龙在广州成功举办.本次沙龙特邀新炬网络开源数据库专家李季鹏到场演讲分享,主导运营商去IOE技术落地的他,精通MySQL数据库及相关解决方案,对MySQL集群架构.高可用方案有深入研究.在本次沙龙中,他带来了<开源分布式MySQL中间件探究与应用>这一主题分享.在"分布式MySQL中间件选择"的问题上,李季鹏表示不建议直接把数据切分作为首选项,也不必一味追求功能齐全的重量级产品.    分享概览    数据库中间件的介绍及引入

mysql分区方案的研究

   笔者觉得,分库分表确实好的.但是,动不动搞分库分表,太麻烦了.分库分表虽然是提高数据库性能的常规办法,但是太麻烦了.所以,尝试研究mysql的分区到底如何.  之前写过一篇文章,http://www.cnblogs.com/wangtao_20/p/7115962.html 讨论过订单表的分库分表,折腾起来工作量挺大的,需要多少技术去折腾.做过的人才知道有多麻烦      要按照什么字段切分,切分数据后,要迁移数据;分库分表后,会涉及到跨库.跨表查询,为了解决查询问题,又得用其他方案来弥补

mysql备份方案

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://kerry.blog.51cto.com/172631/158476 数据库备份方案 一.主从同步 可以参考http://kerry.blog.51cto.com/172631/110206 二.增量备份: 每天中午12点和晚上12点做一次全备,每隔一小时备份binlog,也就是增量备份,具体操作如下: Linux下开启binlog /etc/my.cnf中的mysqld部分加入

帮忙选择一种中间件方案

问题描述 公司以前用C++开发的一个本地实时数据库,目前想将其改成SOA架构的方案,拟采用中间件作为解决方案,考察了一下觉得ICE不错,但是发现商用License挺贵的,目前考虑是不是可以用.netremoting来实现,各位给点建议.要求:1.需要实现高速数据转发,TCP方式,不可以用SOAP,XML来传输数据.2.客户端接口需要至少C++和C#两种.3.每个系统有1个服务端,20来个客户端.4.费用越低越好.

mysql 中间件-mysql Router有什么用了,用来作甚了

问题描述 mysql Router有什么用了,用来作甚了 mysql Router的通俗解释,他有什么用了,用来干什么了,求各位大神指点 解决方案 http://www.tuicool.com/articles/fQjyUfy

MySQL性能优化——易实现的MySQL优化方案汇总

一.索引优化 1.合理使用索引,在经常查询而不经常增删改操作的字段加索引,一个表上的索引不应该超过6个. 2.Order by与group by后应直接使用字段,而且字段应该是索引字段. 3.索引字段长度应较短而长度固定. 4.索引字段重复不能过多. 5.Hash索引与BTree索引区别(MyISAM与InnoDB不支持Hash索引) (1).BTree索引使用多路搜索树的数据结构,可以减少定位的中间过程:综合效率较高,默认使用的索引. (2).Hash索引使用Hash算法构建索引:精确的等值查

多环境下python处理mysql的方案

多环境下折腾python-mysql 最近在折腾写一个测试用例调度执行的脚本,与mysql会有一定的交互.在Mac下面开发测试都OK,但是移植到服务器上,发现有太多的问题. 在服务器上Centos 5 上安装MySQLdb碰到这种坑,折腾了一下午.当然,Mysqldb应该是python比较常见的外部lib,像django项目就是使用MySQLdb. 简单总结下,MySQLdb是使用C模块来链接Mysql ,所有会需要有下面几个先决条件:     c 编译器    python 的开发库及其头文件

Linux安装PHP的PDO MySQL扩展方案

PDO MySQL简介 PHP Data Objects(PDO)扩展为 PHP 访问数据库定义了一个轻量级的一致接口.实现 PDO 接口的每个数据库驱动可以公开具体数据库的特性作为标准扩展功能.注意利用 PDO 扩展自身并不能实现任何数据库功能:必须使用一个具体数据库的 PDO 驱动来访问数据库服务.记录安装 PDO MySQL 扩展过程. PDO MySQL安装准备 PDO_MYSQL-1.0.2.tgz 下载地址:http://pecl.php.net/get/PDO_MYSQL-1.0.

高手整理的PHP+MySQL安全方案

1 不要依赖于服务器端的magic_quotes,虽然他们默认都是打开的(magic_quotes_gpc) 将下面两个关闭 ini_set("magic_quotes_runtime", 0); ini_set("magic_quotes_sybase", 0); 全部自己手工对所有变量添加magic_quotes,就是添加addslashes 代码如下: function stripslashes_deep($value){     $value = is_ar