
分布式原理
文章平均质量分 94
seafooler
不说了
展开
-
也谈PBFT/Tendermint/HotStuff中的活性问题、响应度问题和锁定问题
文章目录1. 写在前面2.两/三阶段共识中的锁定机制3.共识协议中Leader可信度的不同4.Single-modal类共识中锁定机制的设计4.1 对锁定机制中规则2活性的理解4.2 为什么Tendermint在进行leader切换的时候要等待Δ\DeltaΔ4.2.1 Tendermint不等待Δ\DeltaΔ导致的Hidden Lock问题4.2.2 为什么等待Δ\DeltaΔ可以解决Hidden Lock问题4.3 为什么HotStuff不需要等待Δ\DeltaΔ1. 写在前面在HotStuff的原创 2021-09-20 23:33:49 · 1813 阅读 · 1 评论 -
Fabric中PBFT源码解读——状态同步
文章目录1.写在前面1.1 前置阅读1.2 instance.skipInProgress字段2. 标记需要进行“状态同步”3. 启动“状态同步”操作4. retryStateTransfer函数的实现细节5. simpleConsumer.skipTo函数的实现细节参考文献1.写在前面1.1 前置阅读本篇博客是建立在之前一些博客的基础上。一切重复的知识介绍,笔者在这篇博客中就不再赘述了。因此,强烈建议读者先去阅读一下以下这几篇博客。Fabric中PBFT源码解读 (1)Fabric中PBFT原创 2021-01-24 22:45:38 · 814 阅读 · 1 评论 -
Fabric中PBFT源码解读——Checkpoint机制
文章目录1. 写在前面1.1 前置阅读1.2 对TestCheckpoint函数的测试2. 对TestCheckpoint函数运行流程的解读2.1 Checkpoint和Water mark的概念解释2.2 sendPrePrepare函数中对sequence的检查2.3 Commit请求时生成Checkpoint2.4 recvCheckpoint函数的实现细节(1)2.4 recvCheckpoint函数的实现细节(2)3. 小结参考文献1. 写在前面1.1 前置阅读本篇博客是建立在之前一些博客的原创 2021-01-23 21:15:31 · 905 阅读 · 2 评论 -
为什么PBFT中需要2f+1
文章目录0. 写在前面1. Prepare阶段为何需要2f+1?2. Commit阶段为何需要2f+1?参考文献0. 写在前面关于PBFT中为什么需要2f+1个Prepare/Commit的问题,网上其实有很多博客和文献来阐述,如这篇博客PBFT中的几个重要参数以及这本书"Introduction to reliable and secure distributed programming"。这些博客和文献大都采用了比较理论的证明方式,使用了Quorum的概念。即拜占庭网络中的Quorum值是2f+1原创 2021-01-12 12:51:46 · 2619 阅读 · 7 评论 -
为什么PBFT协议中需要Commit阶段
文章目录1. 写在前面:一个问题2. Prepared数据作为可执行证明3. 假设不存在Commit阶段4. Commit阶段如何解决上述问题参考文献1. 写在前面:一个问题我们首先来思考一个问题:对于BFT类型的共识,每个正确节点在执行一条交易(客户端发出的执行请求)之前中需要满足什么样的条件?或者说它应该在何时执行一条交易?笔者的理解是:它需要利用一个确切的机制/算法,去检查一种时机/条件。该算法保证满足了该时机/条件后,其他正确节点也会做出相应的执行操作,此时其便可执行该交易。这便暗含着一个要求原创 2021-01-12 11:25:20 · 2283 阅读 · 19 评论 -
Fabric中PBFT源码解读 (5)
文章目录9. 节点对reqBatch的执行流程9. 节点对reqBatch的执行流程在上一篇博客中第7节的最后,我们介绍到节点在接收到execDoneEvent类型的Event后,将调用instance.execDoneSync()对该event对应的reqBatch进行执行。为方便后面的表述,我们假设reqBatch代表了一批交易。为方便读者理解,我们将相关代码再次摘录如下:// [pbft-core.go] ProcessEventfunc (instance *pbftCore) Proce原创 2021-01-08 17:14:34 · 537 阅读 · 2 评论 -
Fabric中PBFT源码解读 (4)
文章目录7. Commit消息的接收以及后续执行8. 测试的优雅结束7. Commit消息的接收以及后续执行本系列的第一篇博客介绍了源代码的获取和测试用例的选择;第二篇博客介绍了Primary节点对repBatch的处理,以及对PrePrepare消息的发送;第三篇博客介绍了Preprepare消息的接收以及Prepare消息的发送、Prepare消息的接收以及Commit消息的发送。强烈建议读者先阅读上述三篇博客,再来阅读当前这篇。第三篇博客的第6节介绍了节点2中对Commit消息的发送,本节介绍原创 2021-01-08 10:52:29 · 545 阅读 · 1 评论 -
Fabric中PBFT源码解读 (3)
5. Preprepare消息的接收以及Prepare消息的发送本系列的第一篇博客介绍了源代码的获取和测试用例的选择,第二篇博客介绍了Primary节点对repBatch的处理,以及对PrePrepare消息的发送。强烈建议读者先阅读上述两篇博客,再来阅读当前这篇。4.2小节介绍了节点0中Preprepare消息的发送过程,本小节介绍其他节点(以节点1为例)接收Preprepare消息的过程和发送Prepare消息的过程。由4.2小节的最后介绍可知,节点0的Preprepare消息最终发送到了节点1原创 2021-01-08 10:19:04 · 573 阅读 · 0 评论 -
Fabric中PBFT源码解读 (2)
文章目录4. Primary节点对repBatch的处理4.1 通道变量events和测试网络变量net4.2 Preprepare消息的发送过程4. Primary节点对repBatch的处理由上一篇博客Fabric中PBFT源码解读(1)的第3节可知,测试数据repBatch传入到了Primary节点(节点0)的events通道中。本节介绍Primary节点如何取出repBatch测试数据,并基于该数据构建及广播PrePrepare消息。在介绍Primary节点的操作之前,首先介绍两个非常重要的变原创 2021-01-07 15:33:44 · 888 阅读 · 0 评论 -
Fabric中PBFT源码解读 (1)
1. 写在前面笔者一直以来想学习一下PBFT的完整工程实践。但在网上搜了很多源码和博客,都没能找到一份比较独立且完整的PBFT实现。无奈之下,只能从Hyperledger Fabric的代码中学习其PBFT共识部分的代码。因此,接下来的系列博客中,笔者将介绍在Fabric中是如何实现PBFT共识算法的。1.1 源码版本及获取Fabric在0.6版本中采用了PBFT,因此在从github中clone了源代码后,需要首先切换到v0.6.0-preview分支。PBFT共识相关的代码主要包含在fabric原创 2021-01-07 13:40:15 · 2069 阅读 · 2 评论 -
谈谈FLP和CAP的关系
1. 写在前面承接上一篇博客:也谈分布式系统中的网络模型和故障模型,本篇博客仍然想探讨一些分布式系统的理论知识。大家应该都听说过分布式系统理论中的FLP不可能性和CAP不可能三角,那么FLP和CAP之间是什么关系呢?等价还是包含?本篇博客,就想来谈谈FLP和CAP之间的关系。2. 理论回顾本节先分别回顾一下FLP和CAP这两个理论。2.1 FLP不可能性Impossibility o...原创 2020-04-29 15:49:51 · 2498 阅读 · 0 评论 -
也谈分布式系统中的网络模型和故障模型
文章目录1. 写在前面2. 再理解网络模型2.1 一个疑问3. 故障模型的划分3.1 一个疑问3.2 按照故障发生的领域分类(Domain of failure occurrence)3.2.1 值故障 (Value failure)3.2.2 时间故障 (Time failure)3.3 按照用户对数据的感知分类(Perception by the system users)3.3.1 非一致性...原创 2020-04-23 23:27:17 · 3453 阅读 · 1 评论