读书笔记之共识算法


《白话区块链》读书笔记,记录个人理解。区块链是一个去中心化的系统,因此没有一个权威节点做决策。需要全网所有的节点达成共识,才算决策的完成。首先说两个定理FLP与CAP

FLP定理

叫FLP是因为提出该定理的论文是由Fischer、Lynch和Patterson三位作者在1985年发表的,取了各自名字的首字母作为定理名称。看下定义:在网络可靠、存在节点失效(即使只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。在这个原理的前提下,也告诉人们:不要浪费时间去为异步分布式系统设计在任意场景下都能实现共识的算法,在允许节点失效的情况下,纯粹异步系统无法确保一致性在有限时间内完成。

这个其实也很好理解,比如三个人在不同房间回答问题,虽然三个人彼此之间是可以通过电话沟通的,但是经常会有人时不时地开小差,比如Alice和Bob都回答了某个问题,Lily收到了两者的回答结果,然后玩游戏去了,忘了回复,则三个人永远无法在有限时间内获得最终一致的答复。这个定理在理论上证明了此路不通,也就节省了后来者的研究时间。

CAP定理

这个定理相比学过计算机的应该都知道,即分布式系统中一致性、可用性和分区容错性,这三者不可兼得

拜占庭将军问题

简单来说,就是分布式系统中的节点存在恶意节点,即这个节点故意制造假信息。这种情况下分布式系统如何达成共识

共识算法的目的

在有错误的进程存在并且有可能出现网络分区的情况下,FLP定理堵死了我们在传统计算机算法体系下提出解决方案的可能性。计算机科学家就想,如果我们把FLP定理的设定放松一点,问题是否有解呢?由社会学和博弈论中得到启发,科学家尝试引入了以下机制。

激励机制(incentive)

在拜占庭将军问题中给忠诚的将军以奖励。当背叛的将军发现背叛行为没有任何收益的时候,他们还有背叛的动机吗?这里引进了博弈论的概念:我们不再把节点或者说将军分成公正/恶意(忠诚/背叛)两方,认为每一个节点的行为是由激励机制决定的。正如两千年前中国诸子百家热烈争论的话题:人之初,性本善焉,性本恶焉?我们认为,人之初,性无善无恶。性的善恶由后天的激励机制决定。如果激励机制设置得当,考虑到每个节点都有最大化自己利益的倾向,大部分的节点都会遵守规则,成为公正的节点。

随机性(randomness)

在拜占庭将军问题中,决定下一步行动需要将军们协调一致,确定统一的下一步计划。在存在背叛将军的条件下,忠诚的将军的判断可能被误导。在传统的中心化系统中,由权威性大的将军做决定。在去中心化的系统中,研究者提出一种设想:是否能在所有的将军中,随机地指定一名将军作决定呢?这个有点异想天开的设想为解决拜占庭将军问题打开了一扇门。根据什么规则指定做决定的将军呢?对应到金融系统里,就是如何决定谁有记账权。

  • 根据每个节点(将军)的计算力(computing power)来决定。谁的计算力强,解开某个谜题,就可以获得记账权(在拜占庭将军问题里是指挥权)。这是比特币里用的PoW共识协议。
  • 根据每个节点(将军)具有的资源(stake)来决定。所用到的资源不能被垄断,谁投入的资源多,谁就可以获得记账权。这是PoS共识协议。

Author: 顺坚
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source 顺坚 !
评论
 Previous
SpringBoot启动过程和自动装配 SpringBoot启动过程和自动装配
SpringBoot看过很多次,但是一直理解不深,只停留在了解的阶段。直到最近公司项目做拆分,需要用到SpringBoot启动时的一些特性,于是把启动过程看了一遍。举个例子 测试对Spring启动原理的理解 Rpc框架和Spring的集成问
2024-07-27
Next 
区块链 区块链
对区块链有了一些新的理解,在此记录一下。区块链是一个分布式的数据存储系统,网上说到区块链就会说比特币,确实现在比特币是区块链最成功的实践,但是区块链不仅仅只能用于虚拟货币,区块链中的区块存储的是交易信息,那么区块链是虚拟货币。但还可以存储其
2024-04-05
  TOC