【数据库集群:性能与高可用】

1.数据库集群是什么?

背景:单库困境

如果你的网站只有一个数据库,一旦用户增多就会面临两个问题:

1.性能瓶颈:所有的请求都会砸向一个数据库,同一时间数据库访问量过载,内存爆炸,CPU爆炸,读写太慢,整个系统卡死

2.单点故障:这台机器(单点)一旦因为任何原因(停电、网络断线、硬件老化、操作系统死机)挂掉,整个系统生态链上的所有业务(前端App、后端管理、客服系统)全部瘫痪,没有任何备选方案。

为了解决,引入了集群

将多台数据库服务器(节点)组合成一个整体,对外表现为一个逻辑上的单一数据库。

2.集群的三大核心模式

1.主从复制---解决读压力大

原理:一个主库(写),多个从库(读),分散压力

缺点:数据会有极短的同步延迟(毫秒级)

应用场景:内容型App(今日头条、知乎)、博客网站企业ERP后台(内部员工查询报表多)。

2.高可用集群---解决宕机(不能停机的业务)

原理:主库“挂了”时,通过哨兵/仲裁机制自动将一个从库或备用库升级为新主库,继续提供服务。

实现了故障自动转移,应用层几乎没有感知

应用场景:所有商业系统(电商订单、OA办公、财务系统、游戏充值)。

注意:这并不是“大数据量”的方案,而是“高可靠性”的标配。哪怕只有1万用户,只要你不想半夜爬起来修服务器,就需要它。

3.分布式分片集群---解决数据量大

原理:把一张巨大的表,按某个规则(如用户ID取模)拆散,存放到多台不同的服务器上。每台只存一部分数据(分片)。

是应对亿级数据的终极方案

缺点:分片查询非常复杂,通常需要中间件支持

应用场景:国民级应用(微信支付流水、淘宝订单库、大型物联网传感器数据)。

不同数据库的对比

数据库类型代表产品集群特点
传统关系型MySQL

通常指“主从+MHA/MGR”,强调高可用,分片需依赖中间件(如ShardingSphere)。

中间件:你把 SQL 发给中间件,它内置了“分片算法”(比如 user_id % 8),计算出这条数据该去 1 号库还是 5 号库,把 SQL 改掉再转发。

核心痛点:如果你查数据时不带分片键(比如查 where name="张三" 而不是 where user_id=100),中间件就疯了——它得把这条 SQL 广播给所有 8 个库,再把 8 个结果汇聚集合并返回,性能极差。

原生分布式TiDB / OceanBase

天生就是集群,内部自动分片和容灾,对应用完全透明,像使用单机一样简单。

核心架构(TiDB):

  • TiDB Server(计算层):负责解析你的 SQL,它不管数据在哪,只负责算。

  • TiKV(存储层):底层用类似 Raft 共识算法 将数据自动分成无数个 96MB 的小块(Region),并强制在 3 台机器上各存一份(副本)。

缺点:分布式事务需要两阶段提交,性能开销比单机大

NoSQLMongoDB / RedisRedis集群强调分片(Slot槽位),MongoDB强调副本集(Replica Set)的高可用。

Nosql---Redis

Redis是内存数据库,单机内存不可能无限大(比如 256GB 到顶了)。所以它的集群核心就是 CRC16 哈希槽(Slot) 机制。

它将整个数据空间划分为 16384 个槽位,比如 3 台机器各管一部分槽(机器A管 0-5000,机器B管 5001-10000)。

关键动作:当你执行 set key1 value1,Redis 客户端会先用 CRC16 算法算 key1 属于哪个槽,然后直接跳转到对应的机器去读写。如果连错了机器,Redis 会返回 MOVED 指令告诉客户端“重定向”。这要求客户端 SDK 必须支持槽位计算。

落地级对比表

维度MySQL + 中间件TiDB / OceanBaseRedis / MongoDB
对开发人员友好度地狱级(必须时刻关心分片键,SQL受限)天堂级(随便写SQL,完全不用管分片)中等(需学习特定API,但比MySQL中间件简单)
扩容(加机器)极难(需要数据重新哈希迁移,通常半夜停机)极简(自动均衡,不停机)Redis需要迁移槽(不停机但影响性能);MongoDB相对简单
事务支持弱(跨库事务极复杂,通常禁用)强(支持标准ACID,跨行跨表事务)弱(Redis不支持复杂事务,MongoDB支持文档级事务)
最适合的场景老旧系统改造、预算有限、SQL极度复杂金融核心、海量订单、新项目大集群Redis:缓存/计数器;MongoDB:JSON文档存储、日志系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值