精华内容
下载资源
问答
  • 共识(Consensus)和一致性(Consistency)虽然近似,但还是有一些差别: 传统一致性研究 共识研究 侧重 节点共识过程最终达成稳定状态 分布式节点达成...

     

    共识算法是区块链技术的核心要素,也是近年来分布式系统研究的热点。共识(Consensus)和一致性(Consistency)虽然近似,但还是有一些差别:

     

    传统一致性研究

    共识研究

    侧重

    节点共识过程最终达成的稳定状态

    分布式节点达成一致的过程及其算法

    是否考虑拜占庭容错

    大多不考虑拜占庭容错问题,即假设不存在恶意篡改和伪造数据的拜占庭节点

    考虑拜占庭容错问题

    应用场景

    节点数量有限且相对可信的分布式数据库环境

    运行在复杂、开放和缺乏信任的环境, 节点数量多,可能存在恶意拜占庭节点

    展开全文
  • 到这一步仅仅是达到了数据共识,如果要做到数据一致,还需要client参与。在数据更新提案请求批准时,只要多数派回应,leader就决定提交,但是读时候还是有可能会读出多种结果,所以这里就需要通过某种机制来...

    paxos算法是一组共识算法的集合,包含basic paxos,multi-paxos等。

    basic paxos 算法有难以实现,两次RPC提交,容易出现活锁的缺点。二次提交中prepare的目的其实就是多个proposer通过条件约束(比如accept承诺不回应<=N提案等)尽可能达成共识,然后令多数派通过批准(虽然有可能发生活锁,通过加入随机睡眠可以很容易解决)。假如直接进入accept阶段,就会缺少prepare的回复之前的值,给予修正value值的机会,比如第二个用户序号为N+1,按照承诺应该批准,但是N+1号议案内容极有可能和N号议案不同,这也就违背了paxos算法的约束:一次paxos算法只能批准一个value。

    如果proposer只有一个,那么该者提出的议案肯定会被批准,所以prepare阶段可以省略,直接进入批准阶段,消息延迟也减少一半。加入存在多个proposer,可以通过选举产生一个leader,然后所有议案只能通过leader来提出,这就是multi-paxos。以multi-paxos为基础的算法有许多,比如raft算法以及zab协议。比如zab协议,把proposer accepter learner多个角色合并到一个实例中,通过选举选出一个leader来提出数据更新同步的议案。

    到这一步仅仅是达到了数据共识,如果要做到数据一致,还需要client的参与。在数据更新提案请求批准时,只要多数派回应,leader就决定提交,但是读的时候还是有可能会读出多种结果,所以这里就需要通过某种机制来读取正确数据,比如从多数派读取数据

    展开全文
  • 一致和共识的区别 一致性往往指分布式系统中多个副本对外呈现的数据的状态。共识则描述了分布式系统中多个节点之间,彼此对某个状态达成一致结果的过程。因此,一致性描述的是结果状态,共识则是一种手段。 在...

    一致性和共识的区别

    一致性往往指分布式系统中多个副本对外呈现的数据的状态。共识则描述了分布式系统中多个节点之间,彼此对某个状态达成一致结果的过程。因此,一致性描述的是结果状态,共识则是一种手段。

    在分布式系统中,我们常说的一致性问题就是:对于同一个数据的多个副本之间,如何保持其对外表现的数据一致性。例如,研究客户端B怎样能读取到客户端A做的修改,然后两者之间的数据可以达成一致。

    在实践中,要保障系统满足不同程度的一致性,核心过程往往需要通过共识算法来达成。共识算法解决的是对某个提案大家达成一致意见的过程。

    一致性

    分布式系统中的一致性按照对一致性要求的不同,主要分为,严格一致性,强一致性(线性一致性),顺序一致性,弱一致性、最终一致性。

    严格一致性

    假如有人说他设计了一个满足严格一致性的分布式系统,那么这个系统的外部表现就应该完全等价于一台计算机。这意味着,对于这个系统中任意数据项x的任何读操作将返回最近一次对x进行的写操作的结果所对应的值。对于所有的进程来说,所有写操作都是瞬间可见的,系统维持着一个绝对的全局时间顺序。

    事实上,严格一致性要求系统不发生任何故障,而且所有节点之间的通信无需任何时间这种理想的条件下,才能达到。因此现实世界中,这样的分布式系统是不存在的。
    在这里插入图片描述

    顺序一致性

    在讲强一致性之前,首先要讲一下顺序一致性,它虽然不满足强一致性,但是又优于弱一致性,是一种过渡状态。

    Leslie Lamport 在1979年提出了顺序一致性,对系统提出了两条访问共享对象时的约束:

    • 从单个处理器(线程或者进程)的角度上看,其指令的执行顺序以编程中的顺序为准;
    • 从所有处理器(线程或者进程)的角度上看,指令的执行保持一个单一的顺序;

    更通俗的解释,顺序一致性要满足两个条件:

    • 每个进程的内部操作顺序是确定不变的
    • 假设所有的进程都对一个存储单元执行操作,那么任一进程都可以感知到相同的操作顺序,即使感知到的操作顺序与实际的全局时钟顺序不同。(实际上就是保证所有进程感知到的写操作顺序是相同的)

    顺序一致性的关键在于找到一个满足现实情况的全局执行顺序,使其同时又能符合每个单独进程内部的操作顺序。
    在这里插入图片描述
    以上图片中(a)为顺序一致性,(b)不为顺序一致性。
    对于(a),由于要保持进程内部的操作顺序不能变,所以P3和P4中都是先读取x=b再读到x=a,所有两者感知到的写顺序是相同的,感知到的整体操作顺序为W(x)b -> R(x)b -> W(x)a -> R(x)a。
    对于(b),P3和P4感知到的写操作顺序不同,导致无法找到一个符合顺序一致性的整体操作顺序。

    顺序一致性中没有全局时钟的限制,多个进程的操作可以任意调整顺序,以找到符合每个单独进程内部的操作顺序的全局操作顺序。所以如果每个进程中感知到的写操作顺序是相同的,那么一定可以通过调整读操作的顺序来获得符合要求的全局操作顺序,那么一定是顺序一致性的。

    强一致性(线性一致性)

    当一个数据副本的更新操作完成之后,任何多个后续节点对这个数据的任意副本的访问都会返回最新的更新过的值。强一致性和严格一致性的区别在于强一致性中写操作是耗时的,对系统可用性的影响较大,只要上次的操作没有处理完,就不能让用户读取数据。

    线性一致性,是一种强一致性,在顺序一致性前提下加强了进程间的操作排序,形成唯一的全局顺序。线性一致性假设操作具有一个全局有效时钟的时间戳,要求时间戳在前的进程先执行,从而确定唯一的全局操作顺序,即所有的操作按照全局时钟的顺序被所有进程感知。

    顺序一致性和线性一致性的区别

    两者都要求所有进程感知到整体操作顺序是相同的。所有的写操作都以相同的顺序被每个进程感知。

    但是在顺序一致性中只需要保证单个进程中的操作顺序确定不变,而没有全局时钟的限制,多个进程中的操作可以任意排序,所以进程感知到的整体操作顺序可以不符合实际的全局时钟。只要能保证所有进程感知到相同的写操作顺序,即可保证顺序一致性。
    在线性一致性中,在顺序一致性的基础上,有了全局时钟的限制,所有操作必须按照全局时钟顺序,确定了唯一的全局顺序。同时这也保证了写操作之后,读操作必须读取最新数据,即强一致性。
    顺序一致性中,读操作可以不用读取最新的数据,即非强一致性。线性一致性中,读操作必须读取最新的数据,即强一致性。

    在这里插入图片描述
    图(a)满足顺序一致性,但是不满足线性一致性的。原因在于,从全局时钟的观点来看,P2进程对变量X的读操作在P1进程对变量X的写操作之后,然而读出来的却是脏数据。但是确实符合顺序一致性的,因为P1和P2感知到相同的写操作顺序: Write(y,2) ,Write(x,4)(虽然这并未从图上显示出来)。所以P1和P2可以感知到相同的整体操作顺序:Write(y,2) , Read(x,0) , Write(x,4), Read(y,2)。每个进程内部的读写顺序都是合理的,但是这个顺序与全局时钟下看到的顺序并不一样。

    图(b)满足强一致性,因为每个读操作都读到了该变量的最新写的结果,同时两个进程看到的操作顺序与全局时钟的顺序一样,都是Write(y,2) , Write(x,4), Read(x,4) ,Read(y,2)。

    一句话总结:顺序一致性要求所有进程感知到相同的操作顺序(本质上只需要保证感知到相同的写操作顺序),只要求单进程中操作顺序不变,整体顺序可以不遵循全局时钟。线性一致性要求所有进程感知到相同的按照全局时钟确定的整体操作顺序。

    弱一致性

    弱一致性是指系统并不保证后续进程或线程的访问都会返回最新的更新的值。系统在数据成功吸入之后,不承诺立即可以读到最新写入的值,也不会具体承诺多久读到。但是会尽可能保证在某个时间级别(秒级)之后。可以让数据达到一致性状态。

    最终一致性

    最终一致性是弱一致性的一种特例。某个进程更新了副本的数据,如果没有其他进程更新这个副本的数据,系统最终一定能够保证后续进程能够读取到写进的最新值。

    最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为:

    • 因果一致性。如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将返回更新后的值,且一次写入将保证取代前一次写入。与进程A无因果关系的进程C的访问遵守一般的最终一致性规则。
    • “读己之所写(read-your-writes)”一致性。当进程A自己更新一个数据项之后,它总是访问到更新过的值,绝不会看到旧值。这是因果一致性模型的一个特例。
    • 会话(Session)一致性。保证在同一个会话中,实现“读己之所写”一致性。如果由于某些失败情形令会话终止,就要建立新的会话,而且系统的保证不会延续到新的会话。
    • 单调(Monotonic)读一致性。如果进程已经看到过数据对象的某个值,那么任何后续访问都不会返回在那个值之前的值。
    • 单调写一致性。系统保证来自同一个进程的写操作顺序执行。要是系统不能保证这种程度的一致性,就非常难以编程了。

    共识

    在这里插入图片描述
    为了达到共识,每个进程都提出自己的提议(propose),最终通过共识算法,所有正确运行的进程决定(decide)相同的值。

    根据解决的是非拜占庭的普通共识问题还是拜占庭共识问题(是否允许系统内节点作恶,以及对完备性的不同要求),共识算法可以分为Crash Fault Tolerance(CFT)类算法和Byzantine Fault Tolerance(BFT)类算法。

    针对常见的非拜占庭错误的情况,已经存在一些经典的解决算法,包括Paxos、Raft及其变种等。这类容错算法往往性能比较好,处理较快,容忍不超过一半的故障节点。对于要能容忍拜占庭错误的情况,一般包括PBFT(Practical Byzantine Fault Tolerance)为代表的确定性系列算法、PoW为代表的概率算法等。

    对于确定性算法,一旦达成对某个结果的共识就不可逆转,即共识是最终结果;而对于概率类算法,共识结果则是临时的,随着时间推移或某种强化,共识结果被推翻的概率越来越小,成为事实上的最终结果。拜占庭类容错算法往往性能较差,容忍不超过1/3的故障节点。

    总结

    一致性往往指分布式系统中多个副本对外呈现的数据的状态。如前面提到的顺序一致性、线性一致性,描述了多个节点对数据状态的维护能力。
    共识则描述了分布式系统中多个节点之间,彼此对某个提案达成一致结果的过程。因此,一致性描述的是结果,共识则是一种手段。
    共识方法可以用来实现强一致性。

    参考博客:
    https://zhuanlan.zhihu.com/p/68743917
    https://www.cnblogs.com/xdyixia/p/11716079.html
    https://wenku.baidu.com/view/2038aff77c1cfad6195fa7d4.html
    https://blog.csdn.net/chao2016/article/details/81149674
    https://blog.csdn.net/cadem/article/details/80359270

    展开全文
  • 1. 分类 区块链共识算法可以根据其容错类型、部署方式、一致性程度、选主策略等多个维度进行分类... 公有链共识、联盟链共识和私有链共识 3 一致性程度 强一致性共识、弱(最终) ...

     

    1. 分类

    区块链共识算法可以根据其容错类型、部署方式、一致性程度、选主策略等多个维度进行分类。

     

    维度

    该维度的所有分类

    1

    容错类型

    拜占庭容错、非拜占庭容错

    2

    部署方式

    公有链共识、联盟链共识和私有链共识

    3

    一致性程度

    强一致性共识、弱(最终) 一致性共识

    4

    选主策略

    选举类共识、证明类共识、随机类共识、联盟类共识、混合类共识

    2. 区别

    目前,区块链采用的共识机制主要基于工作量证明(PoW)、权益证明(PoS)、拜占庭协议(BA)等。各类共识机制在效率、安全性等方面有利有弊,目前区块链协议的效率,特别是高速处理海量数据的能力是阻碍区块链落地应用的主要障碍。

     

    POW

    POS

    DPOS

    PBFT

    代表

    比特币

    以太坊/点点币

    Bitshares

    Fabric

    思想

    工作量证明思想,算力为王

    权益证明思想,权益为王

    代表思想,民主集中制

    基于状态机复制的一致性算法

    记账权

    通过节点的算力争夺记账权

    具有最高权益(币龄)的节点获得记账权

    选举前N个节点作为代表轮流获得记账权

    主节点排序请求,多数从节点响应结果为最终结果

    优点

    工作原理简单,容易实现;安全性好,攻击难度大

    减少计算资源的消耗; 一定程度提高了区块生成效率

    吞吐量高;解决PoW浪费能源等问题;弥补PoS中拥有记账权益的参与者未必希望参与记账的缺点

    无需代币进行奖励;缩短共识时间;提高共识效率;吞吐量高

    缺点

    能源消耗巨大;运行效率低;交易确认时间长使其相对不适合小额交易的商业应用

    协议复杂,网络要求高;与中心化比性能仍有差距;产生屯币现象,对于新加入节点不友好

    由于提前知道出块节点的身份,容易造成合谋攻击;DPOS算法中心化程度更强;

    1/3 以上的网络节点宕机系统将无法运行;共识过程中,确认流程多,对宽带要求极大;节点数量固定

    展开全文
  • 分布式一致性与事务隔离的区别 事务隔离主要是为了避免由于同时执行事务而导致的竞争状态 分布式一致性主要关于,面对延迟故障时,如何协调副本间的状态 线性一致性 即原子一致性(atomic consistency),强一致...
  • 由于节点不可靠性节点间通讯不稳定性,甚至节点作恶,伪造信息,使得节点之间出现数据状态不一致问题。通过共识算法,可以将多个不可靠单独节点组建成一个可靠分布式系统,实现数据状态的一致性,提高...
  • ”可是这个问题却一直没有得到一致的答案,今后可能也不会达成共识,因为各个学科研究视角不同,对区域界定也就不同了。即使是同一学科比如区域经济学,不同学者给区域下定义也很不相同,可谓是众说纷纭,...
  • 分片后,只有同一片内处理是同步一致的,不同分片之间则可以是异步。 这种属于底层解决方案,因为它是在区块链本身基本协议中实施。 分片链的共识依赖于主链; 已存在主链,实现时会修改其底层...
  • 详细研究了存储环电偶极矩实验中准磁共振的区别特征。 推导了由电偶极矩引起的影响的精确公式。 发现并首次计算了由射频电场触发器射频维恩滤波器调节的共振效应之间的差异。 这种差异的存在对于在分析派生...
  • 前言  在FPGA设计中,避免使用锁存器是几乎所有FPGA工程师的共识,XilinxAltera也在手册中提示大家要慎用锁存器,除非你明确知道你确实需要一个latch来解决问题。而且目前网上大多数文章都对锁存器有个误解,...
  • OS and Database

    2020-05-27 21:57:53
    OS DMAcache一致性问题 强一致性、顺序一致性、弱一致和共识 操作系统为什么要分用户态内核态 用户态内核态的理解区别 ...堆区栈区的区别 协程 银行家算法 银行家算法2 内存映射 内存对齐 ...
  • python-opentimestamps-源码

    2021-02-05 04:22:25
    两者之间的区别在于对代码的更改是否可能导致版本之间的永久性不兼容性,从而导致时间戳验证返回版本之间的不一致结果。 单元测试 python3 -m unittest discover -v 此外,还支持Travis。 SSL根证书
  • 大数据基础

    2017-11-08 23:06:00
    1、Bloom Filter 过滤器数据分片与路由 分区算法:一致性哈希算法 2、备份机制与一致性 3、CAP理论 4、幂等性:分布式系统状态管理基石 ...9、LSM:学习B+树的区别和优势 10、压缩算法:主流压缩算法...
  • 链圈是各种公链联盟链开发者,联盟链开发者一般都是基于ToB场景工作,在应用体验上与其他技术并无本质区别;公链开发者可能会持有所开发相关公链币,也可能是共识层等基础组件开发者,不一定持有币。 ...
  • Distributed Systems-Paxos

    2015-12-18 15:15:11
    本文主要提炼了《Paxos Make Simple》中一些主要观点,然后加上自己理解,使用...这里选用操作这个词,而不是值,因为一个在对某个变量达成某个值的共识前可能已经经过多个更新操作,所以为了区别,使用操作作为每
  • 定义:是在系统测试之后进行测试,以用户为主导,目的是验证软件系统是否满足了用用户各方面要求,包括功能性非功能性要求。 验收测试与系统测试区别: 目的: 检验软件系统是否与用户需求相一致,是否满足...
  • 另外,书中列出代码均由我自己编写程序自动嵌入L ATEX源文件,从而严格保证书光盘的一致性,读者可以根据文件名行号方便地找到光盘中 代码准确位置。 此外,在第二版中还有一些小变化。首先是操作系统...
  • 另外,书中列出代码均由我自己编写程序自动嵌入L ATEX源文件,从而严格保证书光盘的一致性,读者可以根据文件名行号方便地找到光盘中 代码准确位置。 此外,在第二版中还有一些小变化。首先是操作系统...
  • <p>YUIjQuery的最大区别就是体系的区别,对于庞大的淘系业务,只有体系化的技术方案才能保证研发效率工作流的稳定,保证线上质量用户体验。YUI体系在传统库的基础上,涵盖了...
  • 柏拉图学派具有这样概念,即 数学客体是抽象,远离日常感性经验:几何图形理想化,以区别于客体实际图样形状;数字不与具体客体计算相混淆。它们存在本性 出现了特殊哲学挑战:如何做到 数学...
  • sponsor attack

    2020-12-01 15:07:18
    例如DEX有交易先后顺序的区别,是影响业务逻辑的。如果因为赞助费不够导致交易失败的话,会严重影响交易的执行顺序的 QB: 因为交易执行失败,nonce也会++</p><p>该提问来源于开源项目&#...
  • 因为这个结构组件结构是一致的,递归遍历就可以了。 但是,由于后端通常采用是关系型数据库,所以返回数据通常会是这个样子: <pre><code> js var data = [{ "province&#...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

共识和一致共识的区别