《区块链技术指南》笔记

分布式系统核心技术

一致性问题

  1. 对于多个服务节点,给定一系列操作,在约定协议的保障下,使得它们对处理结果达成“某种程度”的协同
  2. 传统传统分布式系统中讨论一致性,往往是指在外部任意发起请求( 如向多个节点发送不同请求) 的情况下,确保系统内大部分节点实际处理请求序列的一致,即对请求进行全局排序
  3. 实际挑战:
    1. 节点间网络通信不完全可靠
    2. 节点处理请求的时间无法保障
    3. 同步调用课简化操作,但扩展性低,拉低吞吐率
  4. 解决问题的核心秘诀:把不同时空发生的多个时间进行全局唯一排序,而且这个排序大家都认可

共识算法

  1. 严格意义上共识算法和上述的一致性不完全相同。一致性指多个副本对外呈现的状态(如顺序一致性、线性一致性)。而共识则特指分布式系统中多个节点之间对某个事情达成一致看法的过程,因此达成某种共识并不意味着就保障了一致性
  2. 共识算法解决的是分布式系统大部分节点对某个提案达成一致的过程
  3. 实际挑战:
    1. 如何提出一个待共识的提案,如通过令牌传递等
    2. 如何让多个节点达成共识
  4. 实际上上述两点不好解决,因为系统中除了有“非拜占庭节点(不响应)”,还会有“拜占庭节点(可能伪造恶意响应)”
  5. 不允许拜占庭错误的叫做Crash Fault Tolerance问题,允许的叫做Byzantine Fault Tolerance问题,后者是区块链的核心问题
  6. BFT问题的解决方案主要有两类
    1. PBFT为代表的确定性系列算法。一旦达成共识就不可逆转
    2. Pow为代表的概率算法,共识结果是临时的,随着时间推移,共识结果被推翻的概率越来越小而成为事实结果。
  7. XFT算法:提供类似CFT的处理响应速度,并能在大多数节点正常工作时提供BFT保障
  8. 分布式系统的共识问题无通用解(FLP不可能原理)
  9. FLP不可能原理:在网络可靠,但允许节点失效( 即便只有一个) 的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法。所以不用浪费时间去试图为异步分布式系统设计面向任意场景的共识算法。

多阶段提交

  1. 二阶段提交:
    1. 预提交:协调者发起提交某个事务的申请,各参与执行者需要尝试进行提交并反馈是否能完成
    2. 正式提交:如果协调者得到所有执行者的成功答复,则发出正式提交请求
  2. 三阶段提交(Paxos原型):
    1. 尝试预提交:协调者问执行者是否能提交,执行者只需要答复无需执行
    2. 预提交:协调者检查收到的答复,如果全部为真,则发起提交事务请求,执行者执行并反馈
    3. 正式提交:如协调者如果得到所有执行者的成功答复,则发出正式提交请求,如果成功完成则算法执行成功

概率类算法 VS BFT类算法

  • 之前一直对一个问题感到困惑,为什么拜占庭容错下证明容错率最多到1/3,而同样解决“拜占庭将军问题”的POW算法却能有51%的容错率?
  • 以我的理解:拜占庭将军问题的核心是允许在少数节点作恶(消息可能被伪造)场景下达成共识的问题,概率类算法(如POW)和BFT类(如PBFT)的核心区别在:
    • 概率型算法是多个人同时提出提案,选择最后听谁的问题,即争取记账权
    • BFT 型算法,首先会先选出一个主节点,发出一个提案,然后在这个前提下大家达成共识,因此存在3f+1的问题
  • 以上是两种不同的解决拜占庭将军问题的思路

参考

猜你喜欢

转载自blog.csdn.net/qq_18122705/article/details/82985456