代码改变世界

分布式系统理论 - 从放弃到入门

2017-01-01 02:45 by bangerlee, ... 阅读, ... 评论, 收藏, 编辑

随承载用户数量的增加和容灾的需要,越来越多互联网后台系统从单机模式切换到分布式集群。回顾自己毕业五年来的工作内容,同样有这样的转变。

毕业头两年负责维护运行在刀片机上的业务,在机房里拔插单板的日子是我逝去的青春。设备之间通过VCS组成冷备,但即使有双机软件保护,宕机、网络丢包等问题发生时业务仍会受影响。这样的系统架构下为保证SLA,有时候需要深入Linux系统内核或硬件层面分析机器重启的原因。

接下来负责维护承载在分布式集群上的业务,相比前面的工作,这个阶段主要关注点不是单节点的异常,更多是系统整体的稳定和健壮。面对纷繁复杂的系统,刚开始的时候有这样的感觉:

庞大复杂的分布式系统前,应该从哪方面入手提升对其的认识和理解、提升专业性?网上可以找到很多分布式系统相关的论文和资料,但归纳起来要表达的主要意思是什么?

结合自己这几年的工作经验,总结分布式系统的核心就是解决一个问题:不同节点间如何达成共识

 

看似简单的问题因网络丢包、节点宕机恢复等场景变得复杂,由此才衍生出很多概念、协议和理论。为探究共识问题最大能解决的程度,于是有FLP、CAP边界理论;为在特定条件和范围内解决该问题,于是有一致性协议Paxos、Raft、Zab和Viewstamped Replication;为构建这些协议,于是有多数派、Leader选举、租约、逻辑时钟等概念和方法。

 

2016年我阅读了分布式系统领域一些代表性的论文和博文,围绕“不同节点如何达成共识”这个问题,加入自己的认识和理解后有下面7篇小结:

一致性、2PC和3PC
选举、多数派和租约
时间、时钟和事件顺序
CAP
Paxos
Raft、Zab
Paxos变种和优化

构思和写作技术类文章是一个辛苦的过程,一方面要阅读很多资料并转化成自己的理解、找到尽量不拾人牙慧的立意和角度,一方面要绞尽脑汁组织语言让预期的读者能够容易理解。

 

但它也是一个有趣的过程,把知识捋一遍后原本一些模糊的概念变得清晰,写作过程中想到的一些有意思的内容我也会将它穿插到文章里,有时候会被自己想到的一些小机灵逗乐 :)

希望这几篇整理能为系统性地介绍分布式理论中文资料添一块砖、加一片瓦。