Mycat 中间件概述、原理
Mycat 概述
一、MyCAT 是数据库中间件
中间件: 是一类连接软件组件和应用的计算机软件,以便于软件各部件之间的沟通。例如:Tomcat、web中间件。
连接 java程序 和 mysql集群。
二、为什么要用 Mycat
java 应用 ———————— mysql 数据库
通过 java 应用程序操作数据库,查询数据,写入数据。完整整个系统存储功能。
提出问题:
1、java与数据库紧耦合,如何解决 数据库宕机继续提供访问?
2、java 程序 对外提供访问,高访问量高并发。如何解决 数据库高并发量?
3、读写请求数据不一致。如何解决 数据库主从请求分离?
解决方法:
由 Mycat 中间件为 java 应用提供访问,Java应用程序只需要通过 Mycat 就能获取数据。
所有的 后端 mysql 数据库可以自由灵活的进行扩充配置。
java ———— Mycat ———— mysql 数据库(写)
mysql 数据库(读) ,mysql数据库(读)
三、各种数据库 中间件
-
Mycat 是开源社区基于 阿里 Cobar 基础上进行二次开发,解决 cobar 存在的问题,并且加入了许多新的功能。
-
Oneproxy 基于 Mysql 官方的 proxy思想利用 c 进行开发的。Oneproxy 是一款商用收费的中间件。舍弃了一些功能,专注在性能和稳定性上。
-
Vitess 是 YOUtube生产,架构非常复杂,不支持 MySQL原生协议。需要二开
-
Atlas 是 360 团队基于 mysql proxy 改写,功能还算完善,但是并发不够稳定。
-
MaxScale 是 mariadb(MySQL原作者维护的一个版本) 研发的中间件。
-
MySQLRoute 是 mysql 官网 Oracle 公司发布的中间件。
四、Mycat 提供的功能
①、读写分离
由 Mycat 决定 读写请求 具体分给后端哪一台 数据库。在后端数据库实现主从复制。
②、双主双从
后端数据库可以搭建 双主架构,实现后端数据库的高可用。
③、数据分片
-
垂直拆分(分库)
- 将一个数据库分成 多个模块,每个模块里包含着对应功能的表。
-
水平拆分(分表)
- 将一个达到瓶颈的表,按照时间年限划分,19年之前一个表,19年之后一个表。
-
垂直+水平(企业使用)
- mycat 将所有分布式数据库 进行封装,将对应的请求按照分片规则,分到各个数据库里面。
④、多数据源整合
后端可以是 多个 不同种类 的 数据库 的集合。
可以是 数据库集群,也可以是 主从mysql,也可以是 NoSQL 数据库集群
Mycat 工作原理
原理
- Mycat 的原理中最重要的一个 动词 “拦截”。Mycat 可以拦截用户发送过来的 SQL 语句。
- 首先对 SQL 语句进行特定的分析:分片分析、路由分析、读写分离分析、缓存分析等。
- 然后将此 SQL 发往后端的真实数据库,并将返回的结果进行适当的处理,再发送给用户。
Mycat 拦截图过程分析:
-
orders 订表中 包含各个城市的 订单信息。可以通过分库分表,将 一个库的 一个表(orders),分成三个库,三个表。也就是将各个城市的信息,拆分成三个表,三个库,来进行存储。
-
当查询 订单 “zhejiang” 的请求 发送到 Mycat,由 Mycat 的各种功能解析,然后发现其结果在 后端 DB1 数据库上。所以将该请求发给 DB1进行查询。
-
将查询结果再发回 Mycat,由 Mycat 进行各种数据处理,再返回给应用。