当前位置: 首页 > news >正文

数据库高并发高可用解决方案

一、高可用方案(HA, High Availability)

  • ​缓存高可用​​:通过双写和双读主备,或利用缓存集群的数据同步与故障自动转移机制实现。
  • ​数据库高可用​​:
    • ​读高可用​​:通过读写分离(如MHA)及分库冗余实现。
    • ​写高可用​​:通过主从双备,结合keepalived与虚拟IP实现自动故障转移。

二、高并发方案

根据业务读写特点选择架构:

  • 读多写少、读并发高:采用主从分离。
  • 写并发高:采用水平分库。
  • 读写并发均高:先进行水平分库,再为每个分库部署主从集群。此外,可使用缓存缓解读并发压力。

2.1 读写分离、主从复制与分组架构

三者指同一架构模型,即主从复制(AB复制):将主库数据复制到一个或多个从库,主库负责写,从库负责读,通常为一主多从。在高可用场景中常简称为MHA。

2.1.1 优势
  • 支持更大读并发与吞吐量,提升读性能;写库独立,提升写性能。
  • 读写库分离,减少锁冲突,优化写性能。
  • 通过从库冗余实现“读高可用”。
  • 易于扩展,增加从库可显著提升读性能。
2.1.2 MySQL主从复制过程(异步)
  1. Master开启binlog,记录数据变更。
  2. Slave的IO线程向Master请求指定binlog及position之后的内容。
  3. Master的IO线程返回对应binlog内容及position。
  4. Slave将binlog写入relay-log,并创建master.info文件记录连接信息。
  5. Slave的SQL线程监控relay-log,解析并执行SQL,实现数据同步。

2.2 分库分表

2.2.1 水平切分(分片架构)
  • ​目标​​:线性提升写性能,降低单库数据量,解决数据量大导致的写瓶颈。
  • ​常见方案​​:
    • ​范围法​​:
      • 优点:保持数据顺序;精准控制数据量;易于扩展。
      • 缺点:负载可能不均衡(如新用户更活跃)。
    • ​哈希法​​:
      • 优点:数据与请求分布均衡。
      • 缺点:扩展时需数据迁移;一致性哈希可缓解此问题。
    • ​哈希+范围混合分片​​:折中方案,均衡数据与请求分布。
2.2.2 垂直切分
  • ​垂直分表​​:将低频或大字段拆分到扩展表,提升内存命中率与IO性能。
  • ​垂直分库​​:按业务拆分库,降低单库数据量,需结合业务可行性。

2.3 读写分离与分库分表结合

结合两者以进一步提升性能,但架构复杂度较高。

三、常见问题与解决方案

3.1 读写分离与水平分库的区别

  • ​数据量​​:主从分离各节点存全量数据;水平分库各节点存部分数据(1/n)。
  • ​目标​​:主从分离扩展读性能;水平分库扩展写性能。
  • ​场景​​:读多写少用主从;写多用分库;读写均高则先分库再主从。

3.2 主从分离的问题

  • 写节点单点风险,需通过主从双备+keepalived+虚拟IP实现高可用。

3.3 数据库架构选型

  • 初期:单库。
  • 读压力大:分组(主从)。
  • 数据量大:分片(水平分库)。
  • 属性访问频次高:垂直拆分。

3.4 水平切分:分库 vs. 分表

  • ​优先分库​​:避免磁盘IO竞争;易于扩展与迁移。

3.5 瞬时高并发处理

  • 通过MQ消息队列削峰填谷。

3.6 分库后的业务接入与数据访问

  • 通过代理切换数据源,业务层无感知。
  • 数据访问层需处理分片路由与数据聚合,可引入数据库中间件简化。

3.7 非Partition Key查询处理

  • ​全库扫描​​:效率低,但可并发优化。
  • ​索引法​​:建立映射表或缓存(如用户名映射主键)。
  • ​基因法​​:通过非Key属性生成分片位(如用户名生成分片基因)。
  • ​直接生成主键​​:风险为ID冲突,需确保均匀分布。

3.8 多非Partition Key查询

  • 对不可修改字段使用基因法,其他用索引法。

