分库分表都有哪些框架?
作者:程序员马丁
在线博客:https://open8gu.com
大话面试,技术同学面试必备的八股文小册,以精彩回答应对深度问题,助力你在面试中拿个offer。
回答话术
分库分表常用的框架有两个,MyCat
以及 Apache ShardingSphere
生态框架。
从使用角度上来说,分为 JDBC 驱动增强和数据库代理:
- JDBC 驱动增强:在 Java 的 JDBC 层进行扩展服务,使用客户端直连数据库,无需额外部署服务和依赖。可以理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。
- 数据库代理:透明化的数据库代理端,通过实现数据库二进制协议,对异构语言提供支持。 透明化数据库操作,对 DBA 更加友好。
Apache ShardingSphere
有两款产品,分别是 ShardingSphere-JDBC
和 ShardingSphere-Proxy
两款产品,分别对应上述两种使用方式。MyCat
对应第二种方式。
两种方式各有利弊,分别是:
- JDBC 驱动增强:
- 优点:性能较高,通过 JDBC 直接向 MySQL 发起请求调用。
- 优点:使用较为简单,理论上无需修改代码,仅需使用
Apache ShardingSphere
的配置即可。 - 缺点:需要修改项目配置以及引入 Jar 包。
- 缺点:对应用的内存有一定影响。
- 数据库代理:
- 优点:无需对现有项目做任何配置或代码变更,将数据库的地址改为 Proxy 的地址即可。
- 优点:Proxy 对 Java 应用内存没有任何影响。
- 优点:分片后无法知道一条数据记录到底在那张表,Proxy 是屏蔽了分片逻辑,可直接操作逻辑表。
- 缺点:JDBC 操作 MySQL 是点对点的,但是 Proxy 多了一层链路。
问题详解
1. Mycat 分库分表框架
吐槽一下,MyCat 的官方网站域名估计过期了,显示需要备案。https://mycatone.top
1.1. Mycat 背景
Mycat 是 Mycat 社区开发的一款分布式关系型数据库(中间件)。它支持分布式 SQL 查询,兼容 MySQL 通信协议,以 Java 生态支持多种后端数据库,通过数据分片提高数据查询处理能力。
2013 年阿里的 Cobar
在社区使用过程中发现存在一些比较严重的问题,及其使用限制,经过 Mycat
发起人第一次改良,第一代改良版——Mycat
诞生。 Mycat
开源以后,一些 Cobar
的用户参与了 Mycat
的开发,最终 Mycat
发展成为一个由众多软件公司的实力派架构师和资深开发人员维护的社区型开源软件。
我们对 Cobar
的代码进行了彻底的重构,使用 NIO 重构了网络模块,并且优化了 Buffer
内核,增强了聚合,Join
等基本特性,同时兼容绝大多数数据库成为通用的数据库中间件。1.4 版本以后 完全的脱离基本Cobar
内核,结合 Mycat
集群管理、自动扩容、智能优化,成为高性能的中间件。我们致力于开发高性能数据库中间而努力。永不收费,永不闭源,持续推动开源社区的发展。
1.2. 参考资料
开源项目分为 Mtcat 和 Mycat2 两个仓库,Mycat2 是对 Mycat 的一次重构性升级。
2. ShardingSphere 生态框架
2.1. ShardingSphere-JDBC
前身是 ShardingJDBC 框架,也是早期大家使用最为广泛的分库分表框架。
定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。
- 适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC;
- 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, HikariCP 等;
- 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,PostgreSQL,Oracle,SQLServer 以及任何可使用 JDBC 访问的数据库。
2.2. ShardingSphere-Proxy
定位为透明化的数据库代理端,通过实现数据库二进制协议,对异构语言提供支持。 目前提供 MySQL 和 PostgreSQL 协议,透明化数据库操作,对 DBA 更加友好。
- 向应用程序完全透明,可直接当做 MySQL/PostgreSQL 使用;
- 兼容 MariaDB 等基于 MySQL 协议的数据库,以及 openGauss 等基于 PostgreSQL 协议的数据库;
- 适用于任何兼容 MySQL/PostgreSQL 协议的的客户端,如:MySQL Command Client, MySQL Workbench, Navicat 等。
2.3. 混合部署架构 JDBC + Proxy
2.4. 参考资料
ShardingSphere
官网:ShardingSphere 官网 sourl.cn/qNw6Y9
ShardingSphere GitHub
代码仓库:ShardingSphere GitHub sourl.cn/N9xgTw