MyCat:取代Cobar数据库中间件

Cobar
是Alibaba开源的一个数据库中间件,为了缓解类似proxy这类的问题。近日同类别的有奇虎360开源的Atlas。类似的有主题在线上用起来很不爽,问题多多的比如MySQL
Proxy和SQL Relay,基本可以忽略。

连续前文,大家谈到了为关系型社交应用扩充相互的五个可应用的因素:合作、多媒体、异性。

 

上边大家继续讲。

Cobar  下载:https://github.com/alibaba/cobar

4、私密

这边所说的私密不要跟前文分类中的Open和Close搞混了,Open、Close分别说的是开放关系(熟+陌)与熟人关系,而私密指的是发送音信这件事是不可扩散或无法追溯的。

私密促进关系型的竞相的说辞是明显的。由于封建礼教对人类的麻醉,使人类有了伤心的羞耻心,因而部分会让自己羞羞脸或者让别人羞羞脸的话就会难以说出口,假设能掘进那地方被克服的需要,那么自然会增多互相。

前文说了私密性是指羞羞脸的信息是不足扩散或者不可以追溯的。由此顺理成章,主流的私密性关系社交应用相应地分为二种样式:阅后即焚、匿名,代表的施用分别是Snapchat、Secret。很可惜的是上述两款应用都被强大的GFW过滤掉了,所以在国内也没怎么人采纳它们——除了命苦的制品DOGS。

本来你说非主流的名气也不小的玩法也有哇,比如漂流瓶呀什么的,从规律上讲都足以向上边说的这三种格局靠。为啥外国估值200亿比索的Snapchat到了国内的翻版没有火起来吧?难道国人没有羞羞脸的急需呢?当然有。不过国人要了解的多,在手机截屏功效老妪能懂的当即,阅后即焚是没办法给封建礼教贻害下的这颗胆小谨慎的心灵以现实的维持的,况且熟人关系中的阅后即焚也没怎么意思,国人的首要顶牛是约与不约,而不是十几秒后图片录像不可以看了,哈哈。

末尾依然附上一张Snapchat的施用截图吧,可惜我没关系好友。

Snapchat 信息列表 使用截图

Atlas 下载:https://github.com/Qihoo360/Atlas

5、捉弄

好不容易有少数娱乐性进来了哟,但是还没到游戏呢哦,不要心急。

丢啊丢啊丢手绢,偷偷地坐落小孩子的末尾,我们不要告诉她……(发觉后)快点快点抓住她……

还记得儿时时期玩儿过的“丢手绢”吗?它基本上表明了恶作剧的办事规律。两个步骤:偷偷地坐落小孩子的后面——挑逗;我们不用告诉她——围观;快点快点抓住她——接力(借使抓不到即将当鬼了)。

故而没有将“嘲讽”放到游戏之中说,是因为它还有其余玩法。我还记得一年前,微信朋友圈里曾有这样一种讥笑方法:有一天,我打开朋友圈,发现其间有一个朋友发的情事是他平日不可以发的温馨曝料自己式的这种如暗示自己是GAY的,然后我寻心满意足地在评头论足里面戏弄她,结果刚发出去评论,友人就发来一条私信,大致内容是我中计啦之类的,要求我也在对象圈发一条状态,公布的内容也给本人设计好了,反正就是很脸红的情节啦,即使不发的话,就咒我大姨出事(这一点我很不适)。

这很吻合”揶揄“扩充相互的手段,自曝是挑逗我,我评论他是引人围观,因为领会内情的人(中过计的)会清楚我中计了,最终明知中计了也要继续将戏弄继续下去是交叉。补充一下,我立即尚未接力,因为以小姨出事来威逼外人真是太差劲了。除了那点,这一场奚弄活动计划的很正确。

大家从小到大肯定都有过与自己刚才所述类似的经历吗,这就是奚弄的力量,嘲笑不只是从天而降让您防不胜防,而且还自带很强的传播性。不足是,我以为非游戏的调戏是不可持续的,因为大家不可以一年365天都过愚人节吧?

  

6、游戏

这么晚才说游戏,是因为,说完前五点,再说游戏就很好说了——游戏包含前五点不是吗?

