有proxy和client两种模式
proxy
相当于把中间件作为一个独立的服务了,它将接收到的SQL 语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。代表:Mycat、DRDS
client
中间件在Driver或者连接池的基础之上,增加了一层封装。我们使用时,以Java开发为例,需要先引入一个jar包。中间件接收持久层产生的sql,同样对sql进行分析等操作,然后才落实到具体的库上。
区别
1、proxy模式需要部署多节点服务,增加了网络IO,影响到了性能,但是对代码基本没有入侵性,方便易用。
2、client模式与其相反,不影响到性能,但是对代码有入侵性,需要管理配置。
中间件
MyCat
MyCat是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的的Server,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用MySQL 原生(Native)协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能支持分库分表和读写分离(scheme.xml)
TDDL
TDDL现时架构分为了3层,最上层的TDataSource负责分库分表路由,中间层TGroupDataSource 负责主备切换和读写分离,最下层AtomDataSource使用了剥离的Druid/JBOSS数据源并且可以动态改IP、连接信息等。3层数据源都可以单独使用,应对不同的应用场景。