在公证人中使用性能的推荐方法是什么?
What is the recommended method for utilizing performance in notaries?
在 Corda 2.0.0 中,假设我有一些虚拟机用作公证人,并且每个虚拟机都有相同的规格。
据我研究,我有两个选择:
- 将每个 VM 用作独立的公证人。
- 将每个 VM 加入公证集群。
在 Cora 中使用公证性能的推荐方法是什么?
以及,对于之后可能出现的一些问题。
[如果是独立公证人]:
- 如何将txn处理平均分配给每个公证人?据我所知,
serviceHub.networkMapCache.notaryIdentities
将根据法定名称 (doc) 获得公证人名单,但我不知道哪个公证人拥有最多的资源。
[如果是公证集群]:
- 您推荐哪种共识算法来利用公证性能? (Raft/BFT 聪明)
一般来说,独立公证人的表现优于公证集群。为什么?拥有集群的目的是提供容错能力,这涉及将每个事务提交复制到集群的所有(或大多数)成员。
例如,在 Raft 的情况下,所有客户端请求都由领导节点提供服务,并复制到跟随者。然而,领导者不能提交请求并向客户端发送回响应,直到它知道大多数追随者已经确认它。与独立公证人的单次往返相比,在集群场景中单个事务提交将需要多次通信往返。
现在,回到您的问题,您的第一个选择将导致三个没有容错的公证服务,第二个将导致单个复制的公证服务。就纯性能而言,三个独立公证人的合并交易吞吐量可能是单个复制公证人的三倍以上。
但是,单个交易只能包含分配给单个公证人的状态。如果你想建立一个交易状态分配给不同的公证人,你必须首先将它们重新分配给同一个公证人。这涉及创建一个额外的 "notary change" 事务,它实际上只是更改状态的公证指针(更准确地说,它使用状态,并使用新的公证指针创建一个副本)。
抛开容错性不谈,如果存在三个相当孤立的参与方组,这些参与方主要在彼此之间进行交易,并且每个组都被分配了不同的公证人,则三个公证人的方案效果最佳。然后可以并行处理来自不同组的事务。但是,cross-group 个事务会产生需要额外 "notary change" 个事务的额外成本,这会降低性能优势。理论上,如果 inter-group 笔交易与 intra-group 笔交易一样频繁,那么拥有一个或三个公证服务之间的性能差异将是最小的。
至于交易处理分配,由于上述原因,不希望也不建议单个 CorDapp 使用多个公证人。对于公证集群,来自客户端的请求以循环方式分发给副本(取决于共识算法,副本仍可能将所有请求转发给领导者!)。
Crash fault-tolerant 共识算法(Raft、Paxos)几乎总是比拜占庭 fault-tolerant 算法(PBFT/BFT-Smart、HoneyBadgerBFT、Hashgraph)更快,因为它们需要更少的通信步骤。
在 Corda 2.0.0 中,假设我有一些虚拟机用作公证人,并且每个虚拟机都有相同的规格。
据我研究,我有两个选择:
- 将每个 VM 用作独立的公证人。
- 将每个 VM 加入公证集群。
在 Cora 中使用公证性能的推荐方法是什么?
以及,对于之后可能出现的一些问题。
[如果是独立公证人]:
- 如何将txn处理平均分配给每个公证人?据我所知,
serviceHub.networkMapCache.notaryIdentities
将根据法定名称 (doc) 获得公证人名单,但我不知道哪个公证人拥有最多的资源。
[如果是公证集群]:
- 您推荐哪种共识算法来利用公证性能? (Raft/BFT 聪明)
一般来说,独立公证人的表现优于公证集群。为什么?拥有集群的目的是提供容错能力,这涉及将每个事务提交复制到集群的所有(或大多数)成员。
例如,在 Raft 的情况下,所有客户端请求都由领导节点提供服务,并复制到跟随者。然而,领导者不能提交请求并向客户端发送回响应,直到它知道大多数追随者已经确认它。与独立公证人的单次往返相比,在集群场景中单个事务提交将需要多次通信往返。
现在,回到您的问题,您的第一个选择将导致三个没有容错的公证服务,第二个将导致单个复制的公证服务。就纯性能而言,三个独立公证人的合并交易吞吐量可能是单个复制公证人的三倍以上。
但是,单个交易只能包含分配给单个公证人的状态。如果你想建立一个交易状态分配给不同的公证人,你必须首先将它们重新分配给同一个公证人。这涉及创建一个额外的 "notary change" 事务,它实际上只是更改状态的公证指针(更准确地说,它使用状态,并使用新的公证指针创建一个副本)。
抛开容错性不谈,如果存在三个相当孤立的参与方组,这些参与方主要在彼此之间进行交易,并且每个组都被分配了不同的公证人,则三个公证人的方案效果最佳。然后可以并行处理来自不同组的事务。但是,cross-group 个事务会产生需要额外 "notary change" 个事务的额外成本,这会降低性能优势。理论上,如果 inter-group 笔交易与 intra-group 笔交易一样频繁,那么拥有一个或三个公证服务之间的性能差异将是最小的。
至于交易处理分配,由于上述原因,不希望也不建议单个 CorDapp 使用多个公证人。对于公证集群,来自客户端的请求以循环方式分发给副本(取决于共识算法,副本仍可能将所有请求转发给领导者!)。
Crash fault-tolerant 共识算法(Raft、Paxos)几乎总是比拜占庭 fault-tolerant 算法(PBFT/BFT-Smart、HoneyBadgerBFT、Hashgraph)更快,因为它们需要更少的通信步骤。