MyCat头脑风暴
高并发高可用架构演进 :
数据库、应用于一体?数据库与应用分离?数据库根据业务将表分到不同的库中?同一张表进行读写分离?表中数据根据需求分表
其中Mycat数据库中间件起到了读写分离,分库,分表的作用
1.解决的问题
读写分离 (Mysql主从复制)/分库分表 ? 多数据源 ? Java程序需要进行多个数据源的切换 / Java程序与MySQL紧耦合 —— Java程序与数据库解耦
高可用 ? 集群与容错机制 高并发 ? 分库+分表 —— 解决高并发高可用对数据库的压力
2.怎样解决
Mycat通过配置文件搭建一个逻辑数据库,向外暴露一个Mycat的访问接口[解耦] ,而底层通过多个数据节点DataNode(一个DataNode对应一个DataHost,而一个DataHost保证其高可用搭建读写分离集群writeHost,readHost(一主一从/双主双从)) [高可用],通过<table dataHost="">节点将不同业务的表分发到不同的库中,分散数据库压力,而相同表中数据量大时会遇到瓶颈,所以此时将表中数据根据<table rule="">根据分片规则分发到多个表中(不同库的不同的表),提高查询等的效率[高并发]
而所有这些操作都在Mycat内部解决,对于Java程序来说完全透明,和平常一样进行SQL的传输即可,Mycat接到SQL语句,对其进行拦截,后根据配置的一系列分库分表规则等进行解析SQL,分析SQL(分片分析,缓存分析,路由分析......),分发到后台的物理数据库,得到结果对结果进行整合后传回
3.如何使用
开发步骤 : 分析业务制定出分片规则等后配置好配置文件 --> 启动对应的物理数据库 -->使用Mycat执行建表操作
读写分离 ?同一个DataHost的主从复制
分库 ? 表分到不同的库中
分表 ? 数据分到不同的表中(不同的表又在不同的库中)