把这两天看的两章一块儿说一下。html
第五章,先是讲snapshots就是快照,具体就是Chandy-Lamport算法,快照就是把一个分布式系统以不少断点(marker)为间隔记录下系统的状态,包括单个进程本身的状态以及不一样进程之间的状态,保存这些可能能够用来进行错误处理之类的事情。算法
算法具体流程是啥呢,就是由某个进程向其余进程发送marker,其余进程接收并视状况回信,而后纪录本身的系统状态...具体内容能够看这里https://zhuanlan.zhihu.com/p/53482103分布式
而后是multicast,其实以前提过这个,中文叫组播,就是一个进程对系统内的一组进程传递消息,对应“广播”(broadcast),也就是对全部成员都发送消息。有几种类型的multicast算法,好比fifo,casual什么的,casual就是知足lamport时间戳那种因果一致性的要求的。这一篇讲的能够看一下,比较形象https://www.cnblogs.com/hzmark/p/consistency_model.html,还有这个讲得更清楚些https://blog.csdn.net/aigoogle/article/details/43271185。性能
最后是讲consensus,咱们熟悉的paxos啊raft啊都是指这个问题,consensus就是指对于一个分布式系统中的全部进程,要以某种方式保证它们产生同一个结果。这被证实是不可能的,不过经过paxos之类的算法能够尽最大可能的保证一致性。像failure dection和leader election这类问题实际上是和consensus问题等价的。google
paxos能够提供完整的safety和较大程度的liveness。对于一个系统来讲safety的意思大致是,不会有坏事发生,好比各进程决策不一致。liveness意思就是最终必定会有好事发生,好比最后必定会选出一个leader。而后三哥很是简略的讲了下paxos的内容,由于实在过于简略因此没啥可说的,后面raft的时候再总结吧。.net
第六章,先是leader elcetion。分布式系统里须要一个leader,用做读写之类的操做,也能够把调度放在leader机器里面。因此就须要各进程选出一个leader,而后讲了一个ring leader election的算法,其实很简单,就是各进程组成一个环,而后沿着换互相交换某种属性,最后能获得一个最强的,那么最强的天然就当领导了。具体内容这里能够看看http://www.javashuo.com/article/p-twswmitg-ee.html。讲了两个工业中用到的选举算法,chubby和zookeeper,讲的都很简略,前面那个连接也有讲。htm
而后讲 Mutual Exclusion,就是进程互斥,为何要进程互斥呢,就跟单系统的状况同样,由于不一样的进程可能想要执行同一件事情,那么同步执行的时候可能出问题。这个单系统的进程互斥咱们很熟悉了,就加锁就完事了,分布式系统的话其实也差很少,同样很简明,一个最简单的算法就是选举出一个leader,由这个leader持有一个token,而后每一个进程若是运行某段代码的话就要像leader索要token,只有有token的程序才能执行这一段。blog
另外一个算法是ringed Mutual Exclusion,就是并无leader,全部进程组成圆桌轮流持有token,每一个人接到token后都检查一下本身想不想执行,不想的话就日后传。感受这两种算法就是自由和平等之间的区别(。。)token
Ricart-Agrawala's Algorithm相对复杂一些,它没有token而是利用了lamport timstamp,性能比前两种好一些可是很占带宽,由于这个算法中每两个进程之间都要通讯确认状态。有一种Maekawa's Algorithm在此基础上改善了带宽,可是具体什么原理我懒得听了...进程
固然,现实中用的Mutual Exclusion都不是上面那几种,因此了解了解就好...