分布式系统学习

如何协调多台机器高效、可靠地完成统一目标

单机系统引发的问题:

  1. 存储问题:

PB级数据,单机根本无法存储全部数据

  1. 计算问题:

单机CPU和内存无法快速处理海量数据(如排序1TB数据单机需数小时)

  1. 可靠性问题:

通过多台机器协同工作,解决以下问题:

单机存储不足 -> 数据分片(Sharding)+ 多副本存储

单机算力不足 -> 并行计算(如MapReduce)

单点故障风险 -> 冗余设计 + 自动容错(如GFS多副本)

高并发请求处理 | 负载均衡 + 横向扩展(如BigTable分片)

什么是MapReduce

阅读MapReduce

核心思想: 分而治之

统计全网网页中单词频率。

三阶段:

Map阶段:每台机器处理本地数据,输出<word, 1>。

Shuffle阶段:按单词分组,发送到Reduce节点。

Reduce阶段:合并相同单词的计数。

问题:

数据分布与存储问题

  1. 数据分片(Sharding)

如何将海量数据拆分到不同机器上?

  1. 数据复制(Replication)

如何保证数据冗余和高可用?

一致性与共识问题

  1. 一致性模型

多副本间如何保持数据一致?

  1. 共识算法

如何让多个节点对某个值达成一致?

容错与高可用问题

  1. 故障检测

如何快速发现节点故障?

  1. 恢复机制:

故障后如何恢复数据和服务?

通信与协同问题:

  1. 远程调用(RPC)

如何让跨节点调用像本地调用一样简单?

  1. 分布式锁(Distributed Lock)

如何避免多节点并发修改同一资源?

资源调度与负载均衡

  1. 任务调度(Scheduling)

如何将任务合理分配到多台机器?

  1. 负载均衡(Load Balancing)

如何均衡流量或计算负载?

事务与原子性

  1. 分布式事务(Distributed Transactions)

如何保证跨节点的操作原子性?

  1. 幂等性(Idempotency)

如何避免重复操作导致错误?

时间与顺序问题

  1. 时钟同步(Clock Synchronization)

如何保证多机器时钟一致?

  1. 事件顺序(Event Ordering)

如何确定跨节点事件的先后顺序?

安全与权限

  1. 认证与授权(AuthZ & AuthN)

如何控制节点间访问权限?

  1. 数据加密(Encryption)

如何保护传输和存储中的数据?

全文搜索

倒排索引:

为什么快? 分析复杂度

N = 文档数量 L = 每个文档的平均长度(单词数) 遍历所有文档(N 个文档)。 在每个文档里查找 "Go"(要扫描这个文档的所有单词 → L)。

O(N × L)

而倒排索引:

首先需要构建索引,方便以后的查询 虽然 构建索引慢,但只做一次。

在构建中就已经搭建出:

Go → [ (doc1, [3]), // 第3个单词是 Go (doc2, [1]), // 第1个单词是 Go (doc3, [5]) // 第5个单词是 Go ]

用户输入关键词后,系统只需查倒排索引,不用再扫描文档全文,速度快