同步异步中的一致性

简述一致性中关于同步与异步环境下的共识理论 (##转载请注明

  共识问题:可称作协作,所有正确的进程对提议的值达成一致。分布式系统中,节点之间通过通信,对请求达成一致的定序。

  问题定义:进程Pi处于未决状态(undecideed),提议集合D中的某个值Vi。进程之间相互通信,交换各自的提议。每个进程设置自己的决定变量(decision variable),进入决定状态(decided),此状态下不改变di的数值。

  要求满足如下几个性质:

  • 终止性(Termination):正确的进程最终都可以设置自己的决定变量;
  • 协定性(Agreement):所有正确的进程的决定变量di一致;
  • 完整性(Integrity):正确的进程只能决定一个决定变量,且该执行变量必须来自于某些正确进程的提议。

  进程可发生各种类型的错误,错误可以大致分为:

  • 良性错误:进程崩溃,节点崩溃,网络故障;
  • 拜占庭(Byzantine)故障:随机方式出现故障,例如出现漏洞,被挟持并以任意方式向正确进程/节点发送数据,阻止正确进程达成一致。

  Byzantine Generals Problem 由Lamport 1982年提出,考虑信道安全,但是出错节点发送的信息任意。在区块链中,考虑此类别的问题是必要的。

  交互一致性问题:共识问题的一个变种,指所有正确的进程对一个值向量(决定向量)达成一致。向量中的分量对应一个进程的值。

  同步与异步:异步与同步通信的最大区别是没有时钟、不能时间同步、不能使用超时、不能探测失败、消息可任意延迟、消息可乱序。同步是指可以在指定的时间内完成消息的传递,因此,它存在有消息传输的绝对界限,超过这个界限,可以认为进程已经崩溃,所以,同步下存在有可靠的故障检测器(reliable failure detector),对进程的询问,可以回unsuspected或者failed。异步情况下的故障检测器是不可靠的(unreliable),只可以产生unsuspected和suspected,但是选择的超时值可以动态改变,可以增加检测的精度。

  通信健壮:只要进程非失败,消息虽会被无限延迟,但最终会被送达,并且消息仅会被送达一次(无重复),使用TCP协议有效保证通信的健壮。

  同步系统中的共识问题已被证明可以实现,消息可以分为“口头的”和“正式的”,即消息是否经过签名。Lamport【1982】讨论了3个进程相互发送未签名消息,若有一个进程出现BFT故障,则无法达成共识,并延伸到了N≤3f的情况。Pease等人证明了N≤3f下BFT共识的不可能性(证明未细看),并提出了在N>3f+1时的解决方案。

  进行多少轮通信和发送多少消息(消息的长度)非常重要。通信阶段数影响终止的时间,消息的长度影响带宽的利用率,也影响时间。

  Fischer、Lynch【1982】证明,如果允许BFT故障,则任何确定性的解决共识问题的算法至少需要f+1轮消息传递(证明未看)。

  --------------------------------------

  异步情况下的不可能性(FLP Impossibility):即使只有一个进程发生崩溃故障,也没有算法可以保证达到共识。由于异步系统中,没有办法分辨一个进程是速度很慢还是已经崩溃,即不能探测失败。(证明过程未细看):在任何算法之上,都能构造出这样一些永远都不确定的Configuration。有三个引理:连通性、初始Configuration不确定性、不可终止性(不确定Configuration经过一些步骤后依然可能是不确定的),通过连通性来证明不可终止性。

 

  绕过不可能性的三个方法(考虑部分同步系统 partially synchronous system,使共识问题可以被解决 Dwork et al.【1988】):

  • 故障屏蔽:屏蔽进程故障,使进程可以恢复,利用持久存储保留足够的信息;
  • 使用故障检测器:使用“不完美”的故障检测器,即被怀疑的进程依然可以行动,使用故障检测器是将异步系统转化到同步系统;
  • 使用随机化达成共识:引入一个关于进程行为的可能性元素,使得敌人不能有效地来实施他们的阻碍战术。Canetti、Rabin【1993】提出一种概率算法可以解决该问题。

参考:Distributed Systems Concepts and Design -fifth edition

http://blog.csdn.net/chen77716/article/details/27963079

你可能感兴趣的:(架构技术)