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 将所有分布式数据库 进行封装,将对应的请求按照分片规则,分到各个数据库里面。


④、多数据源整合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yQtBXn2L-1595131710663)(C:\Users\86156\Pictures\mha'\批注 2020-07-19 115120.png)]

后端可以是 多个 不同种类 的 数据库 的集合。

可以是 数据库集群,也可以是 主从mysql,也可以是 NoSQL 数据库集群


Mycat 工作原理

原理

  • Mycat 的原理中最重要的一个 动词 “拦截”。Mycat 可以拦截用户发送过来的 SQL 语句。
    • 首先对 SQL 语句进行特定的分析:分片分析、路由分析、读写分离分析、缓存分析等。
    • 然后将此 SQL 发往后端的真实数据库,并将返回的结果进行适当的处理,再发送给用户。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qfw5ulvX-1595131710665)(C:\Users\86156\Pictures\mha'\批注 2020-07-19 115855.png)]

Mycat 拦截图过程分析:
  1. orders 订表中 包含各个城市的 订单信息。可以通过分库分表,将 一个库的 一个表(orders),分成三个库,三个表。也就是将各个城市的信息,拆分成三个表,三个库,来进行存储。

  2. 当查询 订单 “zhejiang” 的请求 发送到 Mycat,由 Mycat 的各种功能解析,然后发现其结果在 后端 DB1 数据库上。所以将该请求发给 DB1进行查询。

  3. 将查询结果再发回 Mycat,由 Mycat 进行各种数据处理,再返回给应用。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值