本身这边说的娱乐专指社交游戏,它与其他娱乐很好界别,假诺一款游戏为社交服务,那么它就是交际游戏,反之则相反。所以大家熟谙的斗嘴农场、抢车位、买奴隶是交际游戏,我们在玩它们的时候自然地追加了社工商银行为。而新兴的打飞机、每天连萌、每天酷跑,因为可以跟好友要重玩机会(如飞机)而增加了应酬行为,由此我们也以为它们是应酬娱乐。像魔兽世界、英雄联盟这些,大家开社交应用(如YY语音)是将社交应用当作工具为大家服务,所以它们不是交际游戏。

由此社交游戏的目标跟前五点是同一的,都是为了最大化地满意人们的相持需求,游戏也是交际需求的一种。

假诺依照前文的覆辙表明游戏怎样为张罗服务就太枯燥了,人人都知道好的游戏能带来社建行为,那么不如自己来总计一下怎么才算一款好的交际娱乐。

(1)没有好友就玩不了,好友越多越好玩。假设好友列表空空如也还可以拓展娱乐,那么根本连社交游戏都不算了吧。游戏的自传播力本来从没那么强,再增长市面上的娱乐千千万万,一款社交游戏在满足用户的娱乐需求之后,还有背负增添社工商银行为的职责,是比较困难的,所以只可以倚重一些游玩上的筹划比如有的立刻的褒奖,使用户自发地去拉好友,当用户发现,好友越多越好玩的时候,社交应用就会像病毒一样传播扩散。

(2)玩家获取的知足感来自他的社交网。假设一款游戏给它的玩家的引以自豪仅仅缘于游戏本身的卡子设计,那么它并非是一款社交游戏。我在家玩单机RPG游戏《古剑奇谭》,尽管及格100次,通关的快感也仅来自于这款游戏本身,我像自家的爱人介绍是因为它的确丰硕好玩,但自身并不要命提到朋友是否最后真正玩了它。而社交游戏因此涉及链传播游戏的长河、状态和结果,这一传开过程自己就可以使用户拿到巨大的满足。

(3)每个人既是奶牛也是狮子。关联到游戏设计方面的本不应该班门弄斧,那里也只是提一句,在交际游戏中的每个人都不应有单纯地变成攻坚方或防守方,而应该有所奶牛和狮子的双重身份,这跟”奚弄“的点子有点看似,每个人都是调侃方也是愚弄的靶子,每一步成功的操作都应有得到鼓励,诸如此类游戏的娱乐性才能顺着关系链传递下去。

(4)不完美的游乐得分。只要直白不全面,用户有一天会厌倦,假诺一上来就完美,用户就不会随着玩儿了。

如上四点基本上大概了应酬游戏的目标(人尤为多)、土壤(关系网)、机制(玩家的双重身份)和奖惩(不设满分)。社交游戏其他地方的设计都应有围绕上述四点。

感谢上一篇文大家给我如此多喜爱。最终贴一张安心乐意农场的老图怀旧一下。

(原创作品,转载请表明出处。)

===============================================================

 

MyCat:取代Cobar数据库中间件

  

哪些是MyCAT?简单来说,MyCAT就是:
一个到底开源的,面向公司应用开发的“大数据库集群”
扶助工作、ACID、可以代表Mysql的加强版数据库 ?
一个得以视为“Mysql”集群的商号级数据库,用来顶替昂贵的Oracle集群 ?
一个齐心协力内存缓存技术、Nosql技术、HDFS大数量的新式SQL Server ?
结合传统数据库和新型分布式数据仓库的新一代公司级数据库产品 ?
一个最新的数据库中间件产品。

目标

低本钱的将长存的单机数据库和利用平滑迁移到“云”端,解决多少存储和业务范围迅猛增长状态下的数额瓶颈问题。

最紧要特性

