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可以非常高效的使用系统线程资源几乎不会出现假死.
总结:
什么是数据库中间件的假死:中间件错误的判断后端数据库宕机,实际没有宕机.
为什么出现假死:中间件对线程资源管理效率不高,导致高并发时线程很容易就被占用满了.