2019.9.5-6 snapshots, multicast, paxos, leader election和mutual exclusion

把这两天看的两章一起说一下。

第五章,先是讲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问题等价的。

    paxos可以提供完整的safety和较大程度的liveness。对于一个系统来说safety的意思大体是,不会有坏事发生,比如各进程决策不一致。liveness意思就是最终一定会有好事发生,比如最后一定会选出一个leader。然后三哥非常简略的讲了下paxos的内容,因为实在过于简略所以没啥可说的,后面raft的时候再总结吧。

 

第六章,先是leader elcetion。分布式系统里需要一个leader,用作读写之类的操作,也可以把调度放在leader机器里面。所以就需要各进程选出一个leader,然后讲了一个ring leader election的算法,其实很简单,就是各进程组成一个环,然后沿着换互相交换某种属性,最后能得到一个最强的,那么最强的自然就当领导了。具体内容这里可以看看https://www.cnblogs.com/daizuozhuo/p/4590895.html。讲了两个工业中用到的选举算法,chubby和zookeeper,讲的都很简略,前面那个链接也有讲。

 

    然后讲 Mutual Exclusion,就是进程互斥,为什么要进程互斥呢,就跟单系统的情况一样,因为不同的进程可能想要执行同一件事情,那么同步执行的时候可能出问题。这个单系统的进程互斥我们很熟悉了,就加锁就完事了,分布式系统的话其实也差不多,一样很简明,一个最简单的算法就是选举出一个leader,由这个leader持有一个token,然后每个进程如果运行某段代码的话就要像leader索要token,只有有token的程序才能执行这一段。

    另一个算法是ringed  Mutual Exclusion,就是并没有leader,所有进程组成圆桌轮流持有token,每个人接到token后都检查一下自己想不想执行,不想的话就往后传。感觉这两种算法就是自由和平等之间的区别(。。)

    Ricart-Agrawala's Algorithm相对复杂一些,它没有token而是利用了lamport timstamp,性能比前两种好一些但是很占带宽,因为这个算法中每两个进程之间都要通信确认状态。有一种Maekawa's Algorithm在此基础上改善了带宽,但是具体什么原理我懒得听了...

    当然,现实中用的Mutual Exclusion都不是上面那几种,所以了解了解就好...

转载于:https://www.cnblogs.com/dynasty919/p/11478557.html

你可能感兴趣的:(2019.9.5-6 snapshots, multicast, paxos, leader election和mutual exclusion)