Mycat拆分、中间件原理、假死概述

1.概述

数据库的集群,分布式高可用的结构,需要引入中间件的软件,实现中间状态的计算,连接后端数据库完成客户端的所有功能需求sql语句的执行.将客户端与服务端数据库切分开来。

mycat是一个国内企业级别高性能数据库中间件。

2.特点

实现高性能的读写分离计算(速度非常快)

  • 对于数据库集群来讲,主节点可以写数据,同时也可以读,从节点不能写数据,只能读数据.
  • 多个节点组成的一个主从结构,可以实现读和写的分离操作---读写分离.
  • 读写分离的存在能够大大提升数据库主从集群的使用效率.
  • select显然是读,一般大量分配给从节点
  • insert/drop/delete显然是写,全部分配给主节点

实现水平并行计算,处理表格划分,达到百亿级别的大表进行水平拆分

单机数据库结构:

  • 一个库,多个表格存在
  • 多个库,存在多个表格

当引入一个分布式数据集群使用时,数据需要分配到不同的数据分片,可以采用如下拆分方法

2.1垂直拆分

1.多个库放到不同分片

如下图,比如单机数据库系统有3个数据库db1、db2、db3,进行垂直拆分,将db1 拆分到shard1。将db2 拆分到shard2。将db3拆分到shard3

2.不同表格放到不同的分片

根据表格进行拆分,将不同的呃表格放到不同的分片中

2.2水平拆分

将原有的一张表格数据切分到了不同的数据分片中。

当一个表的数据量过大时,可以采用这种方法拆分,将一个表中的数据分别拆分存放到不同的分片中

3.运行原理 

客户端与数据库之间形成一道计算的桥梁,接收客户端sql语句,完成计算,实现后端数据库的访问

第一步:mycat启动时,就生成了管理连接后端真实数据库的所有datasource

第二步:客户端系统只能连接mycat发送sql语句

第三步:mycat接收到sql语句,执行各种计算,计算分片sql语句对应数据在哪个分片,计算读写分离,从这个分片主从结构中到哪个节点读/写,拿到了具体的数据源,获取连接发送sql语句

第四步:数据库拿到mycat执行的sql开始执行

第五步:mycat将数据库返回结果返回给客户端

(客户端获取数据好比是mycat执行的sql返回的结果)

4.假死逻辑

cobar是mycat前身,是一个早期比较流行中间件.没有解决后端连接的假死发生.2011出现mycat解决了后端假死问题

当中间件的线程资源,在运行时占用满了,导致新的请求无法连接后端数据库(原因是没有新的线程连接),中间件错误的判断是数据库宕机导致的-----出现假死.

影响中间件对数据库集群的管理.

mycat不太需要关注假死的现象,因为mycat可以非常高效的使用系统线程资源几乎不会出现假死.

总结:

什么是数据库中间件的假死:中间件错误的判断后端数据库宕机,实际没有宕机.

为什么出现假死:中间件对线程资源管理效率不高,导致高并发时线程很容易就被占用满了.