分布式核心技术之分布式共识

文章目录

    • 什么是分布式共识?
    • 分布式共识方法
      • PoW
      • PoS
      • DPoS
    • 三种分布式共识算法对比分析

选主过程就是一个分布式共识问题,因为每个节点在选出主节点之前都可以认为自己会成为主节点,也就是说集群节点“存异”;而通过选举的过程选出主节点,让所有的节点都认可该主节点,这叫“求同”。由此可见,分布式共识的本质就是“存异求同”。

  • 一种用于解决分布式在线记账一致性问题的分布式共识技术。这里所说的分布式在线记账,是指在没有集中的发行方,也就是没有银行参与的情况下,任意一台接入互联网的电脑都能参与买卖,所有看到该交易的服务器都可以记录这笔交易,并且记录信息最终都是一致的,以保证交易的准确性。而如何保证交易的一致性,就是该场景下的分布式共识问题。

什么是分布式共识?

  • 假设,现在有 5 台服务器,分散在美国华盛顿、英国伦敦、法国巴黎、中国北京、中国上海,分别对应着用户{A,B,C,D,E}。现在,用户 A 给用户 B 转了 100 元。
  • 在传统方法中,我们通过银行进行转账并记录该笔交易。但分布式在线记账方法中,没有银行这样的一个集中方,而是由上述 5 台服务器来记录该笔交易。但是,这 5 台服务器均是有各自想法的个体,都可以自主操作或记录,那么如何保证记录的交易是一致的呢?这,就是分布式共识技术要解决的问题。
  • 可以看出,分布式共识就是在多个节点均可独自操作或记录的情况下,使得所有节点针对某个状态达成一致的过程。通过共识机制,我们可以使得分布式系统中的多个节点的数据达成一致。
  • 在这里说的分布式在线记账,其实就是近几年比较火的区块链技术解决的问题。而分布式共识技术,就是区块链技术共识机制的核心。

分布式共识方法

分享区块链中的一个核心概念:挖矿。在传统的交易方式中,用户 A 给用户 B 转账,需要银行来实行具体的转账操作并记录交易,银行会从中收取相应的手续费。而采用分布式在线记账的话,参与记录这笔交易的服务器,也可以从中获得一些奖励(这些奖励,在区块链技术中可以换成钱)。所有服务器帮助记录交易并达成一致的过程,就是区块链中的“挖矿”。区块链是由包含交易信息的区块从后向前有序链接起来的数据结构,其中区块是指很多交易数据的集合,每个区块包括区块头和区块体,区块头包括前一区块的哈希值、本区块的哈希值和时间戳;区块体用来存储交易数据。

  • 介绍 3 种主流的解决分布式在线记账一致性问题的共识技术,即:PoW(Proof-of-Work,工作量证明)、PoS(Proof-of-Stake,权益证明)和 DPoS(Delegated Proof of Stake,委托权益证明)。
    在这里插入图片描述

PoW

  • 从分布式选举问题可以看出,同一轮选举中有且仅有一个节点成为主节点。同理,在分布式在线记账问题中,针对同一笔交易,有且仅有一个节点或服务器可以获得记账权,然后其他节点或服务器同意该节点或服务器的记账结果,达成一致。也就是说,分布式共识包括两个关键点,获得记账权和所有节点或服务器达成一致。
  • PoW 算法,是以每个节点或服务器的计算能力(即“算力”)来竞争记账权的机制,因此是一种使用工作量证明机制的共识算法。也就是说,谁的计算力强、工作能力强,谁获得记账权的可能性就越大。

