zoukankan      html  css  js  c++  java
  • 同步异步中的一致性

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

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

      问题定义:进程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

  • 相关阅读:
    vue-cli项目中使用vw——相比flexible更原生的移动端解决方案
    android shap画圆(空心圆、实心圆)
    Android四大组件——Activity跳转动画、淡出淡入、滑出滑入、自定义退出进入
    HDU 3980 Paint Chain (sg函数)
    HDU 3951 Coin Game (简单博弈)
    HDU 1850 Being a Good Boy in Spring Festival (Nim博弈)
    HDU 3389 Game (阶梯博弈)
    HDU 3032 Nim or not Nim? (sg函数)
    HDU 1907 John (Nim博弈)
    HDU 4638 Group (线段树 | 树状数组 + 离线处理)
  • 原文地址:https://www.cnblogs.com/zhang-qc/p/6786425.html
Copyright © 2011-2022 走看看