📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。
📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。
📙不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

🌟 ShardingSphere 知识点绑定表
🍊 1. ShardingSphere 核心概念
ShardingSphere 是一款开源的分布式数据库中间件,致力于解决分布式数据库中的分片、治理、读写分离、分布式事务、透明路由、逻辑表与物理表映射、优化与监控等复杂问题。
🎉 1.1 数据分片
数据分片是将数据分散存储到多个数据库实例中的技术,旨在提升系统性能和可扩展性。
- 分片策略:包括范围分片、哈希分片、列表分片等,根据数据特点和业务需求选择合适的分片策略。
- 分片键:用于确定数据分片依据的字段,如用户ID。
- 分片算法:根据分片键和分片策略将数据分配到具体分片的方法,如线性哈希算法、范围哈希算法。
🎉 1.2 转换引擎
转换引擎负责将用户输入的SQL语句转换为ShardingSphere能够理解的内部格式,并进行相应的处理。
- SQL解析器:将SQL语句解析成抽象语法树(AST),便于后续处理。
- SQL执行器:执行解析后的SQL语句,完成数据操作。
- SQL重写器:将用户输入的SQL语句重写为ShardingSphere能够理解的内部格式,如添加分片键等。
🎉 1.3 读写分离
读写分离通过将数据库的读操作和写操作分配到不同的数据库服务器上,以提高系统性能和可用性。
- 主从复制:将主数据库的数据同步到从数据库,实现读写分离。
- 一主多从:一个主数据库对应多个从数据库,提高读操作性能。
🎉 1.4 分布式事务
分布式事务是指涉及多个数据库或服务的事务,ShardingSphere提供了分布式事务解决方案,以确保数据的一致性。
- 两阶段提交:确保数据一致性,但性能较低。
- SAGA模式:将分布式事务分解为多个本地事务,通过补偿机制保证一致性,性能较好。
🍊 2. ShardingSphere 数据分片
🎉 2.1 分片策略
ShardingSphere支持多种数据分片策略,包括:
- 范围分片:根据数据范围进行分片,适用于有序数据。
- 哈希分片:根据数据哈希值进行分片,适用于无序数据。
- 列表分片:根据数据列表进行分片,适用于数据量较小的情况。
🎉 2.2 分片键
ShardingSphere支持多种分片键类型,包括:
- 字段分片键:如用户ID。
- 常量分片键:如国家代码。
- 表达式分片键:如年份 + 用户ID。
🎉 2.3 分片算法
ShardingSphere支持多种分片算法,包括:
- 线性哈希算法:根据分片键的值进行线性哈希。
- 范围哈希算法:根据分片键的值进行范围哈希。
- 水平分区算法:根据分片键的值进行水平分区。
🍊 3. ShardingSphere 数据治理
🎉 3.1 数据迁移
ShardingSphere支持多种数据迁移方式,包括:
- 全量迁移:将源数据库中的所有数据迁移到目标数据库。
- 增量迁移:仅将源数据库中新增的数据迁移到目标数据库。
🎉 3.2 数据同步
ShardingSphere支持多种数据同步方式,包括:
- 全量同步:将源数据库中的所有数据同步到目标数据库。
- 增量同步:仅将源数据库中新增的数据同步到目标数据库。
🎉 3.3 数据一致性
ShardingSphere支持多种数据一致性保证机制,包括:
- 强一致性:所有分片的数据都保持一致。
- 最终一致性:最终所有分片的数据都会达到一致。
🎉 3.4 数据分片管理
ShardingSphere支持多种数据分片管理方式,包括:
- 手动管理:通过SQL语句创建、删除、修改分片。
- 自动管理:根据分片规则自动创建、删除、修改分片。
🍊 4. ShardingSphere 读写分离
🎉 4.1 读写分离策略
ShardingSphere支持多种读写分离策略,包括:
- 主从复制:将读操作分配到从库,写操作分配到主库。
- 多主复制:将读操作和写操作分配到多个主库。
🎉 4.2 读写分离配置
读写分离配置包括:
- 主库地址:如192.168.1.1:3306。
- 从库地址:如192.168.1.2:3306。
- 读写分离策略:如主从复制。
🎉 4.3 读写分离实现
读写分离实现包括:
- 拦截器:根据SQL语句类型判断是读操作还是写操作,并分配到相应的数据库实例。
- 代理:将读操作和写操作转发到相应的数据库实例。
🍊 5. ShardingSphere 分布式事务
🎉 5.1 分布式事务解决方案
ShardingSphere支持多种分布式事务解决方案,包括:
- 两阶段提交:协调器协调各个分片的事务状态,确保一致性。
- SAGA模式:将分布式事务拆分为多个本地事务,通过补偿机制保证一致性。
🎉 5.2 分布式事务管理器
ShardingSphere支持多种分布式事务管理器,包括:
- XA事务管理器:支持两阶段提交。
- Saga事务管理器:支持SAGA模式。
🎉 5.3 分布式事务一致性
ShardingSphere支持多种分布式事务一致性保证机制,包括:
- 强一致性:所有分片的事务状态都保持一致。
- 最终一致性:最终所有分片的事务状态都会达到一致。
🍊 6. ShardingSphere 透明路由
🎉 6.1 透明路由机制
透明路由机制根据路由策略将SQL语句路由到具体的数据库实例中。
- 拦截器:根据SQL语句类型和路由策略判断路由到哪个数据库实例。
- 代理:将SQL语句转发到相应的数据库实例。
🎉 6.2 路由策略
路由策略包括:
- 精确路由策略:根据SQL语句中的表名路由到具体数据库实例。
- 范围路由策略:根据SQL语句中的表名和分片键值路由到具体数据库实例。
- 哈希路由策略:根据SQL语句中的表名和分片键值的哈希值路由到具体数据库实例。
🎉 6.3 路由配置
路由配置包括:
- 数据源地址:如192.168.1.1:3306。
- 路由策略:如精确路由策略。
🍊 7. ShardingSphere 逻辑表与物理表映射
🎉 7.1 逻辑表与物理表关系
逻辑表与物理表关系是指逻辑表与物理表之间的映射关系。
- 单表映射:逻辑表与物理表一一对应。
- 多表映射:逻辑表与多个物理表对应。
- 联合映射:逻辑表与多个物理表联合映射。
🎉 7.2 映射规则
映射规则包括:
- 精确映射规则:逻辑表与物理表一一对应。
- 范围映射规则:逻辑表与多个物理表对应。
- 哈希映射规则:逻辑表与多个物理表的哈希值对应。
🎉 7.3 映射配置
映射配置包括:
- 物理表地址:如192.168.1.1:3306。
- 映射规则:如精确映射规则。
🍊 8. ShardingSphere 优化与监控
🎉 8.1 性能优化
ShardingSphere支持多种性能优化方法,包括:
- 缓存:缓存热点数据,减少数据库访问次数。
- 索引:建立合适的索引,提高查询性能。
- 读写分离:将读操作和写操作分配到不同的数据库实例,提高读写性能。
🎉 8.2 监控指标
ShardingSphere支持多种监控指标,包括:
- QPS:每秒查询次数。
- TPS:每秒事务次数。
- RT:响应时间。
- 网络流量:数据库实例之间的网络流量。
🎉 8.3 监控工具
ShardingSphere支持多种监控工具,包括:
- Zabbix:开源监控工具。
- Prometheus:开源监控工具。
- Grafana:开源监控工具。
🍊 9. ShardingSphere 与其他技术的集成
🎉 9.1 与数据库的集成
ShardingSphere支持与多种数据库集成,包括:
- MySQL:MySQL 5.7、8.0。
- Oracle:Oracle 12c、19c。
- PostgreSQL:PostgreSQL 10、11。
🎉 9.2 与中间件的集成
ShardingSphere支持与多种中间件集成,包括:
- Redis:Redis 5.0。
- Kafka:Kafka 2.4。
- RocketMQ:RocketMQ 4.4.0。
🎉 9.3 与云平台的集成
ShardingSphere支持与多种云平台集成,包括:
- AWS:Amazon RDS、Amazon Aurora。
- Azure:Azure Database for MySQL、Azure Database for PostgreSQL。
- 阿里云:阿里云 RDS、阿里云 PolarDB。
🍊 10. ShardingSphere 社区与生态
🎉 10.1 社区活动
ShardingSphere 社区定期举办线上和线下活动,包括:
- Meetup:线下技术交流活动。
- Webinar:线上技术分享活动。
- GitHub Issue:技术问题讨论。
🎉 10.2 生态合作伙伴
ShardingSphere 生态合作伙伴包括:
- 阿里巴巴:阿里巴巴云原生数据库团队。
- 腾讯云:腾讯云数据库团队。
- 华为云:华为云数据库团队。
🎉 10.3 开源项目贡献
ShardingSphere 鼓励开发者参与开源项目贡献,包括:
- 提交 Issue:报告问题。
- 提交 PR:贡献代码。
- 参与文档:贡献文档。
- 参与翻译:贡献翻译。
| 分片策略 | 优点 | 缺点 |
|---|---|---|
| 范围分片 | 适用于有序数据,易于理解和管理。 | 分片键值范围较大时,可能导致分片不均匀。 |
| 哈希分片 | 适用于无序数据,分片均匀。 | 分片键值变化时,可能导致数据迁移。 |
| 列表分片 | 适用于数据量较小的情况,易于理解和管理。 | 分片键值较多时,可能导致分片不均匀。 |
| 分片键类型 | 优点 | 缺点 |
|---|---|---|
| 字段分片键 | 适用于大部分场景,易于理解和管理。 | 分片键值变化时,可能导致数据迁移。 |
| 常量分片键 | 适用于数据量较小的情况,易于理解和管理。 | 分片键值较少时,可能导致分片不均匀。 |
| 表达式分片键 | 适用于复杂场景,灵活。 | 表达式复杂时,难以理解和管理。 |
| 分片算法 | 优点 | 缺点 |
|---|---|---|
| 线性哈希算法 | 简单易用,分片均匀。 | 分片键值范围较大时,可能导致分片不均匀。 |
| 范围哈希算法 | 适用于有序数据,易于理解和管理。 | 分片键值范围较大时,可能导致分片不均匀。 |
| 水平分区算法 | 适用于数据量较大、分片键值范围较大的场景。 | 管理复杂,难以理解。 |

