数据库路由中间件MyCat - 背景篇(2)
此文已由作者张镐薪授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
MyCat的前世今生
如前文所说,Amoeba、Cobar、MyCat等属于同宗一脉。若Amoeba能继续下去,Cobar就不会出来;若Cobar那批人不是都走光了的话,MyCAT也不会再另起炉灶。Cobar之后,有很多类似中间件仿照其架构以及思路,针对特定的业务场景,设计出了不同的中间件。MyCat算是其中业务场景比较全面,使用配置比较简便,性能优秀,而且功能算是稳定的。同类的中间件,都是针对特定场景或者功能进行设计,像某科技的hot某中间件,性能和功能更为稳定,但是业务场景有局限,扩展分布性不是很好。
所以,我们这里对MyCat进行较为全面的剖析,以供广大程序猿同志们的参考:)
MyCat架构对比
首先,我们参考MyCat的社区文档。对比下Amoeba、Cobar、MyCat这三个中间件的架构Amoeba在前端实现了MySQL协议栈,前端链接属于NIO实现,应用将SQL请求发往Amoeba,Amoeba经过请求解析请求路由将请求通过JDBC发到后端数据库集群。返回的结果经过合并与过滤返回到前端。
Cobar首先将后端JDBC换成了自己实现的原生MySQL通信层,并引入了池化的思想管理后端BIO连接池。实现自己的MySQL通信层,可以实现更多后端的功能,比如主备切换、读写分离、异步操作等。而且,实现了管理协议,可以进行动态配置
MyCat通过连接池管理前后端连接,并且前后端都有NIO与AIO的实现。功能与改造开发上更为丰富与灵活
总结-为什么选择MyCat
MyCat实现了MySQL的协议栈,可以理解为,Mycat就是MySQL Server,而Mycat后面连接的MySQL Server,就好象是MySQL的存储引擎,如InnoDB,MyISAM等,因此,Mycat本身并不存储数据,数据是在后端的MySQL上存储的,因此数据可靠性以及事务等都是MySQL保证的,简单的说,Mycat就是MySQL最佳伴侣,它在一定程度上让MySQL拥有了能跟Oracle PK的能力:D
MyCat功能非常全面,从动态配置,集群配置,结果聚合,读写分离、到分表分库、容灾备份等。而且可以用于多租户应用开发、云平台基础设施、让你的架构具备很强的适应性和灵活性,借助于即将发布的Mycat智能优化模块,系统的数据访问瓶颈和热点一目了然,根据这些统计分析数据,你可以自动或手工调整后端存储,将不同的表映射到不同存储引擎上,而整个应用的代码一行也不用改变。MyCat的框架思路与源代码也有很多可圈可点的地方。
虽然MyCat功能很全面,但是某些功能受限于开源产品以及人的思路不同,MyCat的全面并不是那么“全面”。比如,它对于某些MySQL语句的支持并不是那么理想,还有弱XA分布式事务。我们在应用MyCat的时候,需要根据自己的业务,来改造MyCat。
改造MyCat不是一件很困难的事,对于MyCat源代码的研究与改造也是一件很锻炼团队的事,改造成功后相信MyCat能够撑住未来很长一段时间的数据库管理需求,这真是一石二鸟的事情。MyCat社区在中国的开源社区中也算是最活跃的几个之一,这也是件很难得的事情。
接下来我们将从MyCat的使用开始,一步一步深入到MyCat的源代码原理及设计思路,最后结合具体应用场景调优MyCat。敬请期待
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 敏捷初体验--没有最好只有最合适
数据库路由中间件MyCat - 背景篇(2)的更多相关文章
- 数据库路由中间件MyCat - 使用篇(1)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 基本概念 直接介绍概念太枯燥了,还是拿个和背景篇相似的例子介绍 业务场景:客户完成下单,快递员接受并更新运单 ...
- 数据库路由中间件MyCat - 源代码篇(13)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 4.配置模块 4.2 schema.xml 接上一篇,接下来载入每个schema的配置(也就是每个MyCat ...
- 数据库路由中间件MyCat - 使用篇(3)上篇
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 全局序列号 数据切分后,原有的关系数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证数据唯 ...
- 数据库路由中间件MyCat - 源代码篇(7)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3. 连接模块 3.4 FrontendConnection前端连接 构造方法: public Fronte ...
- 数据库路由中间件MyCat - 源代码篇(15)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. public static void handle(String stmt, ServerConnectio ...
- 数据库路由中间件MyCat - 源代码篇(14)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 对于表的dataNode对应关系,有个特殊配置即类似dataNode="distributed(d ...
- 数据库路由中间件MyCat - 源代码篇(1)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 进入了源代码篇,我们先从整体入手,之后拿一个简单流程前端连接建立与认证作为例子,理清代码思路和设计模式.然后 ...
- 数据库路由中间件MyCat - 使用篇(4)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 配置MyCat 3. 配置conf/rule.xml 1.5GA版本中的规则配置比较笨,2.0中优化了一些, ...
- 数据库路由中间件MyCat - 使用篇(3)下篇
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 2. 配置conf/server.xml server.xml几乎保存了所有mycat需要的系统配置信息.其 ...
随机推荐
- [objc explain]: Non-fragile ivars
[objc explain]: Non-fragile ivars (2009-01-27 09:30 PM) Non-fragile instance variables are a hea ...
- UVa 1658 - Admiral(最小费用最大流 + 拆点)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Java: System.exit() 与安全策略
说明 System.exit() 的本质是通知 JVM 关闭. 一般来说,有两种禁用 System.exit() 的办法: 安全管理器 安全策略 本质都是JRE 提供的本地实现,在执行之前进行权限判断 ...
- PAT——1002. 写出这个数
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...
- [转载]对iOS开发中内存管理的一点总结与理解
对iOS开发中内存管理的一点总结与理解 做iOS开发也已经有两年的时间,觉得有必要沉下心去整理一些东西了,特别是一些基础的东西,虽然现在有ARC这种东西,但是我一直也没有去用过,个人觉得对内存操作 ...
- ARM 汇编指令集 特点之一:指令后缀
1.同一 指令 添加不同的后缀 就会有不同的功能! 例子: B (Byte) 功能不变,操作长度变为8位 H (Half Word) 功能不变,操作长度变为16位 S(Signed) 功能不变,操作 ...
- VS2017无法打开Razor视图文件
VS2017一直卡顿就在扩展和更新里把没用的插件关闭了.导致后来一直NETCORE的Razor视图文件打不开 查了资料才知道需要依赖 ASP.NET Core Razor Language Servi ...
- 提示AttributeError: 'module' object has no attribute 'HTTPSHandler'解决方法
今天在新机器上安装sqlmap,运行提示AttributeError: 'module' object has no attribute 'HTTPSHandler' 网上找了找资料,发现一篇文章ht ...
- Oracle恢复误删数据
1.先查出被删除的时间点: select * from flashback_transaction_query where table_name='表名'; 2.根据时间点恢复数据: insert i ...
- iOS 类似美团或饿了么评价中的星星评分控件
1.做的好几个项目都用到了评分控件,可以用来展示评分,也可以用来写评分,图片和间距大小都可以定制,之前就已经简单封装了一个,现在把它分享出来,有需要的拿去用. 2.下面是展示截图: image.p ...