Cobar是阿里巴巴研发的关系型数据的分布式处理系统,是提供关系型数据库(MySQL)分布式服务的中间件,该产品成功替代了原先基于Oracle的数据存储方案,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明。

产品在阿里巴巴稳定运行3年以上。

接管了3000+个MySQL数据库的schema。

集群日处理在线SQL请求50亿次以上。

集群日处理在线数据流量TB级别以上。

Cobar的核心功能:

分布式:

Cobar的分布式主要是通过将表放入不同的库来实现:

Cobar支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分

Cobar也支持将不同的表放入不同的库

多数情况下,用户会将以上两种方式混合使用

要强调的是,Cobar不支持将一张表,例如test表拆分成test_1, test_2, test_3…..放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。

HA:

在用户配置了MySQL心跳的情况下,Cobar可以自动向后端连接的MySQL发送心跳,判断MySQL运行状况,一旦运行出现异常,Cobar可以自动切换到备机工作。需要强调的是:

Cobar的主备切换有两种触发方式,一种是用户手动触发,一种是Cobar的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。

Cobar只检查MySQL主备异常,不关心主备之间的数据同步,因此用户需要在使用Cobar之前在MySQL主备上配置双向同步,详情可以参阅MySQL参考手册。

Cobar的功能约束

不支持跨库情况下的join、分页、排序、子查询操作。

SET语句执行会被忽略,事务和字符集设置除外。

分库情况下,insert语句必须包含拆分字段列名。

分库情况下,update语句不能更新拆分字段的值。

不支持SAVEPOINT操作。

暂时只支持MySQL数据节点。

使用JDBC时,不支持rewriteBatchedStatements=true参数设置(默认为false)。

使用JDBC时,不支持useServerPrepStmts=true参数设置(默认为false)。

使用JDBC时,BLOB, BINARY, VARBINARY字段不能使用setBlob()或setBinaryStream()方法设置参数。

Cobar逻辑层次图

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的前、后端模块都实现了MySQL协议;当接受到SQL请求时,会依次进行解释(SQL Parser)和路由(SQL Router)工作,然后使用SQL Executor去后端模块获取数据集(后端模块还负责心跳检测功能);如果数据集来自多个数据源,Cobar则需要把数据集进行组合(Result Merge),最后返回响应。

Cobar采用了主流的Reactor设计模式来处理请求,并使用NIO进行底层的数据交换,这大大提升系统的负载能力。其中,NIOAcceptor用于处理前端请求,NIOConnector则用于管理后端的连接,NIOProcessor用于管理多线程事件处理,NIOReactor则用于完成底层的事件驱动机制,就是看起来和Mina和Netty的网络模型比较相似。

转自:http://www.biaodianfu.com/cobar.html

netty mysql 中间件_Cobar_基于MySQL的分布式数据库服务中间件相关推荐

  1. mysql中ddl和ddm_浅析分布式数据库中间件DDM

    前言 DDM是什么?这是华为云Paas推出的分布式数据库中间件,DDM(Distributed Database Middleware)是一个实现了Mysql协议栈的服务器,前端用户可以把它看做一个数 ...

  2. svn mysql认证_SVN基于MySQL认证

    SVN的简介和工作原理 Subversion(简称svn)是近几年崛起的版本管理软件,是cvs的接班人,目前绝大多数开源软件都使用svn作为代码版本管理软件.Subversion支持linux和win ...

  3. vsftp服务器mysql认证_基于mysql控制vsftp的用户认证机制

    一.简介 vsftpd 是"very secure FTP daemon"的缩写,安全性是它的一个最大的特点.vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以 ...

  4. mysql 没有 advisor_基于mysql的SQLadvisor工具一次优化尝试

    基于mysql的SQLadvisor工具一次优化尝试 使用方式: 1 1> [root@SQLAdvisor ~]# getenforce 2 Disabled 3 安装SQLAdvisor 4 ...

  5. svn基于mysql认证_Svn基于mysql做登陆认证

    不做权限控制的登陆认证 基础环境 Centos 6 Apache 2.2 Svn 1.6 Mysql 5.1 yum -y install mysql mysql-devel mysql-server ...

  6. mysql in 分组,基于mysql实现group by取各分组最新一条数据

    前言: group by函数后取到的是分组中的第一条数据,但是我们有时候需要取出各分组的最新一条,该怎么实现呢? 本文提供两种实现方式. 一.准备数据 二.三种实现方式 1)先order by之后再分 ...

  7. 分布式数据库中间件对比总结MyCat Cobar Sharding-jdbc

    分布式数据库中间件对比总结(1) 目前数据库中间件有很多,基本这些中间件在下都有了解和使用,各种中间件优缺点及使用场景也都有些心的.所以总结一个关于中间件比较的系列,希望可以对大家有帮助. 1. 什么 ...

  8. 工行高级经理林承军:工行基于 MySQL 构建分布式架构的转型之路

    中生代技术 链接技术大咖,分享技术干货 全文:7200字 本文作者:林承军,中国工商银行软件开发中心高级经理,有用多年开放平台相关技术研究及实施经验,多次参与工行重点项目的原型技术研究.IT 架构转型 ...

  9. Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结

    一.基于数据库实现分布式锁 1.1.悲观锁 利用select - where - for update 排他锁.注意: 其他附加功能与实现一基本一致,这里需要注意的是"where name= ...

最新文章

  1. lintcode-34-N皇后问题 II
  2. 018_rate评分
  3. QTP、LoadRunner、QC工具下载地址
  4. Linux——批量查找替换方法(VIM和sed)
  5. win10安装时,提示“我们无法创建新的分区,也找不到现有分区”
  6. 基于Python+Django+MYSQL的校园食堂点餐管理系统
  7. DSAPI QQ用户相关
  8. Android开机动画过程
  9. 如何重置HDX卡的固件(firmware)
  10. 【按键精灵】一步两步脚本教程
  11. 采用 Python 机器学习预测足球比赛结果
  12. JavaScript基础知识
  13. 如何快速找到自己手机号码或邮箱注册过哪些网站
  14. 用MySQL绘制新年祝福图形_qq空间留言代码之新年祝福篇
  15. 计算机u盘设备无法启动不了,U盘不能识别,该设备无法启动。(代码10)
  16. Elasticsearch——Bboss
  17. 【编译原理】自上而下语法分析(CC++源码+实验报告)
  18. OpenCV-趣味小游戏-手掌击球
  19. @Autowired报空指针NullPoint
  20. 九轴传感器MPU9250数据读取磁力计

热门文章

  1. 基于SOA架构集成spring-boot+mybatis+dubbo+Druid+zookeeper
  2. 《PHP、MySQL和Apache入门经典(第5版)》一2.7 基本安全规则
  3. Linux备份策略研究
  4. 中油C语言第一次在线作业,中石油华东《程序设计(C语言)》2020年春季学期在线作业(二)...
  5. 百度关键词抓取工具_阿里巴巴国际站运营关键词抓取工具
  6. nvsip能用别的软件吗_为什么很多企业转向了 Golang? Java, Python, C#没落了吗?
  7. Grafana WebHook 报警通知踩坑系列,支持报警截图发钉钉卡片报警!!!
  8. centos6安装mysql 5.5_CentOS6.5上安装MySQL5.5
  9. RocketMQ(二)——系统架构及基本知识
  10. q超级会员都有什么鸿蒙,超级会员+豪华绿钻,超值四开!