首页 > 解决方案 > Hyperledger Fabric 中使用了什么样的共识?

问题描述

我不知道这个问题是否有意义,我知道 Raft 是共识算法并使用 etcd 来分发数据,并且我知道 Raft Ordering Service 中的 etcd 与 Kafka Ordering Service 中的 zookeeper 有类似的工作,但我不知道明白了,Kafka 排序服务使用了什么样的共识?

目前订购服务可以使用 Raft 或 Kafka(已弃用),但 Raft 是一种共识算法,而 Kafka 不是。或者实际上它们都只是共识排序阶段的一部分?那么这是否意味着现在 Fabric 使用共识算法成为共识的一部分???那么 Fabric 中使用了什么样的共识呢?我在某处读过 Fabric 还不是 PBFT。

标签: hyperledger-fabrichyperledgerconsensus

解决方案


让我们把它作为排序和共识来讨论,并引入 Kafka 和 Raft。

在分布式系统中,消息将发送到多个节点,所述节点需要一种方法来知道哪个消息先来,哪个是第二个等等。将其视为您银行帐户上的交易。如果您的帐户中有 20 美元,而有人付给您 30 美元,那么您的帐户变为 50 美元,而您付给我 50 美元而您的帐户变为 0 美元,这是一个有效的序列。但是,如果你的银行把订单弄乱了,你从 20 美元开始,然后以 50 美元转帐给我,那张支票就会被退回。

所以这个顺序(也称为顺序)很重要,在 Fabric 中,这是由 The Order Node 完成的。

为了冗余、减轻恶意、去中心化和其他原因,您可能不希望只有一个节点提供订单。但是,如果您有 n 个排序节点,您如何确保它们提出一个消息顺序而不是该顺序的 n 个变体?您可以在这些节点之间就这些消息的顺序达成共识。正如其中一位响应者所发布的那样——您可以使用 RAFT 或 Kafka 达成共识。两者都是崩溃容错(CFT)共识算法,这意味着理论上只要大多数排序节点都很好,(3 个中的 2 个,或 5 个中的 3 个等)你的状态很好。

您是对的,RAFT 确实使用了 etcd,但我认为这是一个实现细节,与概念上的共识无关。Etcd 是一个开源键值存储,用于保存和管理分布式系统需要保持运行的信息。它被 RAFT 在 Fabric 中使用,但它也被其他项目使用,比如我认为 kubernetes 使用它来管理所有配置和元数据等

我不知道 Hyperledger Fabric 有一个拜占庭容错库(我认为 2/3 或更少的排序节点可能有故障,系统仍然可以运行)可用于 Hyperledger Fabric,尽管已经并继续讨论它和Fabric 文档指出,RAFT CFT 是未来 Fabric 的 BFT 共识库的垫脚石。

我还要重申审查另一张海报发布的订购服务文档的链接,作为审查更多信息的好材料。

我也非常喜欢这个RAFT 视频介绍,它与 Fabric 无关,但如果您有兴趣,它可以很好地解释 RAFT。


推荐阅读