支撑 SQL 92标准 协理Mysql集群,可以看作Proxy使用
辅助JDBC连接ORACLE、DB2、SQL Server,将其模拟为MySQL Server使用
扶助galera for mysql集群,percona-cluster或者mariadb
cluster,提供高可用性数据分片集群,自动故障切换,高可用性
,协理读写分离,协助Mysql双主多从,以及一主多从的格局,协理全局表,数据自动分片到四个节点,用于高效表关联查询
,扶助独有的基于E-R
关系的分片策略,实现了迅猛的表关联查询多平台帮忙,部署和实施简单。

优势

按照阿里开源的Cobar产品而研发,Cobar的安定团结、可靠性、出色的架构和性质,以及众多早熟的接纳案例使得MyCAT一开始就拥有一个很好的起点,站在巨人的肩头上,大家能见到更远。广泛吸取业界非凡的开源项目和换代思路,将其融入到MyCAT的基因中,使得MyCAT在广大下面都超过于如今此外一些同类的开源项目,甚至超过某些商业产品。MyCAT背后有一只强有力的技艺公司,其参加者都是5年以上资深软件工程师、架构师、DBA等,优良的技术公司保证了MyCAT的产质量料。
MyCAT并不依托于其他一个生意铺面,由此不像一些开源项目,将一些根本的特征封闭在其商业产品中,使得开源项目成了一个摆设。

深入规划

在支撑Mysql的功底上,后端增添更多的开源数据库和经贸数据库的协助,包括原生帮忙PosteSQL、FireBird等开源数据库,以及因此JDBC等模式直接补助其他非开源的数据库如Oracle、DB2、SQL
Server等落实更为智能的自我调节特性,如自行总结分析SQL,自动创设和调动目录,遵照数据表的读写频率,自动优化缓存和备份策略等落实更健全的监察管理效果与HDFS集成,提供SQL命令,将数据库装入HDFS中并可以快速分析集成卓越的开源报表工具,使之富有一定的数据解析的力量。

 

MyCat架构

图片 1 

 

 

MyCat官网:http://mycat.org.cn/

MyCat 下载:https://github.com/MyCATApache/Mycat-Server

MyCat文档:https://github.com/MyCATApache/Mycat-doc

 

 

延长阅读:

一步一步编写mysql中间件(学习Cobar和MyCat)

率先篇—起首摸底和搭建AIO  http://blog.csdn.net/crazy_hunter/article/details/41047215

第二篇–了解MySQL协议和剖析方法 
 http://blog.csdn.net/crazy_hunter/article/details/41074939

其三篇—-MySQL第一个包分析和处理HandshakePacket   http://blog.csdn.net/crazy_hunter/article/details/41120381

第四篇—-实现伪MySQL服务器,基于MySQL协议的HelloWorld  http://blog.csdn.net/crazy_hunter/article/details/41309131

 

 

=========================================================

 

 

Alibaba的Cobar真是强大.

 

 

多年来算是抽空研究了下Cobar,感觉这么些产品的确很不利(在文档方面比Amoeba强多了),特此推荐给我们。Cobar是Alibaba研发的关系型数据的分布式处理系列,该产品成功取代了原本基于Oracle的多少存储方案,目前早已接管了3000+个MySQL数据库的schema,平均每一天处理近50亿次的SQL执行请求。

第一,使用Cobar的着力效率如下:

分布式: 
Cobar的分布式重点是经过将表放入不同的库来实现: 

  1. Cobar援助将一张表水平拆分成多份分别放入不同的库来实现表的程度拆分 
  2. Cobar也襄助将不同的表放入不同的库 
  3. 多数气象下,用户会将上述二种办法混合使用 
    此间需要强调的是,Cobar不帮忙将一张表,例如test表拆分成test_1, test_2,
    test_3…..坐落同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。 

HA: 
在用户配置了MySQL心跳的意况下,Cobar可以自行向后端连接的MySQL发送心跳,判断MySQL运行情况,一旦运行出现非常,Cobar可以活动切换来备机工作。但需要强调的是: 
1.
Cobar的主备切换有二种触发情势,一种是用户手动触发,一种是Cobar的心跳语句检测到特别后自行触发。那么,当心跳检测到主机非凡,切换到备机,倘若主机复苏了,需要用户手动切回主机工作,Cobar不会在主机苏醒时自动切换回主机,除非备机的心跳也回到十分。 
2.
Cobar只检查MySQL主备十分,不关心主备之间的数额同步,因而用户需要在运用Cobar往日在MySQL主备上配备双向同步,详情可以参见MySQL参考手册。 

