mycat分库分片(bat面试)

2020-08-05  本文已影响0人  sknfie

概述

Mycat是基于阿里Cobar演变而来的一款开源分布式数据库中间件,是一个实现了MySQL协议的Server。前端用户可以把它看做是一个数据库代理,用MySQL客户端工具和命令行访问;而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信。

优点:

  1. 支持Mysql集群,可以作为Proxy使用;
  2. 支持JDBC连接ORACLE、DB2、SQL Server,将其模拟为MySQL Server使用;
  3. 自动故障切换,高可用性;
  4. 支持读写分离,支持Mysql双主多从,以及一主多从的模式 ,支持全局表,数据自动分片到多个节点,用于高效表关联查询;
  5. 支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询;
  6. 多平台支持,部署和实施简单。

缺点:

mycat不支持二维路由,仅支持单库多表或多库单表。由于自定义连接池,这样就会存在mycat自身维护一个连接池,MySQL也有一个连接池,任何一个连接池上限都会成为性能的瓶。

mycat架构

mycat.png

mycat利用Mysql的通讯协议模拟成Mysql Server,建立Schema(数据库)、Table (数据表)、User(用户)的逻辑模型,并将这套逻辑模型映射到后端的存储节点DataNode(MySQL Instance)上的真实物理数据库中,这样使得所有能使用Mysql的客户端将mycat当成是Mysql Server来使用。

工作原理

Mycat通过拦截用户发送过来的SQL语句,并对其做一些特定的分析,然后将该SQL发到后端的真实数据库,并将返回的结果做完处理后,最终返回给用户。特定的分析内容如下:

当Mycat收到一个SQL时,会先解析这个SQL,查找涉及到的表,然后check此表的定义:

分片策略(分表分库)

MyCAT通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分片算法。

分片规则

特性:
•平衡性:各节点的对象个数相对均衡
•单调性:新对象加入时不影响原对象的存储位置
•分散性:相同内容会被分散到相同节点
•负载:同一个节点不能被不同用户映射不同内容

读写分离

读写分离对于大型网站来说,是必不可少的一个重要feature。对于MySQL来说,标准的读写分离是一主多从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于业务系统的压力,通常是1-n个读节点。Mycat读写分离和自动切换机制,需要其主从架构模式配合。

mysql主从架构

mycat分布式事务解决方案

  1. 准备阶段:事务管理器给每个资源管理器发送准备消息,每个参与者要么直接返回失败(如权限验证失败),要么在本地执行事务,写本地的redo和undo日志但不提交:

mycat不适用场景

上一篇下一篇

猜你喜欢

热点阅读