Mycat(2)—— Linux环境微服务项目MyCAT数据库中间件技术说明

MyCat数据库分库分表数据读写分离中间件

Authorxusy

不怕从零开始  只怕从未启程

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数据库

关系型数据库,是建立在关系模型基础上的数据库,其借助集合代数等数据概念和方法来处理数据库中的数据。主流的OracleDB2MySQLSqlServer都属于这类传统的数据库。

NoSQL数据库、全称为Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据库存储。主要分为临时性键值存储(memcachdredis)、永久性键值存储(ROMAredis)、面向文档的数据库(MongoDBCouchDB)、面向列的数据库(CassandraHBase)、每种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的场景是难以切分的,往往业务独立的易于切分。如何切分,切分到何种程度是考验技术架构的一个难题。

下面来分析一下垂直切分的优缺点:

优点:

  1. 拆分后业务清晰,拆分规则明确
  2. 系统之间整合或扩展容易
  3. 数据维护简单

缺点:

  1. 部分业务表无法join,只能通过接口方式解决,提高了系统的复杂度
  2. 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展及性能提高
  3. 事物处理复杂

由于垂直切分是按照业务的分类架构表分散到不同的数据库,所以有些业务表会过于庞大,存在单库读写与存储瓶颈,所以就需要水平拆分来做解决。

下面来分析水平切分的优缺点:

优点:

  1. 拆分规则抽象好,join操作基本可以数据库做
  2. 不存在单库大数据,高并发的性能瓶颈
  3. 应用端改造较小
  4. 提高了系统的稳定性跟负载能力

缺点:

  1. 拆分规则难以想象
  2. 分片事物一致性难以解决
  3. 数据多次扩展难度跟维护量极大
  4. 跨库join性能较差

前面讲了崔志切分跟水平切分的饿不同跟优缺点,会发现每种切分方式都有缺点,但共同的特点及缺点是:

  1. 引入分布式事物的问题
  2. 跨节点join的问题
  3. 跨节点合并排序分页问题
  4. 多数据源管理问题

针对数据源管理,目前主要有两种思路:

  1. 客户端模式,在每个应用程序模块中配置管理自己需要的一个(或者多个)数据源,直接访问各个数据库,在模块内完成数据的整合;
  2. 通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明;

可能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支持多种数据库接入,如:MySQLsqlserverOraclemongoDB,推荐使用MySQL做集群

3)Mycat项目主页:https://github.om/MyCATApache/

4)MyCAT-Server仓库地址:https://github.com/MyCATApache/Mycat-Server.git

posted @ 2017-04-03 18:39  xu_shuyi  阅读(812)  评论(0)    收藏  举报