02 区块链分布式

分布式系统综述

分布式系统是多个处理机通过通信线路互联而构成的为了完成共同的任务而协调工作的计算机节点组成的松散耦合系统。

区块链分布式板块综述

分布式系统拓扑结构概念

分布式拓扑结构是指网络之间设备的分布情况以及连接状态。

分布式系统概论

分布式系统基本机制

数据分片

数据分片将数据集划分为更小的不同的独立数据库。

数据复制

数据复制将数据集划分为更小的不同的独立数据集。

三种数据复制变更算法:主从复制、多主节点复制、无主节点复制。

主从复制

由主节点接受写操作请求,然后将更新后数据发送到所有从节点,读操作请求则在主从上都可以进行。

多主节点复制

每个主节点都可以接受写操作,主节点可以相互充当其他节点从节点,其过程与主从复制类似。

无主节点复制

所有的节点都支持直接接受写操作请求。

分布式系统优势

用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。

资源共享

加快计算速度

可靠性高

灵活度高

分布式系统劣势

分布式系统的缺点主要体现在系统设计、管理和运维上。

系统复杂性增加

维护性弱于单机系统

管理成本增加

分布式系统面临的挑战

分布式系统由于其大量机器协作,面临诸多挑战

异构的机器与网络

普遍的节点故障

不可靠的网络

分布式一致性和两个重要理论

分布式一致性概念

分布式一致性指多个节点对某一变量的取值达成一致,一旦达成一致,则变量的本次取值即被确定。

数据一致性

事务一致性

分布式一致性的类型

强一致性

数据更新后任何时刻所有的用户或者进程查询到的都是最近一次成功更新的数据

弱一致性

数据更新后可能访问部分或访问不到

最终一致性

在一段时间后数据最终达到一致

因果一致性

事务执行的前后逻辑保持一致

分布式一致性要求出现的原因

节点之间的网络通信是不可靠的

节点的处理可能是错误的

同步调用会让系统变得不具备可扩展性

分布式一致性系统的要求

可终止性

共识性

合法性

FLP不可能原理

概述

在网络可靠,但允许节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法。

该原理由 Fischer、Lynch 和 Patterson 三位科学家于 1985 年发表的论文《Impossibility of Distributed Consensus with One Faulty Process》中提出,后来该论文获得了 Dijkstra 奖12。

说明

参考文档

分布式系统核心技术 - FLP 不可能原理 - 《区块链技术指南 v1.6.2》 - 书栈网 · BookStack

CAP原理

分布式计算系统不可能同时确保以下三个特性:

参考文档

分布式系统核心技术 - CAP 原理 - 《区块链技术指南 v1.6.2》 - 书栈网 · BookStack

分布式系统中两个原则与多阶段提交

ACID原则

ACID是关系型数据库的事务需要遵守的原则。

BASE原则

网络分区

网络分区是分布式系统的常见异常。网络分区会导致数据不一致。

分区的情况很少出现,实际上CAP大多数时间能够同时满足一致性(C)和可用性(A)。

BASE理论简介

BASE理论是Basically Available(基本可用),Soft State(软状态)和Eventually Consistent(最终一致性)三个短语的缩写。

多阶段提交

概念

多阶段提交(3PC:Three-Phrase Commit)将节点划分为协调者与事务参与者,并将事务划分为尝试预提交阶段、预提交阶段、正式提交阶段。

  1. 投票之前,问能不能投票?
  2. 正式提交投票结果之前,问做出决定了吗?
  3. 正式提交投票结果

经过了三个步骤,确保了投票结果的产生

尝试预提交

预提交

正式提交

区块链共识算法演进

共识算法概述

定义:

区块链系统中各分布节点对事务或状态的验证、记录、修改等行为达成一致确认的方法。

共识算法具有以下三个特征

可终止性

合法性

共识性

区块链共识算法的演进

1959年

《主观概率的共识:平衡-互惠方法》

首次以一致性问题为研究对象

1982年

正式提出拜占庭容错类算法

解决了网络存在恶意节点时如何达成一致的过程和算法。

少数服从多数的原则

1989年

提出Paxos算法开创非拜占庭容错类算法

解决了存在网络故障时如何达成一致的过程和算法。

少数服从多数的原则

2008年10月

中本聪发表论文开启区块链共识算法研究

提出POW共识算法。

解决了扩容问题,支持节点随时加入与离开。

少数服从多数+工作量证明

2008年之后

学者们在共识算法领域的研究如雨后春笋般涌现,先后提出PoS、DPoS、Raft等一系列新的共识算法。

证明类共识算法概述

证明类共识被称为“Proof of X”类共识,即节点在每一轮共识过程中必须证明自己具有某种特定的能力,以获得记账权和奖励。

POW机制

POW采用按劳分配的原则,将算力作为记账的主要指标,算力大的节点将有更多的机会在区块链上进行记账。

基本要素

工作量证明函数

难度值

区块