那么,如何体现节点的“算力”呢?答案就是,每个节点都去解一道题,谁能先解决谁的能力就强。

  • 假设每个节点会划分多个区块用于记录用户交易,PoW 算法获取记账权的原理是:利用区块的 index、前一个区块的哈希值、交易的时间戳、区块数据和 nonce 值,通过 SHA256 哈希算法计算出一个哈希值,并判断前 k 个值是否都为 0。如果不是,则递增 nonce 值,重新按照上述方法计算;如果是,则本次计算的哈希值为要解决的题目的正确答案。谁最先计算出正确答案,谁就获得这个区块的记账权。注意:nonce 值是用来找到一个满足哈希值的数字;k 为哈希值前导零的个数,标记了计算的难度,0 越多计算难度越大。
  • 达成共识的过程,就是获得记账权的节点将该区块信息广播给其他节点,其他节点判断该节点找到的区块中的所有交易都是有效且之前未存在过的,则认为该区块有效,并接受该区块,达成一致。

  • 以上文提到的分散在世界各地的 5 台服务器为例,和你说明基于 PoW 的共识记账过程。
  • 假设客户端 A 产生一个新的交易,基于 PoW 的共识记账过程为:
    • 客户端 A 产生新的交易,向全网进行广播,要求对交易进行记账。
    • 每个记账节点接收到这个请求后,将收到的交易信息放入一个区块中。
    • 每个节点通过 PoW 算法,计算本节点的区块的哈希值,尝试找到一个具有足够工作量难度的工作量证明。
      在这里插入图片描述
    • 若节点 D 找到了一个工作量证明向全网广播。当然,当且仅当包含在该区块中的交易都是有效且之前未存在过的,其他节点才会认同该区块的有效性。
    • 其他节点接收到广播信息后,若该区块有效,接受该区块,并跟随在该区块的末尾,制造新区块延长该链条,将被接受的区块的随机哈希值视为新区块的随机哈希值。
  • PoW 算法中,谁的计算能力强,获得记账权的可能性就越大。但必须保证其记账的区块是有效的,并在之前未存在过,才能获得其他节点的认可。
  • 目前,比特币平台采用了 PoW 算法,属于区块链 1.0 阶段,其重心在于货币,比特币大约 10min 才会产生一个区块,区块的大小也只有 1MB,仅能够包含 3000~4000 笔交易,平均每秒只能够处理 5~7(个位数)笔交易。PoW 通过“挖矿”的方式发行新币,把比特币分散给个人,实现了相对的公平。PoW 的容错机制,允许全网 50% 的节点出错,因此,如果要破坏系统,则需要投入极大成本(若你有全球 51% 的算力,则可尝试攻击比特币)。
  • 但,PoW 机制每次达成共识需要全网共同参与运算,增加了每个节点的计算量,并且如果题目过难,会导致计算时间长、资源消耗多;而如果题目过于简单,会导致大量节点同时获得记账权,冲突多。这些问题,都会增加达成共识的时间。
  • 所以,PoW 机制的缺点也很明显,共识达成的周期长、效率低,资源消耗大。

PoS

  • 为了解决 PoW 算法的问题,引入了 PoS 算法。它的核心原理是,由系统权益代替算力来决定区块记账权,拥有的权益越大获得记账权的概率就越大。
  • 这里所谓的权益,就是每个节点占有货币的数量和时间,而货币就是节点所获得的奖励。PoW 算法充分利用了分布式在线记账中的奖励,鼓励“利滚利”。在股权证明 PoS 模式下,根据你持有货币的数量和时间,给你发利息。每个币每天产生 1 币龄,比如你持有 100 个币,总共持有了 50 天,那么,你的币龄就为 5000。这个时候,如果你发现了一个 PoS 区块,你的币龄就会被减少 365。每被减少 365 币龄,你就可以从区块中获得 0.05 个币的利息 (可理解为年利率 5%)。在这个案例中,利息 = (5000*5% )/365 = 0.68 个币。这下就有意思了,持币有利息。
  • 基于 PoS 算法获得区块记账权的方法与基于 PoW 的方法类似,不同之处在于:节点计算获取记账权的方法不一样,PoW 是利用区块的 index、前一个区块的哈希值、交易的时间戳、区块数据和 nonce 值,通过 SHA256 哈希算法计算出一个哈希值,并判断前 k 个值是否都为 0,而 PoS 是根据节点拥有的股权或权益进行计算的。
  • 接下来,看一个具体的案例。假设一个公链网络中,共有 3 个节点,A 、B 和 C。其中 A 节点拥有 10000 个币,总共持有 30 天,而 B 和 C 节点分别有 1000 和 2000 个币,分别持有 15 和 20 天。
  • 通过 PoS 算法决定区块记账权的流程和 PoW 算法类似,唯一不同的就是,每个节点在计算自己记账权的时候,通过计算自己的股权或权益来评估,如果发现自己权益最大,则将自己的区块广播给其他节点,当然必须保证该区块的有效性。
    在这里插入图片描述
  • 以太坊平台属于区块链 2.0 阶段,在区块链 1.0 的基础上进一步强调了合约,采用了 PoS 算法。12 年发布的点点币(PPC),综合了 PoW 工作量证明及 PoS 权益证明方式,从而在安全和节能方面实现了创新。
  • 可以看出,PoS 将算力竞争转变成权益竞争。与 PoW 相比,PoS 不需要消耗大量的电力就能够保证区块链网络的安全性,同时也不需要在每个区块中创建新的货币来激励记账者参与当前网络的运行,这也就在一定程度上缩短了达成共识所需要的时间。所以,基于 PoS 算法的以太坊每秒大概能处理 30 笔左右的交易。但,PoS 算法中持币越多或持币越久,币龄就会越高,持币人就越容易挖到区块并得到激励,而持币少的人基本没有机会,这样整个系统的安全性实际上会被持币数量较大的一部分人掌握,容易出现垄断现象。

