MyCat初始

什么是MyCat?

myCat是数据库中间层,可以完成在高并发高吞吐量的情况下,对业务分库分表的操作,以提升数据库的整体性能,保证数据库不会成为业务在不断发展的情况下,成为瓶颈。

对于DBA:MySql是有两部分组成的,一个是MySql的Server层,另外一个就是MySql的存储引擎层。那MyCat就可以看做MySQL Server层,而MySQL可以看成存储引擎层,像MySql的server层一样,MyCat是不会存储数据的,实际的数据是存储在MySql中,或者其他可以通过MyCat访问的关系型数据库、非关系型数据库。

对于研发人员:MyCat几乎是透明的,什么意思呢?就是研发人员根本意识不到使用的是Mycat还是MySql,研发人员可以认为MyCat就是MySql的实例,忽略MyCat的存在。但是,之所以说是几乎透明的,是因为MyCat对使用的Sql有一些限制,如果使用到了MyCat所不支持的Sql语句的话,那么还是要对原程序的代码进行修改。

对于架构师:MyCat是一个十分强大的数据库中间层产品,数据库中间层产品可以实现对线上存在的、运营了很长时间的系统进行数据库的水平扩展(水平扩展分为两种方式,垂直拆分、水平拆分,即常说的分库分表),以及在不对原程序做任何修改的前提下,对后端数据库做读写分离,对多读数据库做负载均衡。对前端应用隐藏后端数据库的存储逻辑,比如要在程序中进行实现的话,那么每一个应用程序都要单独来实现读写分离的逻辑,而使用的是数据库中间层的话,只需要在中间层实现读写分离逻辑就可以了

什么是数据库中间层

在这里插入图片描述
数据库中间层是位于前端应用与后端数据库中间,数据库中间层产品实际上是有很多的,比如OneProxy、MaxScale

MyCat的作用

1.对异构数据库的访问支持

在这里插入图片描述

MyCat不但原生支持MySql,并且还可以使用Jdbc来访问其他的关系型数据库,像微软的MSSQL、Oracle都可以支持。 同时,mycat还可以支持访问像mongo这样的数据库,主要原因是MyCat是通过java来开发的,所以凡是可以使用jdbc来连接的数据库、非关系型数据库,都可以使用MyCat来访问。

2.实现主从数据库的读写分离及多从读数据库的负载均衡

在这里插入图片描述

3.读写分离时支持写DB高可用

在这里插入图片描述

当mycat监控到主数据库服务器宕机时候,就会把主数据库服务器踢出MySql集群,是不是听上去很不错?但是注意这种情况只适用于一主一从集群,这种情况,把写数据库踢出之后,会把写的请求全部转移到从上,这时候从就会进行读写操作。

为什么只适用一主一从的情况呢?因为如果数据库是一主多从的情况下,写的操作会选择到一台从书库上进行读写,但是其它从并不会对这个被选中的从重新进行数据同步,也就是说在整个数据库集群中,除了读写请求的服务器之外,其它的数据库服务器都变成了不可用。
要解决一主多从情况下的,高可用,有什么办法?使用MySQL的主从复制管理的工具,像MHA、3M这种MySQL主从复制高可用工具,都可以实现一主多从情况下,MySql的高可用。再加上MyCat,配置时候我们要把MyCat的主服务器配置成3M、MHA写的虚拟ip就可以了,同时,不要再开启MyCat的高可用功能了。

4.对业务数据库进行垂直切分

在这里插入图片描述
我们也可以直接使用前端应用访问后端的三个数据库,不过引入MyCat的好处,是可以使用MyCat的逻辑库的功能,把后端三组DB虚拟成一个db,并且还命名成一个名,可以最大限度的减少对存在应用的修改。

5.对业务数据库进行水平切分

在这里插入图片描述
一般来说,水平切分是在垂直切分基础上来讲的,当垂直切分后的某一组db的写负载继续增长,当达到一定量后,这组db的masterDB也会达到性能的瓶颈。通常情况下,我们在进行垂直切分时候,把业务之间不存在依赖关系的表,都进行切分到不同库中了,因此这时由于业务的依赖关系,已经不能再对这组db进行切分了,这时候能做的就是对这组db来进行水平切分。

6.前端应用访问到后端数据库的连接的数量

在这里插入图片描述

每一个建立到数据库的连接都会占用数据库的资源,所以一个数据库服务器可以接收到同时连接数量是有一定的限制的,数量在MySql是通过MaxConnectionCount参数来控制的,当连接数占满后,所有的新建连接都不能再访问数据库了,这就会对应用的稳定产生巨大的影响。
在没有数据库中间层的情况下,各个应用都会自己建立并管理到数据库的连接,通常情况下,每当大促的我们会大量的增加前端应用的数量,这就会成倍的增加对数据库的连接数,而我们又无法对数据库的连接数进行管理,所以很容易出现连接数超过最大连接数的情况,这在大促中是很严重的情况。
而我们引入了数据库中间层后,在mycat中建立一个公共的连接池,所有的应用都会统一的通过连接池获取数据库的连接,从而控制同时连接到后数据库的数量,会保证应用更加的稳定

为什么要学习MyCat呢?

首先,Mycat是基于阿里的Cobar产品开发的,阿里再熟悉不过了,每年的双11都在创造销售的神话,而在这些销售神话的背后,数据库的性能、稳定性是十分重要的。Cobar这个产品在阿里已经被部署到了3000台以上的实例中,并且平均每天可以处理50亿次sql请求,可以说其性能很好的接受了实践的检验。而MyCat是在Cobar系统之上,进行二次开发,解决了Cobar中所存在的一些问题,其性能和稳定性可以得到很好的保证。

其次,MyCat基于Java开发,并且完全开源,可以运行在Linux或者Windows平台之上,也可以很方便的根据我们的实际业务,再次进行自行的开发,这在其它的数据库中间层产品中,都是做不到的。

最后,MyCat应用已经十分的广泛了,下面这张图就是官网中所提供的一些典型的案例的公司,目前MyCat已经被应用到了多个行业的多个项目中
在这里插入图片描述

从单体数据库架构,到使用MyCat后的数据库架构

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值