各人好,我是二营长,日拱一卒无有尽,功不唐捐末入海。那里是Java进修小站,存眷我,每天前进一点点!
MyCat根本介绍 什么是散布式系统
散布式系统是指其组件散布在收集上,组件之间通过传递动静停止通信和动做协调的系统。它的核心理念是让多台办事器协同工做,完成单台办事器无法处置的使命,尤其是高并发或者大数据量的使命。它的特点是:
通明性:散布式系统关于用户是通明的,一个散布式系统在用户面前的表示就像一个传统的单处置机分时系统,可用用户没必要领会其内部构造就能利用;
扩展性:散布式系统的更大特点是可扩展性,它可以按照需求的增加而扩展,能够通过横向扩展使集群的整体性能得到线性提拔,也能够通过纵向扩展单台办事器的性能使办事器集群的性能得到提拔;
可靠性:散布式系统不允许单点失效的问题存在,它的根本思惟是,若是一台机器坏了,则其他机器可以接替它停止工做,具有持续办事的特征;
高性能:高性能才是设想散布式系统的初志。
缺点:
在节点通信部门的开销比力大,线程平安问题也变得复杂,需要在包管数据完好性的同时兼顾性能
过火依赖收集,收集信息的丧失和饱和将会抵消散布式系统的大部门优势
有潜在的数据平安和收集平安等平安性问题
散布式数据库
为什么散布式数据库比散布式应用难多了?
因为数据一致性。(CAP原理)
散布式数据库实现的根本原理
散布式数据库因为其物理散布性,为了包管可靠性,需要存储多个副本,产生了数据复造的问题。所以散布式数据库的实现长短常复杂的。
为了包管性能,散布式数据必需易于扩展。散布式数据库应有4个优势:数据分片及复造办理、具有事务的可靠性存取、优良的性能、易于扩展。
1、散布式数据库的目次办理
散布式数据库的目次存放着系统元数据及数据库的元数据的全数信息,那些数据的存在是为了准确、有效地拜候数据。数据的增删改查操做都需要用到目次,用户受权、平安办理及并发控造等也都需要用到目次,目次构造的合理性间接影响数据库的性能。目次一般包罗各级的描述、拜候办法的描述、关于数据库的统计数据和一致性信息等,系统按照那些信息将用户查询转换为物理数据库上的查询,选择一条更佳的存取途径停止事务办理及平安性、完好性查抄等。
散布式数据库的目次课分为全局目次、散布式目次、全局与当地混合目次。
2、数据分片
当数据库过于庞大,尤其是写入过于频繁且很难由一台主机支持时,我们仍是会面对扩展瓶颈。我们将存放在统一个数据库实例中的数据分离存放到多个数据库实例上,停止多台设备存取以进步性能,在切分数据的同时能够进步系统整体的可用性。
数据分片是指将数据全局地划分为相关的逻辑片段,有程度切分、垂曲切分、混合切分三品种型。
**程度切分:**根据某个字段的某种规则分离到多个节点库中,每个节点中包罗一部门数据。能够将数据的程度切分简单理解为根据数据行停止切分,就是将表中的某些行却分到一个节点,将别的某些行切分到其他节点,从散布式的整体来看它们是一个整体的表 **垂曲切分:**一个数据库由良多表构成,每个表对应差别的营业,垂曲切分是指根据营业将表停止分类并分不到差别的节点上,垂曲拆分简单了然,拆分规则明白,应用法式模块明晰、明白、容易整合,但是某个表的数据量到达必然水平后扩展起来比力困难。 **混合切分:**程度切分和垂曲切分的连系
3、散布式查询处置
散布式查询处置的使命就是把一个散布式数据库上的高条理查询映射为在当地数据库上的操做,查询的解析必需拆分为代数查询的关系运算序列,将要查询的数据定位到各节点,使得查询在各节点停止,最初通过收集通信的操做会聚查询成果。
4、散布式并发控造
并发控造是散布式事务办理的根本使命之一,其目标是包管散布式数据库中的多个事务并发高效、准确的施行。并发控造用来包管事务的可串行性,也就是说事务的并发施行等价于它们按某种次序的串行施行,从而为用户供给并发的通明性。停止并发控造的办法次要有三种:加锁并发控造、时间戳控造、乐不雅并发控造。加锁并发控造应用普遍,但是容易发作死锁;时间戳控造消弭了死锁,一旦发作抵触变回重启而不是期待,需要有全局的同一时钟;乐不雅并发控造关于抵触较少的系统较为适宜,关于抵触多的系统则效率低下。
OLTP和OLAP
海量数据的存储和拜候成为系统涉及和利用的瓶颈,关于海量数据,根据利用场景,主分两品种型:联机事务处置(OLTP)和联级阐发处置(OLAP)。
两者之间的区别:
OLTP OLAP 系统功用 日常交易处置 统计、阐发、报表 DB设想 面向实时交易类应用 面向统计阐发类应用 数据处置 当前的,最新的细节的, 汗青的、聚集的、多维的、集成的 实时性 实时读写要求高 实时要求读写低 事务 强一致性 弱事务 阐发要求 低,简单 高,复杂
联级事务处置也称为面向事务的处置系统,其根本特征是原始数据能够立即传送到计算中心停止处置,在很短的时间内给出处置成果。
联级阐发处置是指通过多维的体例对数据停止阐发、查询和报表,能够同数据发掘东西、统计阐发东西共同利用,加强决策阐发功用。
关系型数据库和NoSQL
关系型数据库是成立在关系模子根底上的数据库。支流的是Oracle,db2,SqlServer,MySQL
NoSQL数据库,全称为Not Only SQL。能够在关系型和非关系型之间兼容,能够考虑愈加适宜的数据存储构造,愈加具有灵敏性。次要分为临时性键值存储(memcached,redis),永久性键值存储(redis),面向文档的数据库(mongoDB,CouchDB),面向列的数据库(Cassandra,HBase),每种NoSQL都有其特有的利用场景及长处。
关系型数据库 NoSQL数据库 特点 数据关系模子基于关系模子,构造化存储,完好性约束
基于二维表及其之间的联络,需要毗连、并、交、差等操做
接纳构造化的查询语言做数据读写
操做需要数据的一致性,需要事务以至强一致性 非构造化的存储
基于多维关系模子
具有特色的利用场景 长处 包管数据的一致性
能够停止join等复杂查询
通用化,手艺成熟 高并发、大数据下读写才能强
撑持散布式,易于扩展,可伸缩
简单,弱构造化存储 缺点 数据读写必需颠末sql解析,大量数据、高并发读写性能不敷
对数据做读写,或修改数据构造时需要加锁,影响并发操做
无法适应非构造化存储
扩展困难
高贵、复杂 join等复杂操做才能较弱
事务撑持较弱
通用性差
无完好约束复杂营业场景撑持较差 MyCat根本介绍 MyCat是什么?
官方网址:http://www.mycat.org.cn/
从定义和分类来看,它是一个开源的散布式数据库系统,是一个实现了 MySQL 协议的Server,前端用户能够把它看做是一个数据库代办署理,用 MySQL 客户端东西和号令行拜候,而其后端能够用MySQL 原生(Native)协议与多个 MySQL 办事器通信,也能够用 JDBC 协议与大大都支流数据库办事器通信,其核心功用是分表分库,即将一个大表程度朋分为 N 个小表,存储在后端 MySQL 办事器里或者其他数据库里。
撑持 MySQL、 SQL Server、Oracle、 DB2、 PostgreSQL 等支流数据库,也撑持 MongoDB 那种新型 NoSQL 体例的存储,将来还会撑持更多类型的存储。
差别的角色对MyCat的理解:
关于DBA而言,Mycat就是MySQL Server,而Mycat后面毗连的MySQL Server,就仿佛是MySQL的存储引擎,如InnoDB,MyISAM等,因而,Mycat自己其实不存储数据,数据是再后端的MySQL上存储的,因而数据可靠性以及事务都是MySQL包管的,简单说,Mycat就是MySQL更佳朋友,它再必然水平上让MySQL拥有了能跟Oracle PK的才能。
关于软件工程师来说. Mycat就是一个近似等于MySQL的数据库办事器,你能够用毗连MySQL的体例去毗连Mycat,除了端口差别,默认的mycat端口是8066而不是mysql的3306,因而需要再毗连字符串上增加端口信息,大大都情况下,能够用你熟悉的对象映射框架利用mycat,但建议关于分片表,尽量利用根底的SQL语句,因为如许能到达更佳性能,出格是几万万以至几百亿笔记录的情况下。
关于架构师来说.mycat是一个强大的数据库中间件,不单单能够用做读写别离、以及分库分表、容灾备份,并且能够用于多租户应用开发,云平台根底设备,让你的架构具备很强的适应性和灵敏性,借助于即将发布的mycat只能优化模块,系统的数据拜候瓶颈和热点一目了然,按照那些统计阐发数据,你能够主动或手工调整后端存储,将差别的表映射到差别的存储引擎上,而整个应用的代码一行也不消改动。
MyCat的原理
MyCat的原理其实不复杂,复杂的是代码,若是代码也不复杂,那么早就成为了一个传说了。它几乎等同于MySQL Proxy。
MyCat的原理中最重要的一个动做是“拦截”,它拦截了用户发送过来的SQL语句,起首对SQL语句做了一些特定的阐发:如分片阐发、路由阐发、读写别离阐发、缓存阐发等,然后将此SQL发送后端的实在数据库,并将返回的成果做恰当的处置,最末再返回给用户。
上述图片里,orders表被分为了三个分片datanode(简称dn),那三个分片是散布在两台MySQL Server上(Datahost),即datanode=database@datahost体例,因而你能够用一台到N台办事器来分片,分片规则为(sharding rule)典型的字符串列举分片规则,一个规则的定义是分片字段(sharding column)+分片函数(rule function),那里的分片字段为prov而分片函数为字符串列举体例。
当mycat收到一个SQL时,会先解析那个SQL,查找涉及到的表,然后看此表的定义,若是有分片规则,则获取到SQL里分片字段的值,并分配分片函数,得到该SQL对应的分片列表,然后将SQL发往那些分片去施行,最初搜集和处置所有分片返回的成果数据,并输出到客户端,以select * from orders where prov = ?语句为例,查到prov=wuhan,根据分片函数,wuhan返回dn1,于是sql就发给了mysql1,去取db1上的查询成果,并返回给用户。
若是上述sql改为select * from orders where prov in (wuhan,beijing),那么,sql就会发给MySQL1和MySQL2去施行,然后成果集合并后输出给用户。但凡是营业中我们的SQL会有order by以及limit翻页语法,此时就设想到成果集在mycat端的二次处置,那部门代码也比力复杂,而最复杂的则属两个表的join,为此,mycat提出了立异性的ER分片,全局表,HBT(human brain tech)人工智能的catlet,以及连系storm/spark引擎等十八般武艺的处理法子,从而称为目前业界最强大的计划,那就是开源的力量。
应用场景
mycat开展到如今,利用的场景已经很丰硕,并且不竭有新用户给出新的立异性的计划,以下是典型的应用场景:
1、单纯的读写别离,此时设置装备摆设最为简单,撑持读写别离,主从切换
2、分库分表,关于超越1000万的表停止分片,更大撑持1000亿的单表分片
3、多租户应用,每个应用一个库,但应用法式只毗连mycat,从而不革新法式自己,实现多租户化
4、报表系统,借助mycat的分表才能,处置大规模报表的统计
5、整合大都据源
6、做为海量数据实时查询的一种简单有效计划,好比100亿条频繁查询的记录需要在3秒内查询出来成果,除了基于主键的查询,还可能存在范畴查询或其他属性查询,此时mycat可能是最简单有效的选择
7、数据库路由器,mycat基于mysql实例的毗连池复用机造,能够让每一个应用更大程度地共享一个mysql实例地所有毗连池,让数据库地并发拜候才能大大提拔
为什么利用MyCat
java与数据库紧耦合。解耦
高拜候量高并发对数据库的压力。负载平衡
读写恳求数据纷歧致。读写别离,主从复造
MyCat核心概念
mycat是数据库中间件,就是介于数据库与应用之间,停止数据处置和交互的中间办事。从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完好的数据库存储。
如上图所示,数据被分到多个分片数据库之后,应用若是需要读取数据,就要处置多个数据源的数据。若是没有数据库中间件,那么应用将间接面临分片集群,数据源切换、事务处置、数据聚合都需要应用间接处置,本来该是专注于营业的应用,将会话大量的工做来处置分片后的问题,最重要的是每个应用途理将是完全的反复造轮子。
逻辑库
关于客户端而言,不需要晓得中间件的存在。开发人员只需要晓得数据库的概念即可,所以能够将数据库中间件当做是一个所有数据库集群的构成的一个逻辑数据库,不关心背后数据库集群的复杂性。
现在云计算时代,数据库中间件能够以多租户的形式给一个或多个应用供给办事。每个应用拜候的数据都是互相隔离的,但是却共享了统一个物理库。常见如云数据办事器。
逻辑表
逻辑表,在散布式数据库中,对应用来说,读写数据的表就是逻辑表。逻辑表能够使数据切分后,分步在一个或多个分片库中,也能够不做数据切分,不分片,只要一个表构成。
分片表
分片表,是指哪些原有的很大数据的表,需要切分到多个数据库的表,如许每一个分片城市有一部门数据,所有分片构成了完好的数据。
非分片表
一个数据库中并非所有的表都很大,某些表是能够不消停止切分的,非分片是相对分片表来说的,就是那些不需要停止数据切分的表。
ER表
关系型数据库是基于实体关系模子之上,通过其描述了实在世界中事物与关系,mycat中的ER表既是来源于此。
基于ER关系的数据分片战略,子表的记录与所联系关系的父表记录存放在统一个数据分片上,即子类依赖于父类,通过表分组包管数据join不会跨库操做(尽量制止呈现跨库join)。那也是数据切分规划的重要规则之一。
全局表
一个实在的营业系统中,往往存在大量的类似字典表的表,那些表根本上很少变更,字典表具有以下几个特点:
1、变更不频繁
2、数据量总体变革不大
3、数据规模不大,很少有超越数十万笔记录
关于那类的表,在分片的情况下,当营业表因为规模而停止分片以后,营业表与那些从属的字典表之间的联系关系,就成了比力棘手的问题,所以mycat中通过数据冗余来处理那类表的join,即所有的分片都有一份数据的拷贝,所有将字典表或者契合字典表特征的一些表定义为全局表。
数据冗余(反范式设想)是处理跨分片数据join的一种很好思绪,也是数据切分规划的别的一条重要原则。
分片节点(dataNode)
数据切分后,一个大表被分到差别的分片数据库上面,每个表分片所在的数据库就是分片节点(dataNode)
节点主机(dataHost)
数据切分后,每个分片节点(dataNode)纷歧定城市独占一台机器,统一机器上面能够有多个分片数据库,如许一个或多个分片节点(dataNode)所在的机器就是节点主机(dataHost),为了躲避单节点主机并发数限造,尽量将读写压力高的分片节点(dataNode)平衡的放在差别的节点主机(dataHost)。
分片规则
数据切分是指一个大表被分红若干个分片表,就需要必然的规则,如许根据某种规则把数据分到某个分片的规则就是分片规则,数据切分选择适宜的分片规则十分重要,将极大的制止后续数据处置的难度。
全局序列号
数据切分后,原有的关系数据库中的主键约束在散布式前提下将无法利用,因而需要引入外部机造包管数据独一性标识,那种包管全局性的数据独一标识的机造就是全局序列号。
多租户
多租户手艺或称多重租赁手艺,是一种软件架构手艺,它是在切磋与实现若何于多用户的情况下共用不异的系统或法式组件,而且扔可确保各用户间数据的隔离性。在云计算时代,多租户手艺在共用的数据中心以单一系统架构与办事供给大都客户端不异以至可定造化的办事,而且仍然能够保障客户的数据隔离。目前各类各样的云计算办事就是那类手艺范围,例如阿里云数据库办事(RDS),阿里云办事器等等。
多租户在数据存储上存在三种次要的计划,别离是:
独立数据库
一个租户一个数据库,那种计划的用户数据隔离级别更高,平安性更好,但成本也高。
长处:为差别的租户供给独立的数据库,有助于简化数据模子的扩展设想,满足差别租户的奇特需求,若是呈现毛病,恢复数据比力简单。
缺点:增大了数据库的安拆数量,随之带来维护成本和购买成本的增加
共享数据库,隔离数据架构 多个或者所有租户共享database,但是每一个租户一个schema
长处:为平安性要求较高的租户供给了必然水平的逻辑数据隔离,并非完全隔离;每个数据库能够撑持更多的租户数量
缺点:若是呈现毛病,数据恢复比力困难,因而恢复数据库将牵扯到其他租户的数据,若是需要跨租户统计数据,存在必然困难
共享数据库,共享数据架构
租户共享统一个database,统一个schema,但在表中通过tenantID区分租户的数据。那是共享水平更高、隔离级别更低的形式
长处:维护和购买成本更低,运行每个数据库撑持的租户数量最多
缺点:隔离级别更低,平安性更低,需要在设想开发时加大对平安的开发量,数据备份和恢复最困难,需要逐表逐条备份和复原。
利用
利用的时候记住三个关键的设置装备摆设文件:
起头利用的时候,去官网查看设置装备摆设材料停止设置装备摆设。 server.xml
schema.xml
rule.xml
费事的是各类各样的设置装备摆设。
时间老是过去了,才恍然过得飞快。日拱一卒无有尽,功不唐捐末入海。那里是Java进修小站,存眷我,每天前进一点点!
本文由 mdnice 多平台发布