mycat的介绍及应用场景
Mycat 引言
如果我有一个32核心的服务器,我就可以实现1个亿的数据分片,我有32核心的服务器么?没有,所以我至今无法实现1个亿的数据库分片。---Mycat's Plan
背景
随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上。这时集中式数据库系统表现出它的不足:
(1)集中式处理,势必造成性能瓶颈;
(2)应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性不高;
(3)集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差。
在这种形势下,集中式数据库将向分布式数据库发展。
目标
低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
MyCAT概述
详细介绍请参考官网:http://mycat.io/
MyCAT是一款由阿里Cobar演变而来的用于支持数据库==读写分离、分表分库==的分布式中间件。MyCAT可不但支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库,同时也支持MongoDB等非关系型数据库。基础架构如下:
MyCAT原理
MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。
MyCAT功能
1.数据库分库分表
通过某种条件,将同一数据库中的数据分散的存储到多个数据库中,已达到分散单台数据库设备负载的效果,这就是数据库分片。
A.水平拆分:
水平分库指的是将一个数据量庞大的数据表分别保存到不同的数据库里,即:现在有多个数据库,这个库保存同样结构的数据表,这些数据根据MyCat的算法,分别保存到符合自身要求的数据库的数据表中。
水平拆分基本架构如下:
例子1.可根据id取模进行水平拆分
目前常用的分片规则有:
求模分库:mod-long
范围分库:auto-sharding-long
Hash分库:hash-int
月分库:sharding-by-month
ER模型分库:childTable
自定义分库:CustomRule(该方式需要自己实现分库算法)
B. 垂直拆分
不同的表切分到不同的数据库(主机)上,这就是垂直拆分。
2.读写分离
定义:
为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改查业务的生产服务器;第二台数据库服务器,仅仅接收来自第一台服务器的备份数据。一般来说,为了配置方便,以及稳定性,这两台数据库服务器,都用的是相同的配置。
在实际运行中,第一台数据库服务器的压力,远远大于第二台数据库服务器。因此,很多人希望合理利用第二台数据库服务器的空闲资源。
从数据库的基本业务来看,数据库的操作无非就是增删改查这4个操作。但对于“增删改”这三个操作,如果是双机热备的环境中做,一台机器做了这三个操作的某一个之后,需要立即将这个操作,同步到另一台服务器上。出于这个原因,第二台备用的服务器,就只做了查询操作。进一步,为了降低第一台服务器的压力,干脆就把查询操作全部丢给第二台数据库服务器去做,第一台数据库服务器就只做增删改了。
3.黑白名单限制
在1.5版本,用户权限更全面,并且还有ip白名单和sql黑名单的功能。
顾名思义,这个就是关于防火墙的设置,也就是在网络层对请求的地址进行限制,主要是从安全角度来保证Mycat不被匿名IP进行访问
<firewall>
<whitehost>
<host host="127.0.0.1" user="mycat"/>
<host host="127.0.0.2" user="mycat"/>
</whitehost>
<blacklist check="false">
</blacklist>
</firewall>
设置很简单,很容易理解,只要设置了白名单,表示开启了防火墙,只有白名单的连接才可以进行连接。
3、使用场景
- 单纯读写分离,此时配置最为简单,支持读写分离、主从切换
- 分库分表,对记录超过1000万的表进行水平拆分,最大支持1000亿单表水平拆分
- 多租户应用,每个应用一个数据库,但程序只需连接MyCAT,程序不改变,实现多租户化
- 报表系统,借住MyCAT分表能力,处理大规模的报表统计
- 替代Hbase,分析大数据
- 海量实时数据查询
4.MYCAT监控
- 支持对Mycat、Mysql性能监控
- 支持对Mycat的JVM内存提供监控服务
- 支持对线程的监控
- 支持对操作系统的CPU、内存、磁盘、网络的监控