2014中华架构师大会
中华数据库行业协会
MyCat前世今生
分布式数据库中间件
MyCAT介绍
目录
• 项目背景介绍
• Cobar之红与黑
• MyCAT横空出世
• MyCAT体系组成
• MyCAT路线图
• MyCAT部署
• MyCAT的ER分片
• MyCAT的性能指标
• MyCAT开发中遇到几个S级的问题
• MyCAT目前的使用情况
• MyCAT社区情报
• 欢迎加入
项目背景介绍
去IOE的大趋势+互联网应用的蓬勃发展
数据表越来越大,几千万到几个亿
而正版Oracle集群很昂贵,所以?
免费的MySQL 分表分库 中间件
低廉的X86服务
器(云主机)
Cobar之红与黑
MySQL-
Proxy Amoeba Cobar
2012年6月
• 设计精密,结构紧凑,代码
质量高,文档比较完善,安
装使用比较简单,容易上手
• 经过大量生产应用的实践
考验,发现和解决了很多实
际问题,稳定性好,值得信
赖
• 是目前国产开源的中间件
软件中技术难度、文档、成
熟度、应用范围等几个关键
指标排名都数得上的软件
• 宣传有点夸大,一些基础功能缺失,
比如服务端的分表查询结果集合
并,排序等,导致应用开发的复杂
度
• 分表分库的规则不够完善,缺乏对
常规关系表的分片支持,一些应用
难以迁移到Cobar上
• 在一些关键特性上的设计不够到
位,导致在特定情况下系统的意外
故障,如假死,慢SQL阻塞
• 目前Cobar已死,对于之前使用
Cobar的用户来说,是最大的遗憾
MyCAT横空出世
MyCAT
站在巨人肩膀上,所以走的更远
Cobar
Foundation DB的
精华
其他开源组件
还有更重要的一点,不是一个人,而是
一帮人在参与MyCAT的开源事业
服务端分片数据合并、排序、分组功
能实现
前后端Socket都是AIO异步框架解决
阻塞和假死问题
真正实现了基于MySQL实例的连接
池共享和管理机制
参考FoundationDB的概念,提出并支
持独有的ER关系分片
支持存储过程
支持SQL自定义拦截机制
支持SQL92标准语法
读写分离
More…..
MyCAT体系组成
OpenCloudDB
MyCAT
Server
MyCAT Web
MyCAT Balance
MyCAT Server是核心,来源于Cobar,
作为MySQL 服务器,客户端直接连接
并访问
MyCAT Web是管理模块,目标是配置、
监控、运维于一体,通过MyCAT
Server的9066端口远程执行管理命令,
未来的集群管理、数据迁移等功能也
在这里实现
MyCAT Balance是负载均衡器,类似
HA Proxy,目标是支持管理指令,动
态增加MyCAT Server节点,不停机进
行运维和升级
目前MyCAT Web与MyCAT Balance都处于停滞状态,缺乏志愿者
MyCAT路线图
版本实现后端NIO非阻塞模式并实现服务端的数据归并
版本实现后端连接池优化和管理,并增加一些实用特性
版本实现前后端的AIO优化并对ER分片逻辑进行优化
版本实现类似存储过程写法的人工智能跨分片SQL机制
版本实现NoSQL统一支持
MyCAT部署
HA
Proxy
MyCAT Server
MySQL
Server
MySQL
Server
MyCAT Server
MyCAT Server MySQL
Server
MySQL
Server
Master Slaver
Master Slaver
MySQL
Server
MySQL
Server
Master Slaver
More……
Client
MyCAT的ER分片
Master Slaver
Master Slaver
More……
Select id from customer where
=XXX(_id)
• 若cutomer表的分片字段是id,则直接根据分片规则找到此Id对应的存储节点
DataNode,把子表Order的记录放到此分片上
• 否则,上述SQL执行,会在某个分片上返回一条记录,此分片就是子表Orders
要存储的DataNode
相对直连MySQL,程序连接MyCAT后的性能为80-90%左右
多个分片在多个独立的物理机上,总体吞吐性能接近N倍,即单台
MYSQL插入的TPS为1万,则5台机器的MYSQL分片集群,TPS
接近5万(同时5台机器都插入数据)
目前测试过的最大分片表的数据为26亿,单表分片3000万,
一万个网关同时插入数据,当数据库存量在10亿以内时,吞吐量
为1500条/秒,10个用户并发查询1万条记录的时间为左右;当
数据库存量扩展到亿时,吞吐量降为1000条/秒,20个用户并
发查询1万条记录的时间为左右,完全符合预计的目标。
MyCAT的性能指标
Master Slaver
More……
MyCAT开发中遇到的几个S级问
题
• 数据报文顺序错乱问题,此问题最后发现是由于不恰当的发送
逻辑(必须要发送队列为空才直接送到Socket)
• 事务隔离问题,程序直接连接数据库操作的结果,MyCAT看不
到,最终排查是因为MyCAT连接池的连接没有重置
AutoCommit位导致数据隔离
• 结合内存+文件实现结果集的排序和聚合功能,至今没有实现
全靠MyCAT社区的努力,很多疑难杂症才逐一
澄清和解决