DPoS

  • 为了解决 PoS 算法的垄断问题,2014 年比特股(BitShares)的首席开发者丹尼尔 · 拉里默(Dan Larimer)提出了委托权益证明法,也就是 DPoS 算法。
  • DPoS 算法的原理,类似股份制公司的董事会制度,普通股民虽然拥有股权,但进不了董事会,他们可以投票选举代表(受托人)代他们做决策。DPoS 是由被社区选举的可信帐户(受托人,比如得票数排行前 101 位)来拥有记账权。
  • 为了成为正式受托人,用户要去社区拉票,获得足够多的信任。用户根据自己持有的货币数量占总量的百分比来投票,好比公司股票机制,假设总的发行股票为 1000,现在股东 A 持股 10,那么股东 A 投票权为 10/1000=1/100。如下图所示,根据自己拥有的权益,投票选出可代表自己的受托节点,受托节点之间竞争记账权。
    在这里插入图片描述
  • 在 DPos 算法中,通常会选出 k(比如 101) 个受托节点,它们的权利是完全相等的。受托节点之间争取记账权也是根据算力进行竞争的。只要受托节点提供的算力不稳定,计算机宕机或者利用手中的权力作恶,随时可以被握着货币的普通节点投票踢出整个系统,而后备的受托节点可以随时顶上去。
  • DPoS 在比特股和 Steem 上已运行多年,整个网络中选举出的多个节点能够在 1s 之内对 99.9% 的交易进行确认。此外,DPoS 在 EOS(Enterprise Operation System,为商用分布式应用设计的一款区块链操作系统)中也有广泛应用,被称为区块链 3.0 阶段。
  • DPoS 是在 PoW 和 PoS 的基础上进行改进的,相比于 PoS 算法,DPoS 引入了受托人,优点主要表现在:
    • 由投票选举出的若干信誉度更高的受托人记账,解决了所有节点均参与竞争导致消息量大、达成一致的周期长的问题。也就是说,DPoS 能耗更低,具有更快的交易速度。
    • 每隔一定周期会调整受托人,避免受托人造假和独权。
  • 但是,在 DPoS 中,由于大多数持币人通过受托人参与投票,投票的积极性并不高;且一旦出现故障节点,DPoS 无法及时做出应对,导致安全隐患。

三种分布式共识算法对比分析

  • PoW、PoS 和 DPoS 这 3 种分布式共识算法对比:
    在这里插入图片描述

知识扩展:一致性与共识的区别是什么?
在平常使用中,我们通常会混淆一致性和共识这两个概念,接下来我就为你分析下这两个概念吧。
一致性是指,分布式系统中的多个节点之间,给定一系列的操作,在约定协议的保障下,对外界呈现的数据或状态是一致的。
共识是指,分布式系统中多个节点之间,彼此对某个状态达成一致结果的过程。
也就是说,一致性强调的是结果,共识强调的是达成一致的过程,共识算法是保障系统满足不同程度一致性的核心技术。