说不上,我们也急需专注Cobar的机能约束: 

1) 不协理跨库情形下的join、分页、排序、子查询操作。 
2) SET语句执行会被忽视,事务和字符集设置除外。 
3) 分库意况下,insert语句必须带有拆分字段列名。 
4) 分库情形下,update语句不能够更新拆分字段的值。 
5) 不支持SAVEPOINT操作。 
6) 暂时只辅助MySQL数据节点。 
7)
使用JDBC时,不辅助rewriteBatchedStatements=true参数设置(默认为false)。 
8) 使用JDBC时,不帮助useServerPrepStmts=true参数设置(默认为false)。 
9) 使用JDBC时,BLOB, BINARY,
VARBINARY字段不可以使用setBlob()或setBinaryStream()方法设置参数。 

接下来,我们来分析一下Cobar逻辑层次图: 
图片 2 
*
dataSource:数据源,表示一个现实的数据库连接,与物理存在的数据库schema一一对应。 
*
dataNode:数据节点,由主、备数据源,数据源的HA以及连接池共同构成,能够将一个dataNode明白为一个分库。 
* table:表,包括拆分表(如tb1,tb2)和非拆分表。 
* tableRule:路由规则,用于判断SQL语句被路由到实际咋样datanode执行。 
*
schema:cobar可以定义包含拆分表的schema(如schema1),也可以定义无拆分表的schema(如schema2)。 

Cobar扶助的数据库结构(schema)的层系关系具有较强的油滑,用户可以将表自由放置不同的datanode,也可将不同的datasource放置在同一MySQL实例上。在事实上行使中,我们需要通过部署文件(schema.xml)来定义大家需要的数据库服务器和表的遍布策略,这一点我们将在后头的设置和配置部分中牵线到。 

继之,我们来介绍Cobar的安装和部署步骤:

下边大家将应用一个最简便的分库分表的事例来表达Cobar的着力用法,数据库schema如下图(该实例也可参考: Cobar产品首页 )。 
图片 3 
1) 系统对外提供的数据库名是dbtest,并且其中有两张表tb1和tb2。 
2) tb1表的数额被映射到大体数据库dbtest1的tb1上。 
3)
tb2表的一部分数据被映射到大体数据库dbtest2的tb2上,此外一些数额被映射到大体数据库dbtest3的tb2上。 

1、环境准备 

操作系统:Linux或者Windows (推荐在Linux环境下运作Cobar) 
MySQL: http://www.mysql.com/downloads/  (推荐应用5.1以上版本) 
JDK: http://www.oracle.com/technetwork/java/javase/downloads/  (推荐应用1.6上述版本) 
Cobar: http://code.alibabatech.com/wiki/display/cobar/release/  (下载tar.gz或者zip文件) 

2、数据准备 

如果本文MySQL所在服务器IP为192.168.0.1,端口为3306,用户名为test,密码为空,大家需要创建schema:dbtest1、dbtest2、dbtest3,table:tb1、tb2,SQL如下: 

[sql]  view
plain
 copy

 

 

 

  1. #创建dbtest1  
  2. drop database if exists dbtest1;  
  3. create database dbtest1;  
  4. use dbtest1;  
  5. #在dbtest1上创建tb1  
  6. create table tb1(  
  7. id    int not null,  
  8. gmt   datetime);  
  9.    
  10. #创建dbtest2  
  11. drop database if exists dbtest2;  
  12. create database dbtest2;  
  13. use dbtest2;  
  14. #在dbtest2上创建tb2  
  15. create table tb2(  
  16. id    int not null,  
  17. val   varchar(256));  
  18.    
  19. #创建dbtest3  
  20. drop database if exists dbtest3;  
  21. create database dbtest3;  
  22. use dbtest3;  
  23. #在dbtest3上创建tb2  
  24. create table tb2(  
  25. id    int not null,  
  26. val   varchar(256));  

3、配置Cobar 

