提起MyCAT,我的脑海里,总是浮现出这样一首偈。弘忍觉得自己老了,需要找一个接班人,于是,弘忍要求弟子们每人写一个偈子,根据偈子观察各位弟子的开悟程度,从而传授正宗禅宗的衣钵。弟子们心里其实都很明白,都知道师傅的衣钵传人一定是神秀,于是大家都没有写这个偈子。神秀也知道自己这个偈子的重要性,迟迟没有交出来,直到反复斟酌之后,才将上面这首偈写在墙上。
  MyCAT本应是最好的中间件。它继承了阿里cobar的衣钵,在此基础上增加了众多重要功能。只是浏览下其核心特性,就知道他们是多么的努力,让人敬佩。

  • 支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法
  • 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
  • 基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。
  • 支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
  • 基于Nio实现,有效管理线程,解决高并发问题。
  • 支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。
  • 支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。
  • 支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
  • 支持多租户方案。
  • 支持分布式事务(弱xa)。
  • 支持XA分布式事务(1.6.5)。
  • 支持全局序列号,解决分布式下的主键生成问题。
  • 分片规则丰富,插件化开发,易于扩展。
  • 强大的web,命令行监控。
  • 支持前端作为MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
  • 支持密码加密
  • 支持服务降级
  • 支持IP白名单
  • 支持SQL黑名单、sql注入攻击拦截
  • 支持prepare预编译指令(1.6)
  • 支持非堆内存(Direct Memory)聚合计算(1.6)
  • 支持PostgreSQL的native协议(1.6)
  • 支持mysql和oracle存储过程,out参数、多结果集返回(1.6)
  • 支持zookeeper协调主从切换、zk序列、配置zk化(1.6)
  • 支持库内分表(1.6)

  这些功能的背后,是一帮开发人员在默默的奉献。翻开这些核心人员的简历,他们身上都有一个共同的深深的JAVA烙印。他们懂JAVA,然而他们对数据库的理解和经验总是差了几分。
  举个简单例子,数据层高可用是中间件系统的核心功能之一。从数据库高可用来分,可以分为读高可用与写高可用。现在就主从复制场景下的写高可用,来一探MyCAT的功力。

  MyCAT对底层数据库高可用的管理,依赖于第三方软件。当主库挂掉之后,通过MHA或者DRDB等方案,来将另外一台主机升级为主库,该主库使用原主库的VIP,对外提供服务。这种实现方式,一旦虚拟IP机制出现故障,比如误漂移,就会造成写入错误节点、双写或者无法写入等重大故障。甚至在某些环境中虚拟IP是不可能的,比如多个机器不在同一个网段。因此使用了MyCAT的方案后,你需要时时监控各个组件,免得系统出现故障

  如果对于数据库高可用有深入的理解,那么选写入节点的核心就在于究竟哪个节点是可以写入的。在几乎所有第三方高可用方案中,都会把从库或者不可使用的主库都设置为read only,在切换完成之后,都会把新的主库设置为read write状态。如果中间件去判断相应的设置,就可以匹配几乎所有的第三方高可用方案。如果使用这个方案,我们就可以避免某些不稳定的组件。正应了六祖慧能的那首偈
  
  很小的一个例子,却可以看到MyCAT的JAVA开发者基因,也看到了对数据库理解不足的基因缺陷。正是对数据库理解的不足,导致了方案的复杂性和局限性。
  在这一点上,平民软件的OneProxy做的就不错,因为平民软件是专业的数据库公司,对数据库的运维、使用都有很强的经验。让复杂的方案变得简单,确实需要多方面的综合能力。

转载于:https://www.cnblogs.com/youge-OneSQL/p/6269425.html

“管中窥豹”,MyCAT的基因缺陷相关推荐

  1. Mycat分片规则详解

    1.分片枚举 通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下: <tab ...

  2. 使用Mycat构建MySQL读写分离、主从复制、主从高可用

    数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能. 从数据库的角度来说,对于大多数应用来说,从集中到分布,最基本的一个需求不是数据存储的瓶颈,而是在于计算的瓶颈,即S ...

  3. mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离

    数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...

  4. MyCAT常用分片规则之分片枚举

    MyCAT支持多种分片规则,下面测试的这种是分片枚举.适用场景,列值的个数是固定的,譬如省份,月份等. 在这里,需定义三个值,规则均是在rule.xml中定义. 1. tableRule 2. fun ...

  5. Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用

    MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服 ...

  6. 一文看懂MYCAT数据库服务器!

    下载文件,可前往MyCat官网:http://www.mycat.org.cn/ 建议下载1.6版本 l .配置环境: |- 最重要的MySql环境,因为MyCat就是服务于MySql数据库 |- j ...

  7. 分布式mysql中间件(mycat)

    官方地址: 主站:Mycat-server@github :  https://github.com/MyCATApache/Mycat-Server.git Mycat-web@github     ...

  8. docker中安装mycat

    MyCAT 是一个彻底开源的,面向企业应用开发的"大数据库集群" 支持事务.ACID.可以替代Mysql的加强版数据库 ? 一个可以视为"Mysql"集群的企业 ...

  9. 数据库水平切分(MyCat分片Join)

    2019独角兽企业重金招聘Python工程师标准>>> Mycat(proxy中间件层) Sharding-jdbc(TDDL为代表的应用层) 分片Join 1.全局表 2.Shar ...

最新文章

  1. note-在VisualStudio中使用正则表达式
  2. vs2008中常见错误解决方法汇总
  3. 未将对象引用设置到对象的实例--可能出现的问题总结
  4. HTML5中是否有浮点输入类型?
  5. 网络流量队列优先级相关知识点
  6. 服务器端使用sendRedirect跳转到客户端异常
  7. Xamarin效果第十七篇之AR GIS
  8. Tomcat 8.5 配置 SSL 证书 1
  9. 扫地机器人水箱背景_水箱尘盒组件及扫地机器人的制作方法
  10. 数字图像处理 采样定理_数字图像处理实验合集
  11. 【转】onAttachedToWindow()在整个Activity生命周期的位置及使用
  12. python em和web_浅析Python的web.py框架中url的设定方法
  13. 医学专业学语文数学英语计算机嚒,医学专业到底有哪些一级学科,你知道吗?...
  14. 最佳适应(BestFit)算法
  15. linux中etc目录的作用,/etc 目录的作用到底是干什么用的?
  16. zabbix3.4绘制网络拓扑图
  17. 科大讯飞的语音合成(播放)功能
  18. Ubuntu16.04创建用户时指定工作目录
  19. mysql数据库多表查询教程
  20. PCB入门使用技巧——个人笔记

热门文章

  1. VMware虚拟机中安装的Linux系统无法识别U盘解决方法
  2. MATLAB解方程组相关方法
  3. 面试:如何用最少的老鼠试出有毒的牛奶?
  4. pcb元器件焊接技巧
  5. Solr Tokenizers分词器介绍
  6. mysql为什么要用b+树
  7. 采用Pyinstaller将python程序打包成exe可执行程序
  8. 汇编语言练习_2_批量传送 条件转移
  9. 关于计算机学院 公众号的名字,好听的微信公众号名字
  10. 百度Q3财报公布,O2O转型志在必得