你知道的越多,你不知道的越多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/296926.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 开源项目

Qt 开源项目 Omniverse View链接技术介绍 QuickQanava链接技术介绍QField链接技术介绍 AtomicDEX链接技术介绍 Status-desktop链接技术介绍 Librum链接技术介绍 A Simple Cross-Platform ReaderQPrompt链接技术介绍 GCompris链接技术介绍 Scrite链接技术介绍 QSkinny链接技术介…

【LeetCode】链表精选11题

目录 快慢指针: 1. 相交链表(简单) 2. 环形链表(简单) 3. 快乐数(简单) 4. 环形链表 II(中等) 5. 删除链表的倒数第 N 个节点(中等) 递归迭…

burpsuite与sqlmap联动(sqlipy配置)

首先我们需要在burpsuite的 扩展-选项 里配置两个路径: 第一个路径为 jython-standalone-2.7.3.jar 的路径 这个jar文件我们需要自己下载,下载地址:https://www.jython.org/ 点击 download 点击 Jython Standalone 下载好之后将这个jar文件…

一个非常实用的Python SSH库

前言 Python的Paramiko库,它是一个用于实现SSHv2协议的客户端和服务器的库。通过使用Paramiko,我们可以在Python程序中轻松地实现远程服务器的管理、文件传输等功能。特别做智能硬件产品的同学要熟悉它,因为它能为你减少很多麻烦&#xff0c…

基于Python的电商平台淘宝商品评论数据采集与分析

引言 在电商竞争日益激烈的情况下,商家既要提高产品质量,又要洞悉客户的想法和需求,关注客户购买商品后的评论,而第三方API接口商家获取商品评价主要依赖于人工收集,不但效率低,而且准确度得不到保障。通过…

无约束优化问题求解(4):牛顿法后续

目录 前言SR1, DFP, BFGS之间的关系 BB方法Reference 前言 Emm,由于上一篇笔记的字数超过了要求(这还是第一次- -),就把后续内容放到这篇笔记里面了,公式的标号仍然不变,上一篇笔记的连接在这:…

WPF中DataContext的绑定技巧-粉丝专栏

(关注博主后,在“粉丝专栏”,可免费阅读此文) 先看效果: 上面的绑定值都是我们自定义的属性,有了以上的提示,那么我们可以轻松绑定字段,再也不用担心错误了。附带源码。 …

qt项目-《图像标注软件》源码阅读笔记-Shape类绘图及其子类

目录 1. Shape 概览 2. Shape 基类 2.1 字段 2.2 方法 2.3 嵌套类型 3. Shape2D 2d形状纯虚基类 3.1 字段 3.2 方法 4. Shape3D 3d形状纯虚基类 5. Shape2D子类 5.1 Rectangle 矩形类 1. Shape 概览 功能:Shape类及其子类负责形状的绘制及形状的存储。…

全部没有问题 (一.5)

java mooc练习 基础练习: 进阶练习: final 赋值一次 局部 必须赋值 抽象类 多态测试 package com.book;public class moocDraft1 {static int variable1;public void fatherMethod(moocDraft1 a){System.out.println(variable);}public static void…

C语言进阶---------作业复习

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

Python~字典快速上手

目录 Key的重要性 一 创建字典{} 二 字典用key查找 in(遍历)和[]用key查找 keyerror in和[]的效率对比 三 字典的插入/修改/删除(先查找) ​编辑 四 字典增删查改/遍历的效率 五 字典的遍历 for遍历可迭代对象拿到key 与创建顺序相同 keys/values/items方法 六 可…

Git本地仓库命令补充

说明:之前对Git本地仓库的基础使用总结过一篇笔记,Git本地仓库使用,本文对Git的一些基础命令进行补充。 一步提交 通常,我们本地仓库使用Git,文件都需要先 add,将文件从工作区加入到暂存区,然…