Mycat-介绍
1, myscat是什么:
•一个用于MySQL读写分离和与数据切分的高可用中间件
•一个模拟为MySQLServer的超级数据库代理
•一个能平滑扩展支持1000亿大表的分布式数据库系统 (普通单表1kw以下)
•一个可管控多种关系数据库的数据库路由器
2, mycat来自2013年阿里的Cobar的改良版, 截至2015年, 成为大多数公司的数据解决方案
•2013年阿里的Cobar在某大型项目中使用过程中发现存在一些比较严重的问题,于是第一代改良版——Mycat诞生。
•Mycat开源以后,一些Cobar的用户参与了Mycat的开发,最终Mycat发展成为一个由众多软件公司的实力派架构师和资深开发人员维护的社区型开源软件。
•2014年Mycat首次在上海的《中华架构师》大会上对外宣讲,引发围观,更多的人参与进来,随后越来越多的项目采用了Mycat
•2015年7月为止,Mycat项目总共有16个Committer,其中核心参与者的年薪总额超过200万
•2015年5月,由核心参与者们一起编写的第一本官方权威指南《Mycat权威指南》电子版发布,累计超过500本,成为开源项目中的首创。
•截至2015年7月,超过100个项目采用Mycat,涵盖银行、电信、电子商务、物流、移动应用、O2O的众多领域和公司。
•截至2014年7月,Mycat官方QQ群已经超过2700人,大多数为资深IT工程师、架构师、DBA、以及一些CXO和高端猎头,成为国内具有影响力的高端IT专业群
•Mycat社区首次提出BigSQL的概念,并逐步将大数据和实时计算等先进技术引入到Mycat里,从而吸引和聚集了一大批业内大数据和云计算方面的资深工程师,Mycat社区成为名副其实的国内大数据领域实力派成员。
•Mycat社区里不断有优秀工程师被创业公司挖走,为了能更好的支持创业公司并寻求更多的优秀工程师参与采用,Mycat社区目前已经开始开展在线高端IT培训,培养高端Java架构师、工程师。
3, 系统切分及解决方案
数据切分:
简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。
切分模式;
垂直切分,(单库性能瓶颈, 治标不治本)
一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面
优点:
--拆分后业务清晰,拆分规则明确。
--系统之间整合或扩展容易。
--数据维护简单。
缺点;
--部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。
--受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高
--事务处理复杂。
水平切分
按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,主要有分表,分库两种模式
优点;
不存在单库大数据,高并发的性能瓶颈。
对应用透明,应用端改造较少。
按照合理拆分规则拆分,
join操作基本避免跨库。提高了系统的稳定性跟负载能力。
缺点;
拆分规则难以抽象。
分片事务一致性难以解决。
数据多次扩展难度跟维护量极大。
跨库join性能较差
4, 拆分处理:
客户端拆分:
在每个应用程序模块中配置管理自己需要的一个(或者多个)数据源,直接访问各个数据库,在模块内完成数据的整合;
优点:相对简单,无性能损耗。
缺点:不够通用,数据库连接的处理复杂,对业务不够透明,处理复杂
通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明;
优点:通用,对应用透明,改造少。
缺点:实现难度大,有二次转发性能损失。单机损失30% 左右
5, mycat中间件架构:
1, application提交sql后, 经过sql解析, 优化, 路由, 解析为对应的sql指令, 交给具体的sql机器执行
2, 个节点的计算结果进行结果集合并,
3, manager负责master的集群管理, 内存管理等
6, 技术支持:
-遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理。
-基于心跳的自动故障切换,支持读写分离,支持MySQL一双主多从,以及一主多从
-有效管理数据源连接,基于数据分库,而不是分表的模式。
-基于Nio实现,有效管理线程,高并发问题。
-支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。
-支持2表join,甚至基于caltlet的多表join。
-支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
-支持多租户方案。-支持分布式事务(弱xa)
-支持全局序列号,解决分布式下的主键生成问题。
-分片规则丰富,插件化开发,易于扩展。
-强大的web,命令行监控。
-支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server、mongodb、巨杉。
-集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。
7, mycat概念:
逻辑库, 逻辑表: 由于作为集群的master, 所以不存放数据, 只存放库表的定义信息
分片规则; 对数据的分片存放
系列来自尚学堂视频