博主分享
📥博主的人生感悟和目标

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。
- 《Java项目实战—深入理解大型互联网企业通用技术》基础篇的购书链接:https://item.jd.com/14152451.html
- 《Java项目实战—深入理解大型互联网企业通用技术》基础篇繁体字的购书链接:http://product.dangdang.com/11821397208.html
- 《Java项目实战—深入理解大型互联网企业通用技术》进阶篇的购书链接:https://item.jd.com/14616418.html
- 《Java项目实战—深入理解大型互联网企业通用技术》架构篇待上架
- 《解密程序员的思维密码--沟通、演讲、思考的实践》购书链接:https://item.jd.com/15096040.html
面试备战资料
八股文备战
| 场景 | 描述 | 链接 |
|---|---|---|
| 时间充裕(25万字) | Java知识点大全(高频面试题) | Java知识点大全 |
| 时间紧急(15万字) | Java高级开发高频面试题 | Java高级开发高频面试题 |
理论知识专题(图文并茂,字数过万)
| 技术栈 | 链接 |
|---|---|
| RocketMQ | RocketMQ详解 |
| Kafka | Kafka详解 |
| RabbitMQ | RabbitMQ详解 |
| MongoDB | MongoDB详解 |
| ElasticSearch | ElasticSearch详解 |
| Zookeeper | Zookeeper详解 |
| Redis | Redis详解 |
| MySQL | MySQL详解 |
| JVM | JVM详解 |
集群部署(图文并茂,字数过万)
| 技术栈 | 部署架构 | 链接 |
|---|---|---|
| MySQL | 使用Docker-Compose部署MySQL一主二从半同步复制高可用MHA集群 | Docker-Compose部署教程 |
| Redis | 三主三从集群(三种方式部署/18个节点的Redis Cluster模式) | 三种部署方式教程 |
| RocketMQ | DLedger高可用集群(9节点) | 部署指南 |
| Nacos+Nginx | 集群+负载均衡(9节点) | Docker部署方案 |
| Kubernetes | 容器编排安装 | 最全安装教程 |
开源项目分享
| 项目名称 | 链接地址 |
|---|---|
| 高并发红包雨项目 | https://gitee.com/java_wxid/red-packet-rain |
| 微服务技术集成demo项目 | https://gitee.com/java_wxid/java_wxid |
管理经验
【公司管理与研发流程优化】针对研发流程、需求管理、沟通协作、文档建设、绩效考核等问题的综合解决方案:https://download.youkuaiyun.com/download/java_wxid/91148718
希望各位读者朋友能够多多支持!
现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!
- 💂 博客主页: Java程序员廖志伟
- 👉 开源项目:Java程序员廖志伟
- 🌥 哔哩哔哩:Java程序员廖志伟
- 🎏 个人社区:Java程序员廖志伟
- 🔖 个人微信号:
SeniorRD
🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~
1万+

被折叠的 条评论
为什么被折叠?