Cobar解压之后有五个目录: 
bin/:可执行文件目录,包含启动(start)、关闭(shutdown)和重启(restart)脚本 
lib/:逻辑类库目录,包含了Cobar所需的jar包 
conf/:配置文件目录,下边会详细介绍 
logs/:运行日志目录,最关键的log有两个:程序日志(stdout.log)和操纵台出口(console.log) 

布局文件的用法如下: 
log4j.xml:日志配置,一般的话保持默认即可 
schema.xml:定义了schema逻辑层次图中的所有因素,并动用这一个因素以及rule.xml中定义的平整组建分布式数据库系统 
rule.xml:定义了分库分表的规则 
server.xml:系统布局文件 

我们在schema.xml中布置数据库结构(schema)、数据节点(dataNode)、以及数据源(dataSource)。 

[html]  view
plain
 copy

 

 

 

  1. <?xml version=”1.0″ encoding=”UTF-8″?>  
  2. <!DOCTYPE cobar:schema SYSTEM “schema.dtd”>  
  3. <cobar:schema xmlns:cobar=”http://cobar.alibaba.com/"&gt;  
  4.    
  5.   <!– schema定义 –>  
  6.   <schema name=”dbtest” dataNode=”dnTest1″>  
  7.     <table name=”tb2″ dataNode=”dnTest2,dnTest3″ rule=”rule1″ />  
  8.   </schema>  
  9.    
  10.   <!– 数据节点定义,数据节点由数据源和任何部分参数社团而成。–>  
  11.   <dataNode name=”dnTest1″>  
  12.     <property name=”dataSource”>  
  13.       <dataSourceRef>dsTest[0]</dataSourceRef>  
  14.     </property>  
  15.   </dataNode>  
  16.   <dataNode name=”dnTest2″>  
  17.     <property name=”dataSource”>  
  18.       <dataSourceRef>dsTest[1]</dataSourceRef>  
  19.     </property>  
  20.   </dataNode>  
  21.   <dataNode name=”dnTest3″>  
  22.     <property name=”dataSource”>  
  23.       <dataSourceRef>dsTest[2]</dataSourceRef>  
  24.     </property>  
  25.   </dataNode>  
  26.    
  27.   <!– 数据源定义,数据源是一个现实的后端数据连接的意味。–>  
  28.   <dataSource name=”dsTest” type=”mysql”>  
  29.     <property name=”location”>  
  30.       <location>192.168.0.1:3306/dbtest1</location> <!–注意:替换为你的MySQL IP和Port–>  
  31.       <location>192.168.0.1:3306/dbtest2</location> <!–注意:替换为你的MySQL IP和Port–>  
  32.       <location>192.168.0.1:3306/dbtest3</location> <!–注意:替换为你的MySQL IP和Port–>  
  33.     </property>  
  34.     <property name=”user”>test</property> <!–注意:替换为你的MySQL用户名–>  
  35.     <property name=”password”>test</property> <!–注意:替换为你的MySQL密码–>  
  36.     <property name=”sqlMode”>STRICT_TRANS_TABLES</property>  
  37.   </dataSource>  
  38. </cobar:schema>  

咱俩注意到,上述配置实际上已经把图2中的数据库结构布局好了。dbtest首要映射的是dnTest1库(即192.168.0.1:3306/dbtest1库),而其间的tb2表则是比照规则rule1,被分配到dnTest2库(即192.168.0.1:3306/dbtest2库)和dnTest3库(即192.168.0.1:3306/dbtest3库)中。此外,规则rule1的定义可以在rule.xml中找到,代码如下: 

[html]  view
plain
 copy

 

 

 

  1. <?xml version=”1.0″ encoding=”UTF-8″?>  
  2. <!DOCTYPE cobar:rule SYSTEM “rule.dtd”>  
  3. <cobar:rule xmlns:cobar=”http://cobar.alibaba.com/"&gt;  
  4.   
  5.   <!– 路由规则定义,定义什么表,什么字段,选取什么路由算法。–>  
  6.   <tableRule name=”rule1″>  
  7.     <rule>  
  8.       <columns>id</columns>  
  9.       <algorithm><![CDATA[ func1(${id})]]></algorithm>  
  10.     </rule>  
  11.   </tableRule>  
  12.   
  13.   <!– 路由函数定义,应用在路由规则的算法定义中,路由函数可以自定义扩充。–>  
  14.   <function name=”func1″ class=”com.alibaba.cobar.route.function.PartitionByLong”>  
  15.     <property name=”partitionCount”>2</property>  
  16.     <property name=”partitionLength”>512</property>  
  17.   </function>  
  18. </cobar:rule>  

