小白从零开始学习区块链的个人笔记(三) 分布式信息系统

3.1 分布式系统概述

分布式系统的基石

网络和通信协议

分布式系统的定义

《分布式系统原理和范型》:分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。各组件分布在网络计算机上,并且组件之间仅仅通过消息传递来通信并协调行动。
从进程的角度来看,在两个台主机的进程上,分别运行着两个程序,这两个程度相互协调,最终的目的是完成一个任务。在理论上来讲,这两个程序所组成的系统,就可以称之为“分布式系统”。
这两个程序可以是相同的,也可以是不同的。如果是相同的两个程序,我们将其称之为“集群”,也就是这两个相同的程序,通过不断地横向发展,进而达到提高服务能力的目的。

分布式系统的优点

1.没有主、从之分。
在分布式系统中,可以随意分布多台计算机之间在空间上的位置,系统中的 多台计算机之间没有主、从之分,即没有控制整个系统的主机,也没有受控的从机。
2.系统资源被所有计算机共享。
每台计算机的用户不仅能够使用本机的资源,还能够使用本分布 式系统中其他计算机的资源(包括CPU、文件、打印机等)。
3.系统中任意两台计算机都可以通过通信来交换信息。
4.与集中式系统相比,分布式系统具有性价比更高、处理能力更强、可靠性更高、扩展性很好的特点。

区块链之中的分布式系统应用

区块链中的分布式,参照它在比特币中的应用,可以理解为:
1.分布式的信息发布与传输:每个参与系统的节点都可以发起信息,每一个参与的节点可与相邻节点进行信息交互,全网公开传递有价值的信息。
2.分布式记账:每个参与系统的节点只要根据共识机制,完成工作量的设定,便能取得数据库的记账权,且记录可以追溯查询,但不可篡改。
3.分布式储存:分布式记账后在记录信息加工中加上一个时间戳,便会产生区块数据,网络广播出去后,就会在区块链中形成,每个节点可以选择储存完整的数据或者是部分数据。而且,每个节点都可以拥有一份完整的本地数据储存实时的更新。

3.2 共识协议Paxos

为什么要使用共识协议?

假设有一个数据库,可以用来存储一些非常重要的数据(比如银行需要存储的财务信息)。由于这些数据决不能丢失,因此你会尝试在很多其他的机器上复制存储备份这些数据,这些机器分别是M0, M1…Mn。
但是多个不同机器上的数据可能存在存储不一致的情况,如信息传输失败等等,我们要如何解决呢?
解决方法:引入两类机器或节点的概念
一类为协调者(coordinator),通常一个系统中只有一个
另一类为事务参与者(cohorts),一般包含多个,在数据存储系统中可以理解为多个数据副本。
此时事务参与者的数据副本可能一样,但如果协调者出错了怎么办?
如果引入多台协调者,那么如果数据更新不及时导致多个协调者之间出现数据不同步,导致双花问题出现怎么办?
由此,引入共识机制

Paxos

Paxos的三种节点

1.Proposer:提案者
Proposer 可以有多个,Proposer 提出议案(value)。所谓 value,在工程中可以是任何操作,例如 “修改某个变量的值为某个值”、“设置当前 primary 为某个节点”等等。Paxos 协议中统一将这些操作抽象为 value。不同的 Proposer 可以提出不同的甚至矛盾的 value,例如某个 Proposer 提 议“将变量 X 设置为 1”,另一个 Proposer 提议“将变量 X 设置为 2”,但对同一轮 Paxos 过程, 最多只有一个 value 被批准。
2. Acceptor:批准者
• Acceptor 有 N 个,Proposer 提出的 value 必须获得超过半数(N/2+1)的Acceptor 批 准后才能通过。 • Acceptor 之间完全对等独立。
3.Learner: 学习者
Learner 学习被批准的 value。所谓学习就是通过读取各个 Proposer 对 value 的选择结果,如果 某个 value 被超过半数 Proposer 通过,则 Learner 学习到了这个 value。这里类似 Quorum 议 会机制,某个 value 需要获得 W=N/2 + 1 的 Acceptor 批准,Learner 需要至少读取 N/2+1 个 Accpetor,至多读取 N 个 Acceptor 的结果后,能学习到一个通过的 value。

Paxos中 proposer 和 acceptor 是算法的核心角色,paxos 描述的就是在一个由多个 proposer 和多个 acceptor 构成的系统中,如何让多个 acceptor 针对 proposer 提出的多种提案达成一致 的过程,而 learner 只是“学习”最终被批准的提案。

具体实现过程可见
https://segmentfault.com/a/1190000018844326

3.3 拜占庭将军问题

两者的关系
在这里插入图片描述

叛徒对共识的影响

叛徒可以通过某些方式欺骗忠诚的将军,使他们采取进攻行动;促成一个不是所有将军都同意的决定,如当将军们不希望进攻 时促成进攻行动;迷惑某些忠诚的将军,使他们无法做出决定
如果叛徒达到了这些目的之一,使得总数超过半数的将军违背了本来的决策结果,这样最终的结果就会和本来共识结果相反,这样任何攻击行动的结果都是注定要失败的。

如何解决拜占庭将军问题

第一,要让所有忠诚的接受命令的将军接收相同的命令。在区 块链系统中,就是要使得恶意结点的错误消息不会被区块链其他结点所接收;
第二是要实现“如果发送命令的将军是忠诚的,那么所有忠诚的接收命令的将军遵守所接收的命令”。在区块链中,如果消息发布者发布的区块是合法的,那么其他所有结点都会把它加入到自己本地的区块链中。
只选择“忠诚的将军”作为发布者以及保证恶意发布者发布的消息不会被接受。
以之前的POW(工作量证明算法)为例,它要求节点完成一定的工作量才有可能得到发布区块的权利,这也就是提高了恶意节点造假的成本——它必须做第一个完成证明的节点,而这需要很高的算力,一旦没有成功,就是白白消耗算力
下面介绍另一种解决算法:PBFT算法,即实用拜占庭容错算法。

3.4 PBFT算法

本质:使用通信次数换取可靠性

代价:每个命令的执行都需要节点间两两交互去核验消息,这产生了比较高的通信代价

算法工作流程:
1.客户端向随机生成的主节点A发出信息,然后主节点将信息编号,然后向节点分发预准备信息
在这里插入图片描述
2.备份节点之间也发出自己所接收到的信息,同事收到其他备份节点收到的信息
在这里插入图片描述
3.备份节点之间进行信息的比对,可能有以下2种情况
(这里假设只有一个叛徒,如果有多个叛徒则此处的假设不成立,因为实用拜占庭容错算法的容错当且仅当容错节点数目小于等于总结点数的三分之一时才能成立
在这里插入图片描述在这里插入图片描述

发布了3 篇原创文章 · 获赞 0 · 访问量 62

猜你喜欢

转载自blog.csdn.net/weixin_45067603/article/details/105473648