具有多个排序器的通道中的事务排序

Transactions order in a channel with multiple Orderers

希望我对 Hyperledger Fabric 的理解是正确的,有人可以解释一下,在一个通道中,来自不同组织的节点如何以正确的顺序进行交易?

举个例子,客户端A发送交易T1和T2给第一个组织的排序节点,客户端B发送交易T3和T4给第二个组织的排序节点。所有这四笔交易都应该以正确的顺序出现在账本中。

假设您有多个排序服务节点 (OSN),每个组织都在使用这些节点。多个排序服务节点(在生产环境中)将依赖的主要组件是 fault-tolerant(仅停止,而非拜占庭)Kafka 集群(更准确地说是 Kafka ZooKeeper 集成)。

Kafka 中的消息(记录)被写入主题分区。一个 Kafka 集群可以有多个主题,每个主题可以有多个分区。每个分区都是一个有序的、不可变的记录序列,可以不断地附加到其中。

然后假设对于每个链我们都有一个单独的分区。一旦 OSN 执行了客户端身份验证和交易过滤,它们就可以将属于某个链的传入客户端交易中继到该链的相应分区。然后他们可以使用该分区并取回在所有排序服务节点中通用的有序事务列表。 Kafka 为所有 OSN 提供了一个统一的 single-source-of-truth 事务顺序视图。 一旦消息按照写入的顺序被读回,块就会根据一些预定义的标准被切割(带有一个或多个事务),它被写入排序账本,然后被中继到提交节点以进行交易验证和提交。

此处有更多详细信息:https://docs.google.com/document/d/1vNMaM7XhOlu9tB_10dKnlrhy5d7b1u8lSY8a-kVjCO4

关于 Kafka 如何容错的详细信息: https://kafka.apache.org/documentation/