构成schema.xml中的内容,我们得以看到分表的条条框框是,按照id字段把tb2表中的数据分配到dnTest2和dnTest3五个分区中,其中id小于512的多寡会被内置dnTest2库的分区中,而其他的会被平放dnTest3库的分区中,更多路由算法可以参见《 路由文档 》。最后,我们来看一下server.xml的布局,代码如下。 

[html]  view
plain
 copy

 

 

 

  1. <?xml version=”1.0″ encoding=”UTF-8″?>  
  2. <!DOCTYPE cobar:server SYSTEM “server.dtd”>  
  3. <cobar:server xmlns:cobar=”http://cobar.alibaba.com/"&gt;  
  4.    
  5.   <!–定义Cobar用户名,密码–>  
  6.   <user name=”root”>  
  7.     <property name=”password”>passwd</property>  
  8.     <property name=”schemas”>dbtest</property>  
  9.   </user>  
  10. </cobar:server>  

此地的server.xml配置相比简单,只布置了当地Cobar服务的数据库结构、用户名和密码。在启动Cobar服务之后,使用用户名root和密码passwd就可以登录Cobar服务。 

4、运行Cobar 

先河Cobar服务很简短,运用bin目录下的start.sh即可(截至使用shutdown.sh)。启动成功之后,可以在logs目录下的stdout.log中看看如下日志: 

[html]  view
plain
 copy

 

 

 

  1. 10:54:19,264 INFO  ===============================================  
  2. 10:54:19,265 INFO  Cobar is ready to startup …  
  3. 10:54:19,265 INFO  Startup processors …  
  4. 10:54:19,443 INFO  Startup connector …  
  5. 10:54:19,446 INFO  Initialize dataNodes …  
  6. 10:54:19,470 INFO  dnTest1:0 init success  
  7. 10:54:19,472 INFO  dnTest3:0 init success  
  8. 10:54:19,473 INFO  dnTest2:0 init success  
  9. 10:54:19,481 INFO  CobarManager is started and listening on 9066  
  10. 10:54:19,483 INFO  CobarServer is started and listening on 8066  
  11. 10:54:19,484 INFO  ===============================================  

跟着,大家就可以运用“mysql -h127.0.0.1 -uroot -ppasswd -P8066
-Ddbtest”命令来报到Cobar服务了,再接下去的操作就和在此外MySQL
Client中相同了。比如,我们可以动用“show
databases”命令查看数据库,使用“show tables”命令查看数据表,如下图: 
图片 4 
随即,我们遵照下图中的SQL指定向数据表插入测试记录。 
图片 5 
可以见到,这里的tb2中富含了id为1、2、513的3条记下。而实际上,这3条记下存储在不同的物理数据库上的,我们可以到物理库上表达一下。 

关于Cobar的连接和行使方法和MySQL一样,Java程序中可以动用JDBC(提议5.1之上的本子),PHP中得以接纳PDO。当然,Cobar还提供HA、集群等高等的功效,更多音讯请参考其《 产品文档 》。此外,产品文档中还为我们提供了详实的PPT文档《Cobar原理及应用.ppt》来介绍Cobar在其实生产条件中的使用办法,真可谓之用心良苦啊! 

此外,特别解释一下我们莫不相比关心的心跳检测问题,Cobar的心跳检测关键用在偏下两个地点。 

1、在配置数据节点的时候,我们需要使用心跳检测来探测数据节点的运行境况。Cobar中应用举办SQL的艺术来进展探测,简单且实用。例如,我们可以把前边实例中的schema.xml中的dataNode配置成下面的旗帜。 