记账策略

  1. 客户端产生新的交易,向全网广播
  2. 每个节点收到请求,将交易暂存于存储池中
  3. 每个节点进行pow工作量证明
  4. 当某个节点找到了证明,向全网广播
  5. 当且仅当该区块的交易时有效的且在之前从未存在的,其他节点才认同该区块的有效性
  6. 接受该区块且在该区块的末尾制造新的区块

POS机制

权益证明机制,即POS,是针对工作量证明机制存在的不足而设计出来的一种改进型共识机制。

基本原理

要求用户证明自己拥有一定数量的数字货币的所有权,即“权益”。

基本概念

币龄,即持有货币的时间。这是POS机制难度值确定的核心

利息,即在发现区块之后会根据一定的利息给付数字货币。

POS与POW共识算法比较

比较项POWPOS
记账权获得以算力竞争记账权利以权益竞争记账权利
篡改难度
头部玩家未能解决未能解决

选举类共识概述

概述

选举类共识是指节点在每一轮共识过程中通过“投票选举”的方式选出当前轮次的记账节点。

Paxos共识算法

机制

Paxos共识算法是一种选举类算法,采用了少数服从多数的原则选取结果。

Paxos节点被划分为不同角色:

提议者(Proposer):提出议案

决策者(Acceptor):参与决策,回应提案

最终决策学习者(Learner):不参与决策,接受议案

过程

Paxos共识算法过程包括提案生成过程和接受提案过程。

Raft共识算法

概述

Paxos和Raft都是为了实现一致性这个目标。

后来斯坦福大学的两位博士基于Paxos思想在《In Search of Understandable Consensus Algorithm》一文中提出了Raft算法。

角色

领导者(Leader):处理所有客户端交互

追随者(Follower):类似选民,完全被动

候选人(Candidate):可以被选为一个新的领导

Raft算法过程

分为两个阶段

  1. 选举过程
  2. 在选举出来的领导人带领下进行正常操作,比如日志复制等。

发出请求

每一个节点都有一个随机倒计时器,当倒计时结束的时候,这个节点切换为候选人状态,它想其他服务器跟随者发出要求选举自己的请求。

反馈

其他服务器同意了,发出OK。

注意如果在这个过程中,有一个follower宕机,没有收到请求选举的要求,因此候选人可以自己选自己,只要达到N/2+1的大多数票,候选人还是可以成为leader的

脑裂

如果有多余的领导人被选出,则被称为脑裂(brain split),如果出现脑裂会导致数据的丢失或者覆盖。

避免脑裂

一个节点某任期内最多只能投一票

只有获得大多数选票才能称为领导人

发出命令

候选人就成为领导人,领导人可以向选民发出指令(比如进行日志复制)

心跳机制

以后通过“心跳机制”进行日志复制的通知

补充:

心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制

Leader宕机

如果一旦这个Leader宕机崩溃了,那么Follower中有一个成为候选者,发出邀票选举。

PBFT与蜜罐共识算法

PBFT共识算法

实用拜占庭容错算法(Practical Byzantine Fault Tolerance,简称PBFT)。

拜占庭将军问题

问题描述

拜占庭将军问题是一个分布式系统中的容错问题。想象一下,拜占庭帝国的军队被分割包围在敌城周围,各部分军队(将军)只能通过信使通信。将军们必须决定是进攻还是撤退。但是,其中有叛徒(可能是通信被篡改或者将军本身叛变),叛徒会传递错误的信息来扰乱正常的决策。 目标是在存在叛徒的情况下,让忠诚的将军们能够达成一致的作战计划(全部进攻或者全部撤退),并且这个计划是正确的(不会因为叛徒的干扰而做出错误决策)。

数学模型表示

假设有个将军,其中最多有个叛徒。将军们需要对一个值(进攻或撤退)达成共识。每个将军会向其他将军发送自己的意见(值),同时接收其他将军发来的意见。 难点在于如何在不知道哪些是叛徒的情况下,根据收到的信息做出正确的决策。例如,如果简单地采用多数投票,当叛徒数量较多时,可能会导致错误的决策。

PBFT简介

PBFT,实现了在有限个节点的情况下的拜占庭问题,算法经过三个阶段达成一致性,分别是有3f+1的容错性,即PBFT算法可以容忍小于1/9个无效或者恶意节点,并同时保证一定的性能。

PBFT核心和基本原则-少数服从多数

为什么是3f+1的容错性?

PBFT达成共识的过程——三阶段过程(预准备阶段、准备阶段、承诺阶段)

PBFTPOW机制
优点
  • 允许33%的容错;
  • 可以快速结算和快速担保交易
  • 不需要知道参与网络的所有节点;
  • 任何节点都可以在任何时间点离开或者加入;可以扩展到分布在全世界的大量节点和参与者。
缺点无法扩展到1000个节点以上
  • 处理速度非常慢
  • 吞吐量非常有限
  • 消耗了大量的能量

蜜罐算法

简介

