什么是Mycat?为什么要使用MyCat?

官网:www.mycat.org.cn

我们现在普遍的Java应用程序都是直接连接了MySQL 进行读写操作,也就是我们在Java中的配置文件等定义了MySQL的数据源,直接连接到了我们的MySQL服务,但是当某些情况下我们可能需要用到了多个数据库,这个时候我们可能就需要配多个数据源去连接我们的多个数据库,这个时候我们进行sql操作的时候就会很麻烦,因为Java与数据库有了一个紧密的耦合度,但是如果我们在Java应用程序与MySQL中间使用了mycat,我们只需要访问mycat就可以了,至于数据源等问题,mycat会直接帮我们搞定。
再来说一下高并发,我们都知道MySQL数据库实际上在数据查询上是有一个瓶颈的,当我们的数据太多的时候,有高并发请求的时候,对我们MySQL的压力是非常大的,这个时候我们可能需要有多个服务器对数据库进行读写分离,以及对数据库进行集群,这个时候我们的sql语句要进行分类,哪个sql语句要访问哪个数据库,这个时候只要交给mycat就可以了。
一、Mycat原理:
Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。这种方式把数据库的分布式从代码中解耦出来,程序员察觉不出来后台使用 Mycat 还是 MySQL。
二、Mycat 能干什么?
1、读写分离
2、数据分片
a、垂直拆分(分库)
b、水平拆分(分表)
c、垂直+水平(分库分表) 
3、多数据源整合
比如像一些非常重要的订单、账单等数据,我们可以让mycat同时写入到多个数据库,保证数据的高可靠性。也可以让mycat对一些数据进行多个主从的复制,有多个主从数据进行同步,当有一个主机坠机的时候,另外的主机进行切换保障数据安全。另外我们可以用mycat连接到Nosql,当我们有一些非业务性的数据比如日志等的数据储存到Nosql中。
三、数据库中间件对比:
1、Cobar:属于阿里B2B事业群,始于2008年,在阿里服役3年多,接管3000+个MySQL数据库的schema,集群日处理在线SQL请求50亿次以上。由于Cobar发起人的离职,Cobar停止维护。
2、Mycat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新的功能在其中。青出于蓝而胜于蓝。
3、OneProxy基于MySQL官方的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件。舍弃了一些功能,专注在性能和稳定性上。
4、kingshard由小团队用go语言开发,还需要发展,需要不断完善。
5、Vitess是Youtube生产在使用,架构很复杂。不支持MySQL原生协议,使用需要大量改造成本。
6、Atlas是360团队基于mysql proxy改写,功能还需完善,高并发下不稳定。
7、MaxScale是mariadb(MySQL原作者维护的一个版本) 研发的中间件。
8、MySQLRoute是MySQL官方Oracle公司发布的中间件 。