Mycat(2)—— Linux环境微服务项目MyCAT数据库中间件技术说明
MyCat数据库分库分表数据读写分离中间件
Author:xusy
不怕从零开始 只怕从未启程
Mycat诞生:2013年阿里的Cobar在社区使用过程中发现存在一些比较严重的问题,及其使用限制,经过mycat发人第一次改良,第一代改良版—MyCat诞生。
Mycat捐赠地址:http://www.mycat.io/donate.html
Mycat官方网站:http://www.mycat.io/
Mycat源码:https://github.com/MyCATApache/Mycat-Server
Mycat下载地址:https://github.com/MyCATApache/Mycat-download
1.1 关系型数据库和NoSQL数据库
关系型数据库,是建立在关系模型基础上的数据库,其借助集合代数等数据概念和方法来处理数据库中的数据。主流的Oracle、DB2、MySQL、SqlServer都属于这类传统的数据库。
NoSQL数据库、全称为Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据库存储。主要分为临时性键值存储(memcachd、redis)、永久性键值存储(ROMA、redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase)、每种NoSQL都有其特有的使用场景及优点。
|
|
关系型数据库 |
NoSQL数据库 |
|
特点 |
1、数据关系模型基于关系模型,结构化存储,完整性约束 2、基于二维表及其之间的联系,需要连接,并、交、差、除等数据操作 3、采用结构化的查询语句(SQL)做数据读写 4、操作需要数据的一致性,需要事物甚至是强一致性 |
1、非结构化的存储 2、基于多维关系模型 3、具有特有的使用场景 |
|
优点 |
1、保持数据的一致性(事务处理) 2、可以进行join等复杂查询 3、通用化、技术成熟 |
1、高并发,大数据读写能力较强 2、基本支出分布式,易于扩展,可伸缩 3、简单、弱结构化存储 |
|
缺点 |
1、数据读写必须经过sql解析、大量数据、高并发下读写性能不足。 2、对数据做读写、或修改数据结构时需要加锁、影响并发操作。 3、无法使用非结构话存储 4、扩展困难 5、昂贵,复杂 |
1、join等复杂操作能力较弱 2、事物支出较弱 3、通用型差 4、无完整约束、复杂业务场景支出较差 |
1.2 数据切分
简单来说,就是通过某种特定的条件,将我们存放在同一个数据库的数据分散到多个数据库(主机)上面,以达到分散单台设备负载的效果。
数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或schema)来切分到不同数据库(主机)之上,这种切分可以称之为数据的垂直(纵向)切分;另一种则是根据表中的数据逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。
垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非常低,相互影响很小,业务逻辑非常清晰的系统。在这种系统汇总,可以很容易做到将不同业务模块所使用的表拆分到不同的数据库中。根据不同的表来拆分,对应用程序影响也更小,拆分规则也会比较简单清晰。
水平气氛与垂直切分相比,相对来说稍微复杂一些。因为要将同一个表中的不同数拆分到不同的数据库中,对应用程序来说,拆分规则本身就较根据表名来拆分更为复杂,后续的数据维护也会更为复杂一些。
一般来讲业务存在着复杂join的场景是难以切分的,往往业务独立的易于切分。如何切分,切分到何种程度是考验技术架构的一个难题。
下面来分析一下垂直切分的优缺点:
优点:
- 拆分后业务清晰,拆分规则明确
- 系统之间整合或扩展容易
- 数据维护简单
缺点:
- 部分业务表无法join,只能通过接口方式解决,提高了系统的复杂度
- 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展及性能提高
- 事物处理复杂
由于垂直切分是按照业务的分类架构表分散到不同的数据库,所以有些业务表会过于庞大,存在单库读写与存储瓶颈,所以就需要水平拆分来做解决。
下面来分析水平切分的优缺点:
优点:
- 拆分规则抽象好,join操作基本可以数据库做
- 不存在单库大数据,高并发的性能瓶颈
- 应用端改造较小
- 提高了系统的稳定性跟负载能力
缺点:
- 拆分规则难以想象
- 分片事物一致性难以解决
- 数据多次扩展难度跟维护量极大
- 跨库join性能较差
前面讲了崔志切分跟水平切分的饿不同跟优缺点,会发现每种切分方式都有缺点,但共同的特点及缺点是:
- 引入分布式事物的问题
- 跨节点join的问题
- 跨节点合并排序分页问题
- 多数据源管理问题
针对数据源管理,目前主要有两种思路:
- 客户端模式,在每个应用程序模块中配置管理自己需要的一个(或者多个)数据源,直接访问各个数据库,在模块内完成数据的整合;
- 通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明;
可能90%以上的人在面对上面这两种解决思路的时候都会倾向于第二种方式。尤其系统不断变得庞大复杂的时候。确实,这是一个非常正确的选择,虽然短期内需要付出的成本可能会相对于大一些,但是对整个系统的扩展性来说,是非常有帮助的。
Mycat通过数据切分解决传统数据库的缺陷,又有了nosql易于扩展的特点。通过中间代理层规避了多数据源的处理问题,对应用完全透明,同时对数据切分后存在的问题,也做了解决方案。
由于数据气氛后数据join的难度在此也分享一下数据切分的经验:
第一原则:能不切分尽量不要切分
第二原则:如果要切分一定要选择合适的切分规则,提前规划好
第三原则:数据切分尽量通过数据冗余或表分组(Table Group)来降低跨库join的可能
第四原则:由于数据库中间件对数据join实现的优劣难易把握,而且实现高性能难度极大,业务读取尽量少使用多表join
Mycat
Cobar 曾经的TA 长发飘飘 肤若凝脂 国色天香 长袖善舞 所以 一笑倾城
那已成为传说,一如您年少的坚持:“书中自有黄金屋...”
Cobar 是阿里巴巴研发的关系型数据库的分布式处理系统。
Mycat 原理
Mycat的原理并不复杂,复杂的是代码,如果代码也不复杂,那么早就成为一个传说了
Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此sql发送后端真实数据库,并将返回到结果做适当的处理,最终再返回给用户。
1.1.3 数据库中间件
前面讲了mycat是一个开源的分布式数据库系统,但是真正的数据库需要存储引擎,而mycat并没有数据库存储引擎,所以并不是完全意义上的分布式数据库系统。
Mycat是数据库中间件,就是介于数据库与应用之间的,进行数据存储于交互的中间服务。由于前面的对数进行分片处理之后,从原有的一个库,被切分多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储。
Mycat 使用
1)、JDK 1.7以上
2)、MySQL 注:MyCAT支持多种数据库接入,如:MySQL、sqlserver、Oracle、mongoDB,推荐使用MySQL做集群
3)Mycat项目主页:https://github.om/MyCATApache/
4)MyCAT-Server仓库地址:https://github.com/MyCATApache/Mycat-Server.git

浙公网安备 33010602011771号