MyCat:第二章:Mycat前世今生,必看的100道MySQL数据库经典面试题解析

Cobar在分库分表方面展现出强大的功能,但面临假死、高可用性陷阱、只实现一半的NIO等问题。Cobar的后端与MySQL交互为阻塞模式,导致性能瓶颈。此外,它不支持读写分离,配置文件热装载时会中断业务。这些问题在Mycat中得到了改进,如采用全NIO通讯、智能的高可用性和批处理优化等。
摘要由CSDN通过智能技术生成

经接管了3000+个MySQL数据库的schema,平均每天处理近50亿次的SQL执行请求。

50亿有多大?99%的普通人类看到这个数字,已经不能呼吸。当然,我指的是**RMB**。99%的程序猿除了对工资比较敏感,其

实对数字通常并不感冒。上面这个简单的数字描述,已立刻让我们程序型的大脑短路。恨不得立刻百度Cobar,立刻

Download,立刻熬夜研究。做个简单的推算,50亿次请求转换为每个schema每秒的数据访问请求即TPS,于是我们得到一个让

自己不能相信的数字:20TPS,每秒不到20个访问。

Cobar最重要的特性是分库分表。Cobar可以让你把一个MySQL的Table放到10个甚至100个位于不同物理机上的MySQL服务器

上去存储,而在用户看来是一张表(逻辑表)。这样功能很有价值。比如:我们有1亿的订单,则可以划分为10个分片,存储到

2-10个物理机上。每个MySQL服务器的压力减少,而系统的响应时间则不会增加。看上去很完美的功能,而且潜意识里,执行

这句SQL:

select count(*) from order

100%的人都会认为:会返回1条数据,但事实上,Cobar会返回N条数据,N=分片个数。

接下来我们继续执行SQL:

select count(*) from order order by order_date

你会发现奇怪的乱序现象,而且结果还随机,这是因为,Cobar只是简单的把上述SQL发给了后端N个分片对应的MySQL服务器去执

行,然后把结果集直接输出….

再继续看看,我们常用的Limit分页的结果…可以么?答案是:**不可以**

这个问题可以在客户端程序里做些工作来解决。所以随后出现了Cobar Client。据我所知,很多Cobar的使用者也都是自行开发

了类似Cobar Client的工具来解决此类问题。从实际应用效果来说,一方面,客户端编程方式解决,困难度很高,Bug率也居高

不下;另一方面,对于DBA和运维来说,增加了困难度。

当你发现这个问题的严重性,再回头看看Cobar的官方文档,你怅然若失,四顾茫然。

接下来,本文将隐藏在Cobar代码中那些不为人知的秘密逐一披漏,你洞悉了这些秘密,就会明白Mycat为什么会横空出世。

Cobar的十个秘密

第一个秘密:Cobra会假死?

是的,很多人遇到这个问题。如何来验证这点呢?可以做个简单的小实验,假如你的分片表中配置有表company,则打开mysql终

端,执行下面的SQL:

select sleep(500) from company;

此SQL会执行等待500秒,你再努力以最快的速度打开N个mysql终端,都执行相同的SQL,确保N>当前Cobra的执行线程数:

show @@threadpool

的所有Processor1-E的线程池的线程数量总和,然后你再执行任何简单的SQL,或者试图新建立连接,都会无法响应,此时

show @@threadpool

里面看到TASK_QUEUE_SIZE已经在积压中。

不可能吧,据说Cobra是NIO的非阻塞的,怎么可能阻塞!别激动,去看看代码,Cobra前端是NIO的,而后端跟Mysql的交互,

是阻塞模式,其NIO代码只给出了框架,还未来得及实现。真相永远在代码里,所以,为了发现真相,还是转行去做码农吧!貌</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值