分库分表是大型架构的必备技能,也是大厂经常考察的重点对象,下面我就全面来详解分库分表中间件@mikechen
分库分表中间件定义
分库分表:是数据库水平扩展的一种常见策略,用于处理大规模数据、和高并发请求。
如下图所示:
分库分表,这里分为两个方面,包含:分库、和分表两种策略。
1、分库
分库:就是将数据水平分散到多个数据库实例中,每个数据库实例可以部署在不同的服务器上,从而减轻单个数据库的压力。
还是举一个例子,比如:数据按照某个字段的值范围,分布到不同的库中。
例如:用户ID为1-10000的数据存储在库A,10001-20000的数据存储在库B,这就是分库。
2、分表
分表:就是在单个数据库实例内,将数据水平分散到多个表中,从而减轻单表的压力。
还是举一个例子,比如:根据某个字段的值范围分表。
例如:用户ID为1-10000的数据存储在表user_1,10001-20000的数据存储在表user_2,这就是分表。
总之,分库分表是数据库扩展中常用的策略,目的是提高系统的并发处理能力、和数据存储能力。
主流分库分表中间件
在了解完分库分表后,我们一起来看看目前市场主流的分库分表中间件有哪些呢?let’s go!
1.ShardingSphere
ShardingSphere 是一个开源的分布式数据库中间件解决方案,支持:分库分表、读写分离、分布式事务、数据加密……等多种功能。
ShardingSphere 通过统一的接口、和高性能的实现,为开发者提供了透明的分库分表支持,适用于Java等应用。
如下图所示:
主要包括三个核心组件:
- Sharding-JDBC:适用于 Java 应用程序,提供 JDBC 层的分库分表支持;
- Sharding-Proxy:基于 MySQL 协议的代理层,支持多语言应用,客户端无需修改代码,即可实现分库分表;
- Sharding-Sidecar :适用于 Kubernetes 环境下的微服务架构,提供与: Sharding-JDBC 类似的功能。
ShardingSphere 适用于各种需要分布式数据库管理的场景,比如:电商、社交网络…..等需要处理大规模数据,和高并发请求的场景。
2.TDDL
TDDL,全称是Taobao Distributed Data Layer,就是:淘宝分布式数据层。
TDDL是阿里巴巴集团内部开发的一款分布式数据库中间件,设计目标是:解决在电商业务中遇到的大规模数据、和高并发请求问题。
3.DRDS
阿里的TDDL,后续升级为:DRDS,全称是“Distributed Relational Database Service”,是一款:分布式关系型数据库服务。
DRDS整体架构,如下图所示:
DRDS支持:分库分表、读写分离、和分布式事务…等技术。
DRDS广泛应用于数据量大的场景,比如:电商、金融、游戏…等领域。
4.MyCAT
MyCAT 是基于阿里巴巴的 Cobar 项目开发的,是一个增强版的数据库中间件,支持多种数据库(如: MySQL、PostgreSQL…)等。
整体架构,如下图所示:
MyCAT 支持将数据分散到多个数据库实例、和多个表中,通过灵活的分片规则实现水平扩展。
比如:
- 范围分片:根据某个字段的值范围进行分片;
- 哈希分片:对某个字段进行哈希计算,然后按哈希值取模分片;
- 日期分片:根据日期字段进行分片,例如:按月、或按年分片;
5.Atlas
Atlas 是由360 公司开发的一款开源 MySQL 数据库中间件,可以实现 MySQL 数据库的水平扩展、和高可用性。
Atlas 支持分库分表,以及还支持读写分离,将写请求发送到主库,读请求发送到从库,从而提升系统的读写性能和可用性。
6.Vitess
Vitess 是一个开源的分布式数据库中间件系统,最初由 YouTube 开发,用于解决其在大规模 MySQL 集群中的扩展性问题。
Vitess 通过分库分表技术,将数据分散存储到多个 MySQL 实例中,从而提升数据库的存储能力、和并发处理能力。
作者简介
陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》