[html]  view
plain
 copy

 

 

 

  1. … …  
  2.   <!– 数据节点定义,数据节点由数据源和其余部分参数协会而成。–>  
  3.   <dataNode name=”dnTest1″>  
  4.     <property name=”dataSource”>  
  5.       <dataSourceRef>dsTest[0]</dataSourceRef>  
  6.     </property>  
  7.     <!–Cobar与后端数据源连接池大小设置–>  
  8.     <property name=”poolSize”>256</property>  
  9.     <!–Cobar通过心跳来实现后端数据源HA,一旦主数据源心跳战败,便切换来备数据源上行事–>  
  10.     <!–Cobar心跳是因而向后端数据源执行一条SQL语句,依据该语句的回到结果判断数据源的运转状态–>  
  11.     <property name=”heartbeat”>select user()<property>  
  12.   </dataNode>  
  13. … …  

2、当大家需要对Cobar作集群(cluster),举办负荷均衡的时候,我们也亟需利用心跳机制。不过这里的布局则是在server.xml中,代码如下: 

[html]  view
plain
 copy

 

 

 

  1. … …  
  2.   <!–组建一个Cobar集群,只需在cluster配置中把富有Cobar节点(注意:包括目前Cobar自身)都配备上便可–>  
  3.   <cluster>  
  4.     <!–node名称,一个node表示一个Cobar节点,一旦配置了node,当前Cobar便会向此节点定期发起心跳,探测节点的周转状态–>  
  5.     <node name=”cobar1″>  
  6.       <!–Cobar节点IP, 表示近来Cobar将会向192.168.0.1上安排的Cobar发送心跳–>  
  7.       <property name=”host”>192.168.0.1</property>  
  8.       <!–节点的权重,用于客户端的负荷均衡,用户可以经过命令查询某个节点的运作意况以及权重–>  
  9.       <property name=”weight”>1</property>  
  10.     </node>  
  11.     <!–当前Cobar将会向192.168.0.2上部署的Cobar发送心跳–>  
  12.     <node name=”cobar2″>  
  13.       <property name=”host”>192.168.0.2</property>  
  14.       <property name=”weight”>2</property>  
  15.     </node>  
  16.     <!–当前Cobar将会向192.168.0.3上配备的Cobar发送心跳–>  
  17.     <node name=”cobar3″>  
  18.       <property name=”host”>192.168.0.3</property>  
  19.       <property name=”weight”>3</property>  
  20.     </node>  
  21.     <!–用户还足以将Cobar节点分组,以便实现schema级其它细粒度负载均衡–>  
  22.     <group name=”group12″>  
  23.       <property name=”nodeList”>cobar1,cobar2</property>  
  24.     </group>  
  25.      <group name=”group23″>  
  26.       <property name=”nodeList”>cobar2,cobar3</property>  
  27.     </group>  
  28.   </cluster>  
  29. … …  

终极,简单看一下Cobar的实现原理。

率先是系统模块架构。 
图片 6 
从上图中可以看来,Cobar的前、后端模块都落实了MySQL协议;当接受到SQL请求时,会相继举行分解(SQL
Parser)和路由(SQL Router)工作,然后拔取SQL
Executor去后端模块获取数据集(后端模块还承担心跳检测效率);假如数据集来自两个数据源,Cobar则需要把多少集举行结合(Result
Merge),最终回到响应。整个经过应该相比较易于精晓, 

下边是Cobar的网络通讯模块架构。 
图片 7 
从上图中得以看看,Cobar拔取了主流的Reactor设计格局来拍卖请求,并动用NIO举行底层的数据交流,这大大升级系统的载重能力。其中,NIOAcceptor用于拍卖前端请求,NIOConnector则用于管理后端的连续,NIOProcessor用于管理多线程事件处理,NIOReactor则用来完成底层的事件驱动机制,就是看起来和Mina和Netty的网络模型比较一般。就算有趣味,我们仍是可以够到Cobar站点的下载页面(http://code.alibabatech.com/wiki/display/cobar/release)获取该项目的源码,真是太周到了,让我们为富有开源精神的阿里人掌声鼓励一下! 

 

https://my.oschina.net/u/222931/blog/507957

发表评论

电子邮件地址不会被公开。 必填项已用*标注