分布式原理:Consensus问题
什么是共识问题呢?
其实就是,你有一个服务器集群,他们先交流然后对信息的顺序,进程的状态,leader,schedule有相同的output。
或者打个比方,有N个进程,都运行一段代码,无论输入的是什么,通过沟通,他们能有一致的输出,这就是产生了共识(Consensus)
• Every process contributes a value
• The goal is that all processes decide on the same value
然后在分布式系统中,有两种模型,同步和异步模型:
同步和异步关注的是**消息通信机制** (synchronous communication/ asynchronous communication)
所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由*调用者*主动等待这个*调用*的结果。
而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。
同步模型:
调用后信息返回的时间是bounded,也就是你可以期待信息的返回
本地钟的时间漂移也是bounded

异步模型:
没有具体bounded的运行时间
任意的本地钟

为什么说在异步模型中无法实现共识呢?
因为返回时间没有一个固定的bounded时间,所以肯定会有一个最差的情况无法达成共识。
Paxos算法
由于完整的paxos算法非常复杂,下面只介绍最简单的情况:
分为三个phase:
– Phase 1: A leader is elected (Election)
– Phase 2: Leader proposes a value, processes ack (Proposal)
– Phase 3: Leader multicasts final value (Decision)
就很独裁,选一个leader出来,这个leader作决定,然后就是最终的结果