分布式系统学习

相当长的一段时间里我试图努力学习分布式系统, 而恰恰是一旦开始深挖学习, 似乎就没有尽头, 关于分布式系统的文献和资料非常广泛, 对初学者来说很难决定读什么样的Paper, 买什么样的书.

所以把相关的资料整理下, 方便大家学习.

分布式系统是什么

分布式系统的事务处理

面向分布式系统工程师的分布式系统理论

两阶段提交

三阶段提交

Log-Structured Merge Tree

Lamport's Paxos Made Simple

Lamport's Paxos Made Live

Paxos原理与实践

raft一致性协议

raft协议动画展示

Amazon’s Highly Available Key-value Store

What we talk about when we talk about Distribute System

Time, Clocks, and the Ordering of Events in a Distributed System

The Chubby lock service for loosely-coupled distributed systems


分布式系统是什么?

分布式多节点环境中, 如何应对单节点故障情况, 而整个集群可以提供完整无损的服务.

在生产环境中通常使用两种手段来扩展数据服务能力:

  • 数据分区 //支付宝LDC项目
  • 数据镜像
  • 混合模式(数据分区+数据镜像) //淘宝单元化项目

以上方案都需要考虑三种情况:

  • 容灾
  • 数据一致性
  • 性能

要想让数据有高可用性, 就需要冗余数据写多份, 写多份的问题会带来一致性的问题, 而一致性的问题又会带来性能问题.

Paxos协议

是一个解决分布式系统中, 多个节点之间就某个值(提案)达成一致(决议)的通信协议.

解决最大问题: 把不确定性的事情变得确定.

"你愿意和我滚床单吗?"
"滚!"

NWR模型 (Amazon Dynamo的NWR模型)

NWR模型把CAP的选择权交给了用户, 让用户自己的选择你的CAP中的哪两个.

N代表N个备份, W代表要写入至少W份才认为成功, R表示至少读取R个备份.

配置的时候要求W+R > N. 因为W+R > N, 所以R > N-W 这个是什么意思呢? 就是读取的份数一定要比总备份数减去确保写成功的倍数的差值要大.

也就是说, 每次读取, 都至少读取到一个最新的版本, 从而不会读到一份旧数据.

Dynamo引入了Vector Clock将可能的版本冲突交给用户自己处理.

原文地址:https://www.cnblogs.com/renolei/p/5351767.html