0

0

SQL读写分离如何实现_业务接入架构设计说明【教学】

舞姬之光

舞姬之光

发布时间:2025-12-21 16:54:09

|

310人浏览过

|

来源于php中文网

原创

SQL读写分离需通过中间层或应用层路由控制实现写主读从,保障一致性、自动切换与业务无感;核心在于路由策略设计、业务接入改造及上线前影子流量、宕机演练和慢SQL检查。

sql读写分离如何实现_业务接入架构设计说明【教学】

SQL读写分离不是简单配两个数据库地址就能生效,核心在于让写操作只走主库、读操作尽量走从库,同时保障数据一致性、故障自动切换和业务无感。关键不在数据库本身,而在中间层或应用层的路由控制。

一、常见实现方式对比(选型依据)

目前主流有三类方案,适用不同阶段和团队能力:

  • 代理层方案(如MyCat、ShardingSphere-Proxy、MaxScale):数据库前面加一层代理,SQL进来后由代理解析并路由。优点是业务零改造,缺点是多一跳网络、代理自身成单点(需集群部署)、复杂SQL可能解析失败。
  • JDBC驱动增强(如ShardingSphere-JDBC、TDDL):替换应用的数据源驱动,在应用进程内完成路由。性能好、支持灵活策略(如强制走主库),但需升级依赖、对应用有一定侵入性。
  • 应用层手动控制(Spring AbstractRoutingDataSource + AOP):完全由业务代码决定读写库,最灵活也最可控。适合中小系统或对一致性要求极高的场景,但容易误用(比如在事务中读从库导致脏读)。

二、路由策略设计要点

不能所有读都扔给从库,必须结合业务语义判断是否可读从库:

  • 强一致性读必须走主库:比如用户刚提交订单,紧接着查订单详情;或任何“写后即读”场景。可通过注解(如@Master)或线程上下文标记强制主库。
  • 从库延迟容忍度要量化:监控从库复制延迟(Seconds_Behind_Master 或 GTID差值),超过阈值(如500ms)自动降级读主库,避免展示过期数据。
  • 读请求打散与负载均衡:多个从库之间按权重轮询或根据响应时间动态调整,避免热点从库拖垮整体读性能。

三、业务接入关键改造项

无论选哪种技术方案,业务侧至少需明确以下几点:

Smart Picture
Smart Picture

Smart Picture 智能高效的图片处理工具

下载
  • 事务边界必须清晰:Spring中@Transactional方法内默认走主库,但若方法里混调了标@Slave的查询,可能报错或不生效——建议事务内全部操作统一走主库。
  • 全局唯一ID不能依赖从库生成:自增主键、时间戳+机器号等方案必须在主库生成,否则从库回放时可能冲突。
  • 缓存与数据库一致性需重审:更新后删缓存,再查时若读从库可能命中旧数据+旧缓存,形成双重误差。建议更新后主动刷新缓存,或缓存key带上主从标识。

四、上线前必做的三件事

避免“切完就炸”,验证比配置更重要:

  • 影子流量验证:把线上读请求双写到新读链路,比对主从返回结果是否一致(尤其关注分页、聚合、关联查询)。
  • 主库宕机演练:手动停止主库,确认写失败告警触发、读自动切到从库、且延迟监控及时上报。
  • 慢SQL穿透检查:确保慢查询日志同时采集主从库,避免因从库索引缺失或统计信息陈旧导致执行计划劣化。

读写分离不是银弹,它解决的是读多写少场景下的扩展瓶颈。设计时先理清哪些读可以异步、哪些必须实时,再匹配技术方案。稳住一致性,再谈性能提升。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

679

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

346

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

675

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

573

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

415

2024.04.29

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号