蜜罐算法(Honey Badger),是我们科学家与其他国家合作提出的一种拜占庭共识算法。

时间假设

指的是对于共识节点而言,他们期望对端节点在一个特定时间之内(特定时间长度不会变化)能够给出响应。

过程

分为三个步骤

加密交易

广播交易

解密交易

Avalanche和Algorand算法

Avalanche算法(雪崩算法)

简介

《Snowflake to Avalanche:A Novel Metastable Consensus Protocol Family for Cryptocurrencies》

亚秒级共识、高吞吐量、高安全性、全智能合约研发生态

Avalanche是共识算法的重大突破和创新。将传统分布式一致算法与经典区块链共识机制的设计思想结合。

核心约定

算法提出了一组拜占庭容错协议(简称共识家族 Consensus family)。

共识家族对诚信节点(Correct nodes)和恶意节点(Byzantine nodes)的行为做了提前约定。如下:

  • 诚实节点之间绝不会提交彼此有冲突的业务,而恶意节点也无法制造与诚实节点的冲突。
  • 恶意节点可以制造许多彼此冲突的业务提交,而诚实节点只会接受其中一个提交。

共识过程

Avalanche共识过程的发展经历了四个阶段,每个阶段(共识家族协议)都在前一个基础上进行了升级。

第一阶段Slush(融雪)

Slush协议规定每个节点有三种状态,即无状态、真和假,分别用黄色、蓝色和红色表示。

重复采样

第二阶段Snowflake(雪花)

在Slush的基础上对每个节点增加了一个计算器(counter)。具体来说:

  • 每个节点都有一个计算器;
  • 每一轮子采样完成后,如果颜色与上一轮相同,则计算器加1;
  • 每一轮子采样完成后,如果颜色与上一轮不同,则计算器重置为0;
  • 当计算器的值超过阈值时,则接受该节点所倾向的颜色。
  • 图示和第一阶段一样。走和第一阶段同样的网络传播过程。
第三个阶段Snowball(雪球)

Snowball在Snowflake原有计算器基础上增加了置信度(confidence),通过概率算法,减少随机扰动。

第四阶段Avalanche(雪崩)

在Snowball的基础上添加有向无环图。一个DAG节点可以有多个父节点和多个子节点。而线性结构的节点只能有一个父节点和一个子节点。

Algorand算法

Algorand利用VRF函数(可验证随机函数)将区块产生者和投票者的选举随机化,让恶意节点难以攻击。

随机选择区块生成者与验证者

种子凭证验证者领导者区块产生
在第一轮种子是系统随机生成,但是后轮次中,种子是前一轮种子和轮数的VRF的随机结果凭证=VRF(种子+节点私钥签名+轮次)节点将区块与凭证广播,凭证出现概率小于某个值的节点成为验证者验证者中凭证值最小的数为领导者领导者广播的块将成为下一步验证的区块。

拜占庭协议BA-一个两阶段投票机制

### 区块链分布式技术原理 区块链作为一种分布式的账本技术,其核心在于利用密码学方法保证交易的安全性和不可篡改性。在没有中央控制点的情况下,区块链通过共识算法确保所有参与者达成一致的状态[^2]。 具体来说,区块链采用了一系列关键技术来实现这一目标: - **加密算法**:用于保障数据的真实性和完整性; - **P2P网络协议**:使得各个节点之间可以直接通信并共享资源; - **共识机制**:解决拜占庭将军问题,使不同节点能够在不完全互信的前提下就某些事实达成统一意见; 这些组件相互协作,形成了一个去中心化的、可靠的数据库结构。每个区块都包含了前一区块的哈希值以及当前批次的所有交易信息,并经过验证后被追加到链条末端。由于任何修改都会破坏后续链接关系,因此一旦写入便难以更改历史记录。 ### 实现方式 为了维持整个系统的稳定运行,区块链依赖于精心设计的数据管理和传播策略: #### 数据管理 - 所有交易都被打包成一个个独立的“区块”,并通过特定规则连接起来构成一条完整的链条。 - 新增条目需遵循严格的格式要求,并附带必要的签名证明。 #### 节点间同步 - 当某个节点创建新区块时,会向全网广播该消息。 - 接收到通知后的其他成员会对新加入的内容进行审核确认。 - 经过多数派同意之后,此更新才会正式生效并向外扩散至全部副本之中。 此外,针对可能出现的竞争条件或者恶意行为,还需要引入额外措施加以防范,比如工作量证明(PoW) 或权益证明 (PoS),以此激励诚实守约者的同时惩罚违规操作者。 ```python class Block: def __init__(self, index, timestamp, data, previous_hash): self.index = index self.timestamp = timestamp self.data = data self.previous_hash = previous_hash self.hash = calculate_hash() def add_block_to_chain(new_block): last_block = blockchain[-1] if new_block.previous_hash != last_block.hash: raise Exception('Invalid block') # Verify the proof of work here blockchain.append(new_block) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FrancyZhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值