分布式数据存储

一、问题本质:为什么需要分布式数据存储

从第一性原理出发,分布式数据存储并不是为了“技术先进”,而是为了解决单机存储系统在现实世界中不可避免的三个约束

  1. 规模约束

    • 数据量、读写吞吐最终必然超过单机能力
  2. 可靠性约束

    • 硬件、网络、进程都会失败(Failure is normal)
  3. 时空约束

    • 用户分布在不同地理位置,光速和网络延迟不可消除

分布式系统 = 在不可靠组件之上,构建一个“看起来可靠”的整体


二、四层认知模型:稳定知识的分层结构

为了区分“长期有效的认知”与“阶段性的工程选择”,本文采用如下四层模型:

┌────────────┐│ 原理层     │ 复制状态机、一致性定义、因果关系├────────────┤│ 架构层     │ 主从 / 多主 / 无主 / 分片复制组├────────────┤│ 机制层     │ 日志复制、Quorum、版本向量、再平衡├────────────┤│ 工程层     │ TiDB、Raft 优化、具体实现取舍└────────────┘

越往上,知识越稳定;越往下,变化越快。


三、原理层:复制状态机与一致性的本质

3.1 复制的第一性原理

复制的本质不是“拷贝数据”,而是:

在多个节点上,以相同顺序执行相同状态变更。

这被抽象为 复制状态机(State Machine Replication)


3.2 一致性不是“对错”,而是“对用户的承诺”

一致性描述的不是系统内部,而是:

用户在时间维度上,对读写结果的可预期性

从弱到强,可以抽象为以下层级:

  1. 最终一致性

    • 只要不再写,最终会一致
  2. 单调读一致性

    • 不会“读倒退”
  3. 读己之写一致性

    • 自己写的,自己立刻能看到
  4. 因果一致性

    • 有因果关系的事件,顺序一致
  5. 线性一致性

    • 系统表现得像只有一个副本

一致性越强,系统自由度越小,代价越高。


四、架构层:三种复制架构的设计空间

复制架构的选择,本质是写入权力如何分配


4.1 主从复制:集中写入,简化一致性

核心思想:

收益:

代价:

主从复制牺牲的是写入可扩展性,换取一致性与实现简单性


4.2 多主复制:分散写入,拥抱冲突

核心思想:

适用场景:

关键转变:

系统不再“避免冲突”,而是“管理冲突”。

冲突处理策略:


4.3 无主复制:用概率换可用性

核心思想:

通过 Quorum(法定票数) 建立概率一致性:

代价:

无主复制选择的是:在分区与故障下,系统永远可写。


五、分区:规模的代价与复杂性的来源

复制解决可靠性,分区解决规模,而分区 + 复制 = 复杂性爆炸。


5.1 分区的本质

分区不是优化,而是不可逆选择


5.2 分区策略的权衡

策略优点代价
范围分区支持范围查询热点明显
哈希分区负载均衡不支持范围查询
一致性哈希扩展友好热点仍存在

没有完美分区,只有业务可接受的偏差


5.3 动态分区的意义

动态分区不是性能优化,而是:

让系统具备“自适应业务变化”的能力

它影响:


六、再平衡:在线系统中的“器官移植手术”

再平衡的最低目标:

  1. 服务不中断
  2. 只迁移必要数据
  3. 不引发级联故障

关键哲学:

再平衡不是越自动越好,而是可控比快速更重要


七、元数据与透明性:隐藏分布式的代价

分布式系统的终极目标:

对用户来说,像单机;对系统来说,可扩展;对运维来说,可治理。

为此,系统必须提供三种透明性:

  1. 分片透明
  2. 复制透明
  3. 位置透明

这意味着:


八、总结:分布式数据存储的设计哲学

  1. 分布式不是为了性能,而是为了**生存**
  2. 一致性不是对错,而是**承诺等级**
  3. 冲突不是异常,而是**并发的价格**
  4. 分区是规模的钥匙,也是复杂性的源头
  5. 所有设计,最终服务于**对复杂性的隐藏**

关联内容(自动生成)