3.9 Partition Key批量查询

  • 法一:访问所有库,合并结果。
  • 法二:按路由规则只访问相关分片。

3.10 跨库分页与模糊查询

  • 跨库分页为业界难题,有多种方案。
  • 模糊查询或范围查询可借助ES等搜索引擎。

3.11 分库数据量与唯一主键

  • 数据量建议:无复杂查询时5千万–1亿条;有复杂查询时1千万–2千万条。
  • 唯一主键通过分布式ID生成器实现。

3.12 主从架构中的多主多从

  • 建议一主多从;若写瓶颈,可水平分库,每分片部署主从。
  • 多主多从需确保数据全量同步,避免数据不一致。

3.13 缓存的作用

  • 缓存高频、低频变数据,降低数据库压力,提升响应速度。

3.14 主从切换数据丢失与避免

  • ​丢数据风险​​:
    • 主库未完全同步时宕机。
    • 脑裂导致老主库仍接收写入。
  • ​恢复​​:通过备份的binlog人工恢复。
  • ​避免​​:
    • 使用双主热备+keepalived。
    • 切换前设置主库只读。

3.15 单库重启与连接管理

  • 重启通过redo log恢复数据,不丢数据。
  • 切换时可配置是否断开连接,如MHA可通过脚本控制。

3.16 分库分表依据

  • 单表数据量大导致SQL延迟高:分表。
  • 实例QPS达到上限、锁冲突严重:分库。

3.17 主从Binlog同步方式

  • 备库指定起始binlog位置后,主库主动推送新日志(基于长连接)。
http://www.cnnetsun.cn/news/8235.html

相关文章:

  • 终极嵌入式按键解决方案:MultiButton状态机库实战指南
  • ZyPlayer终极配置指南:3步打造专属影院级体验
  • gmhelper:5分钟快速掌握国密算法SM2/SM3/SM4的完整应用方案
  • 19、高级Shell编程与正则表达式过滤器
  • PHP兼容性检查工具完整指南
  • 基于元胞自动机交通模型的三车道Matlab代码:模拟车辆多车道行驶及可视化分析系统
  • 豆包手机二手价被炒到3.6万元;被曝开发“芯片定位”技术,英伟达:这不是后门;千问月活突破3000万 | 极客头条
  • Wan2.2-T2V-A14B适合哪些行业?五大垂直领域推荐
  • 基于西门子S7-200PLC的自动灌溉系统组态王组态 带解释的梯形图程序,接线图原理图图纸,io分配
  • 机器学习驱动的智能化电池管理技术与应用
  • 如何优化MinerU项目的PaddleOCR模型部署效率
  • SVG.js动画开发终极指南:从入门到精通
  • Python 对象序列化与存储库pickle详细介绍
  • 圣诞快乐!来自代码世界的祝福
  • 一致性的威力:AI如何在B/G端释放数据治理的真正生产力
  • 知行之桥三种接口详解:Webhook、Flow API 与 Admin API
  • CPFEM晶塑动态展示:VUMAT子程序高效率与多维度模型应用测试
  • 毕业设计实战:基于SpringBoot+MySQL的旅游网站设计与实现,从需求到测试全流程拆解,新手也能轻松通关!
  • 如何在没有电脑的情况下备份 iPhone
  • Python HTTPX性能优化实战:10个技巧解决90%的连接问题
  • 空调加热器MPC模型预测控制程序与修正Kalman滤波:附简洁文献与附图与运行指南
  • Spring Boot日志文件未生成问题排查
  • 2025CRM选型手册:主流CRM品牌客户 - 销售 - 团队管理能力 场景化对比
  • AI口碑决胜未来:2025年智能洞察与AI市场舆情分析平台深度对决
  • 5分钟掌握Nginx LDAP认证系统部署技巧
  • 基于否定选择算法的异常检测技术详解
  • 手把手根治Qwen-Agent工具重复调用:实战优化指南
  • 系统管理shutdown命令
  • AOT 与 GraalVM Native Image 深度解析
  • 告别单位换算烦恼!进销存软件让生意更省心