Fabric区块链网络

翻译自fabric官方文档:

https://hyperledger-fabric.readthedocs.io/en/release-1.3/network/network.html

Fabric区块链网络

本主题将在概念层面描述Hyperledger Fabric如何允许组织在区块链网络的形成中进行协作。如果您是架构师,管理员或开发人员,则可以使用此主题深入了解Hyperledger Fabric区块链网络中的主要结构和流程组件。本主题将使用一个可管理的工作示例,该示例介绍了区块链网络中的所有主要组件。了解此示例后,您可以在文档的其他位置阅读有关这些组件的更多详细信息,或尝试构建示例网络

阅读本主题并了解策略的概念后,您将充分了解组织需要制定策略控制已部署的Hyperledger Fabric网络。您还将了解组织如何使用声明性策略管理网络演变 - 这是Hyperledger Fabric的一个关键特性。简而言之,您将了解Hyperledger Fabric的主要技术组件以及组织需要做出的决策。

什么是区块链网络?

区块链网络是一种技术基础设施,为应用程序提供账本和智能合约(链码)服务。首先,智能合约用于生成交易,这些交易随后被分配到网络中的每个节点,在那里它们不可变地记录在其账本的副本上。应用程序的用户可能是使用客户端应用程序或区块链网络管理员的最终用户。

在大多数情况下,多个组织作为一个联盟组成网络,其权限是最初配置网络时由联盟商定的一组策略。此外,网络策略可能会随着时间的推移而变化,但需要得到联盟内组织的同意,因为我们会在讨论修改的概念时发现。

样本网络

在我们开始之前,让我们向您展示我们的目标网络!这是一个表示我们的示例网络的最终状态的图表。

不要担心这可能看起来很复杂!在讨论这个主题时,我们将逐个构建网络,以便您了解组织(organizationsR1R2R3R4如何为网络提供基础架构以帮助形成网络。该基础架构实现了区块链网络,它由组成网络的组织共同商定的策略所管理 - 例如,谁可以添加新组织。您将了解应用程序如何使用区块链网络提供的账本和智能合约服务。

四个组织,R1R2R3R4共同决定并签署协议,他们将建立和使用Hyperledger Fabric网络。R4已被指定为网络发起者 - 它已被赋予设置网络初始版本的权力。R4无意在网络上执行业务交易。R1R2需要在整个网络内进行专用通信,R2R3也是如此。组织R1具有可以在通道(channelC1内执行业务交易(business transantions)的客户端应用程序。组织R2有一个客户端应用程序,可以在通道C1C2中执行类似的工作。组织R3有一个客户端应用程序,可以在C2通道上执行此操作。节点P1维护与C1相关联的账本L1的副本。节点P2维护与C1相关联的账本L1的副本和与C2相关联的账本L2的副本。节点P3维护与C2相关联的账本L2的副本。网络根据网络配置(network configuration)NC4中指定的策略规则进行管理,网络由组织R1R4控制。通道C1根据通道配置(channel configuration)CC1中规定的策略规则进行管理通道在组织R1R2的控制之下。通道C2根据通道配置CC2中规定的策略规则进行管理该通道受组织R2R3的控制。有一个排序服务(ordering serviceO4作为(network)N的网络管理点,并使用系统通道。排序服务还支持应用程序通道C1C2,为了将交易排序分配到块中以进行分发。四个组织中的每一个都有一个首选证书颁发机构。

创建网络

让我们从一开始就为网络创建基础:

在排序节点(orderer)启动时形成网络。在我们的示例网络N中,根据网络配置NC4配置包括单个节点O4的排序服务,网络配置NC4给予组织R4管理权限。在网络级别,证书颁发机构(certificate authorityCA4用于将身份分配给R4组织的管理员和网络节点。

我们可以看到,定义网络N的第一件事是排序服务O4。将排序服务视为网络的初始管理点是有帮助的。如前所述,O4最初由组织R4中的管理员配置并启动,并在R4中托管。配置NC4包含描述网络的起始管理功能集的策略。最初设置为仅通过网络授予R4权限。这将改变,我们稍后会看到,但现在R4是网络的唯一成员。

证书颁发机构

您还可以看到证书颁发机构CA4,它用于向管理员和网络节点颁发证书。CA4在我们的网络中起着关键作用,因为它分配了X.509证书,可用于识别属于组织R4的组件。CA颁发的证书也可用于签署交易,以表明组织认可交易结果 - 这是将其接受到账本的前提条件。让我们更详细地研究一下CA的这两个方面。

首先,区块链网络的不同组件使用证书将彼此标识为来自特定组织。这就是为什么通常有多个CA支持区块链网络的原因 - 不同的组织通常使用不同的CA. 我们将在我们的网络中使用四个CA. 每个组织之一。实际上,CA非常重要,Hyperledger Fabric为您提供了一个内置的(称为Fabric-CA)来帮助您开始使用,但在实践中,组织将选择使用自己的CA.

证书到成员组织的映射是通过称成员服务提供者(MSP的结构实现的 网络配置NC4使用命名的MSP来识别由CA4分配的证书的属性,该证书将证书持有者与组织R4相关联。然后,NC4可以在策略中使用此MSP名称,以通过网络资源授予R4特定权限的参与者。此类策略的一个示例是识别R4中可以将新成员组织添加到网络的管理员。我们没有在这些图表上显示MSP,因为它们会使它们混乱,但它们非常重要。

其次,我们稍后会看到CA颁发的证书如何成为 transaction交易(交易)生成和验证过程的核心。具体而言,X.509证书用于客户端应用程序 交易提议和智能合约 交易响应以对数据签名交易进行数字签名 。随后,托管账本副本的网络节点在接受到账本上的交易之前验证交易签名是否有效。

让我们回顾一下我们的区块链网络示例的基本结构。存在由证书颁发机构CA4定义的一组用户访问的资源,网络N,其具有对网络N中的资源的一组权限,如网络配置NC4内包含的策略所描述的。当我们配置和启动排序服务节点O4时,所有这一切都成为现实。

添加网络管理员

NC4最初配置为仅允许R4用户通过网络管理权限。在下一阶段,我们将允许组织R1用户管理网络。让我们看看网络是如何演变的:

组织R4更新网络配置,使组织R1也成为管理员。在此之后,R1R4对网络配置具有相同的权限。

我们看到增加了一个新的组织R1作为管理员 - R1R4现在拥有对网络的平等权利。我们还可以看到已添加证书颁发机构CA1 - 它可用于标识R1组织中的用户。在此之后,R1R4的用户都可以管理网络。

虽然排序节点O4正在R4的基础设施上运行,但只要它可以获得网络访问权限,R1就可以共享对它的管理权限。这意味着R1R4可以更新网络配置NC4,以允许R2组织成为网络操作的子集。这样,即使R4运行排序服务,并且R1对其具有完全管理权限,R2也有限制创建新的联盟(consortium)。

在最简单的形式中,排序服务是网络中的单个节点,这是您在示例中可以看到的。排序服务通常是多节点的,可以配置为在不同的组织中具有不同的节点。例如,我们可能在R4中运行O4并将其连接到组织R1中的单独排序节点节点O2。通过这种方式,我们将拥有一个多站点,多组织的管理结构。

我们将在本主题稍后讨论排序服务,但现在只需将排序服务视为一个管理点,它为不同的组织提供对网络的受控访问。

定义一个联盟(consortium

虽然现在可以通过R1R4管理网络,但是可以做的很少。我们需要做的第一件事是定义一个联盟。这个词的字面意思是具有共同命运的群体,因此它是区块链网络中一组组织的合适选择。

让我们看看如何定义一个联盟:

网络管理员定义了一个包含两个成员的联盟X1,包含组织R1R2。该联盟定义存储在网络配置NC4中,并将在网络开发的下一阶段使用。CA1CA2是这些组织的相应证书颁发机构。

由于NC4的配置方式,只有R1R4可以创建新的联盟。该图显示了新的联盟X1的增加,该联盟将R1R2定义为其组成组织。我们还可以看到已添加CA2以识别R2中的用户。请注意,联盟可以拥有任意数量的组织成员 - 我们仅仅展示了两个,因为它是最简单的配置。

联盟为何如此重要?我们可以看到,一个联盟定义了网络中需要相互交易的组织集合- 在本例中为R1R2。如果他们有一个共同的目标,将他们按群组织在一起真的很有意义,这正是发生的事情。

该网络虽然由一个组织启动,但现在由更多的组织控制。我们可以通过这种方式启动它,R1R2R4具有共享控制,但这种构建使其更容易理解。

我们现在将使用联盟X1来创建Hyperledger Fabric区块链的一个非常重要的部分一个通道(channel)

为联盟创建通道

因此,让我们创建Fabric区块链网络的关键部分通道。通道是一个主要的通信装置(communications mechanism),通过该通信装置,联盟的成员可以相互通信。网络中可以有多个通道,但就目前而言,我们将从一个通道开始。

让我们看看第一个通道是如何添加到网络的:

已使用联盟X1R1R2创建了通道C1。通道由通道配置CC1控制,完全独立于网络配置。CC1R1R2管理,他们对C1拥有相同的权利。R4CC1没有任何权利。

通道C1为联盟X1提供专用通信装置。我们可以看到通道C1已连接到排序服务O4,但没有其他任何附加到它。在网络开发的下一个阶段,我们将连接客户端应用程序和节点等组件。但此时,通道提供了进一步连接的可能性。

尽管通道C1是网络N的一部分,但它非常不同。另请注意,组织R3R4不在此通道中 - 它用于R1R2之间的交易处理。在上一步中,我们看到R4如何授予R1创建新联盟的许可,R4 允许R1创建通道!在该图中,可能是组织R1R4创建了通道C1。再次注意,一个通道可以连接任意数量的组织 - 我们已经展示了两个,因为它是最简单的配置。

另外,通道C1如何与网络配置NC4具有完全独立的配置CC1CC1包含管理R1R2对通道C1的权限的策略 - 正如我们所见,R3R4在此通道中没有权限。如果R3R4通过R1R2添加到通道配置CC1中的适当策略,则它们只能与C1交互。一个例子是定义谁可以向通道添加新组织。具体来说,请注意R4不能将自身添加到通道C1 - 它必须且只能由R1R2授权。

通道为何如此重要?通道很有用,因为它们为联盟成员之间的私人通信和私人数据提供了一种机制。通道提供了私密性,隔绝其他通道和其他网络。Hyperledger Fabric在这方面非常强大,因为它允许组织共享基础架构并同时保持其私密性。这里没有矛盾 - 网络中的不同联盟将需要适当地共享不同的信息和流程,并且通道提供了一种有效的机制来实现这一点。通道提供有效的基础设施共享,同时保持数据和通信隐私。

我们还可以看到,一旦创建了一个通道,它就是一个非常真实的免于网络的意义。只有在通道配置中明确指定的组织才能对其进行任何控制,从此时间到将来。同样,从此时起对网络配置NC4的任何更新都不会对通道配置CC1产生直接影响例如,如果联盟定义X1被更改,它将不会影响通道C1的成员。因此,通道是有用的,因为它们允许构成通道的组织之间的私人通信。此外,通道中的数据与网络的其余部分完全隔离,包括其他通道。

另外,还有一个特殊的系统通道(system channel 定义供排序服务使用。它的行为方式与常规通道完全相同,常规通道通常称为应用通道(application channels。我们通常不需要担心这个通道,但我们将在本主题的后面部分讨论它。

节点和账本

现在让我们开始使用该通道将区块链网络和组织组件连接在一起。在网络发展的下一阶段,我们可以看到我们的网络N刚刚获得了两个新组件,即节点P1和账本实例L1

节点P1已加入通道C1P1物理托管账本L1的副本。P1O4可以使用通道C1相互通信。

节点是托管区块链账本副本的网络组件!最后,我们开始看到一些可识别的区块链组件!P1在网络中的目的纯粹是托管账本L1的副本供其他人访问。我们可以将L1视为物理托管P1上,但 逻辑上托管C1通道上。当我们向通道添加更多节点时,我们会更清楚地看到这个想法。

P1配置的关键部分是CA1发布的X.509身份,它将P1与组织R1相关联。P1启动后,可以使用排序节点O4 加入通道C1。当O4收到此加入请求时,它使用通道配置CC1来确定P1在此通道上的权限。例如,CC1确定P1是否可以读取和/或写入账本L1的信息。

请注意节点如何通过拥有它们的组织加入通道,尽管我们只添加了一个节点,但我们将看到网络中多个通道上可以有多个节点。我们将看到节点可以在稍后采取的不同角色。

应用程序和智能合约链码

现在通道C1上有一个账本,我们可以开始连接客户端应用程序,以消耗账本的主力提供的一些服务!

注意网络是如何增长的:

智能合约S5已经安装到P1上。组织R1中的客户端应用程序A1可以使用S5通过节点P1访问账本。A1P1O4都连接到通道C1,即它们都可以利用该通道提供的通信设施。

在网络开发的下一个阶段,我们可以看到客户端应用程序A1可以使用通道C1连接到特定的网络资源 - 在这种情况下,A1可以连接到节点P1和排序节点节点O4。再次,看看通道如何是网络和组织组件之间通信的核心。就像节点和排序节点一样,客户端应用程序将具有将其与组织相关联的标识。在我们的示例中,客户端应用程序A1与组织R1相关联虽然它在Fabric区块链网络之外,但它通过通道C1连接到它。

现在可能看起来A1可以直接通过P1访问账本L1,但事实上,所有访问都是通过一个称为智能合约链码S5的特殊程序来管理的。将S5视为定义账本的所有常见访问模式; S5提供了一组明确定义的方法,通过这些方式可以查询或更新账本L1。简而言之,客户端应用程序A1必须通过智能合约S5才能到达账本L1

每个组织中的应用程序开发人员都可以创建智能合约链码,以实现联盟成员共享的业务流程。智能合约用于帮助生成可以随后分发到网络中的每个节点的交易。我们稍后会讨论这个想法当网络更大时,它会更容易理解。目前,要理解的重要一点是,要达到这一点,必须在智能合约上执行两项操作它必须已安装,然后实例化。(安装是在节点进行安装,实例化相当于链码连网共享)

安装智能合约

在开发智能合约S5之后,组织R1中的管理员必安装到节点P1上。这是一个简单的操作在它发生之后,P1完全了解S5。具体来说,P1可以看到S5 实现逻辑 - 它用于访问账本L1的程序代码。我们将其与 仅仅描述S5 的输入和输出的S5 接口进行对比,而不考虑其实现。

当一个组织在一个通道中有多个节点时,它可以选择安装智能合约的节点它不需要在每个节点上安装智能合约。

实例化智能合约

但是,仅仅因为P1安装了S5,连接到通道C1的其他组件都没有意识到它它必须首先在通道C1 实例化。在我们的示例中,只有一个节点P1,组织R1中的管理员必须使用P1在通道C1上实例化S5。实例化后,通道C1上的每个组件都知道S5的存在在我们的示例中,这意味着现在可以由客户端应用程序A1 调用 S5 

请注意,虽然通道上的每个组件现在都可以访问S5,但它们无法看到其程序逻辑。对于已安装它的节点,这仍然是私有的在我们的例子中,这意味着P1。从概念上讲,这意味着它是实例化的智能合约接口,与安装的智能合约实现形成对比。强化这个想法安装智能合约显示了我们如何看待它在物理上托管 在节点上,而实例化智能合约则显示我们如何将其视为 由通道逻辑托管

背书策略(Endorsement policy

在实例化中提供的最重要的附加信息是背书策略。它描述了哪些组织必须批准交易才能被其他组织接受其账本副本。在我们的示例网络中,如果R1R2认可交易,则只能在交易总账L1上接受交易。

实例化行为将认可网络策略置于通道配置CC1它使通道的任何成员都可以访问它。

调用智能合约

一旦智能合约安装在节点上并在通道上实例化,它就可以由客户端应用程序调用。客户端应用程序通过将交易提议发送给智能合约背书策略指定的组织所拥有的节点来完成此操作。交易提议(transaction proposal)用作智能合约的输入,智能合约使用它来生成由节点返回给客户端应用程序的认可交易响应(transaction response)。

这些交易响应与交易提议一起打包,形成完全认可的交易,可以分发到整个网络。我们稍后会详细介绍这一点。现在,它足以理解应用程序如何调用智能合约来生成认可的交易。

在网络发展的这个阶段,我们可以看到组织R1完全参与网络。它的应用程序 - A1开始 - 可以通过智能合约S5访问账本L1,以生成将由R1认可的交易,因为它们符合背书策略,所以被接纳到账本上。

网络完成了

回想一下,我们的目标是为联盟X1 - 组织R1R2创建一个通道。网络开发的下一阶段是组织R2将其基础架构添加到网络中。

让我们看看网络是如何演变的:

通过组织R2添加基础设施,网络不断发展。具体而言,R2添加了节点P2,其承载账本L1的副本和智能合约链码S5P2也加入了通道C1,应用程序A2也是如此。使用来自CA2的证书识别A2P2。所有这些意味着应用程序A1A2都可以使用节点P1P2C1上调用S5

我们可以看到组织R2在通道C1上添加了节点P2P2还托管账本L1和智能合约S5的副本。我们可以看到R2还添加了客户端应用程序A2,它可以通过通道C1连接到网络。为实现此目的,组织R2中的管理员创建了节点P2并将其加入到通道C1,其方式与R1中的管理员相同。

我们创建了第一个运营网络!在网络发展到这个阶段,我们有一个通道,组织R1R2可以相互完全交易。具体而言,这意味着应用程序A1A2可以使用智能合约S5和通道C1上的账本L1生成交易。

生成和接受交易

与总是托管账本副本的节点相比,我们看到有两种不同类型的节点那些主持智能合约的人和那些没有合同的人。在我们的网络中,每个对等方都托管智能合约的副本,但在较大的网络中,将有更多的节点不承载智能合约的副本。一个节点可以仅运行,如果它被安装在其上的智能合同,但它可以知道通过被连接到通道有关智能合同的接口。

您不应该认为没有安装智能合约的节点在某种程度上是低劣的。具有智能合约的节点具有特殊功能 - 以帮助生成交易。请注意,所有节点都可以验证并随后接受拒绝 对其账本L1副本的交易。但是,只有安装了智能合约的节点才能参与交易认可过程, 这对于生成有效交易至关重要。

我们不需要担心本主题中如何生成,分发和接受交易的确切细节 - 了解我们有一个区块链网络就足够了,组织R1R2可以共享信息和流程作为账本捕获的交易。我们将在其他主题中学习更多有关交易,账本,智能合约的知识。

节点的类型

Hyperledger Fabric中,虽然所有节点都相同,但它们可以承担多种角色,具体取决于网络的配置方式。我们现在对典型的网络拓扑有足够的了解来描述这些角色。

  • Committing peer(验证/提交节点)。通道中的每个节点都是提交节点。它接收生成的交易块,随后在它们作为附加操作提交到节点的账本副本之前进行验证。
  • Endorsing peer背书节点)如果安装了智能合约,那么拥有智能合约的每个节点都可以成为背书节点。但是,要真正成为背书节点,客户端应用程序必须使用节点上的智能合约来生成经过数字签名的交易响应。背书节点这一术语是对这一事实的明确提及。

智能合约的背书策略可识别生成的交易进行数字签名的组织,签名之后才能将其接收到验证节点的账本副本。

这是节点的两种主要类型节点可以采用另外两个角色:

  • Leader peer(领导节点)。当组织在通道中具有多个节点时,领导节点是负责将来自排序节点的交易事务分配给组织中的其他提交节点。节点可以选择参与静态或动态领导选举。

因此,从领导角度考虑两组节点是有帮助的 -具有静态领导者选择的节点和具有动态领导者选择的节点。对于静态集,可以将零个或多个节点配置为领导者。对于动态集,一个节点将被集合选为领导节点。此外,在动态集中,如果领导节点失败,那么剩余的节点将重新选举领导者。

这意味着一个组织可以有一个或多个领导节点连接到排序服务。这有助于提高处理大量交易的大型网络的弹性和可伸缩性。

  • Anchor peer(锚节点)。如果节点需要与另一个组织中的节点通信,则它可以使用该组织的通道配置中定义的一个锚节点 。组织可以为其定义零个或多个锚节点,并且锚节点可以帮助实现许多不同的跨组织通信方案。

请注意,节点(peer)可以同时是提交节点(committer)、背书节点(endorser)、领导节点(Leader peer)和锚节点(Anchor peer)!只有锚等节点是可选的 - 出于实际需要,总会有一个领导节点,并且至少有一个提交节点和一个背书节点。

安装不实例化

以与组织R1类似的方式,组织R2必须将智能合约S5安装到其节点P2上。这是显而易见的 - 如果应用程序A1A2希望在节点P2上使用S5来生成交易,则必须首先安装, 安装才能生成交易。此时,节点P2具有智能合约和账本的物理副本P1一样,它可以在其账本L1的副本上生成和接受交易。

但是,与组织R1相反,组织R2不需要在通道C1上实例化智能合约S5。那是因为S5已经在组织R1的通道上实例化了。实例化只需要发生一次随后加入通道的任何节点都知道智能合约S5可用于该通道。这一事实反映了账本L1和智能合约在节点上确实以物理方式存在的事实,以及通道上的逻辑方式; R2只是将另一个L1S5的物理实例添加到网络中。

在我们的网络中,我们可以看到通道C1连接两个客户端应用程序,两个节点和一个排序服务。由于只有一个通道,因此只有一个逻辑账本与这些组件相互作用。节点P1P2具有相同的账本L1副本。智能合约S5的副本通常使用相同的编程语言相同地实现,但如果不相同,它们必须在语义上等效。

我们可以看到,在网络中谨慎添加节点有助于提高吞吐量、稳定性和弹性。例如,网络中的更多节点将允许更多应用程序连接到它在计划内或计划外中断的情况下,组织中的多个节点将提供额外的弹性。

这一切都意味着可以配置支持各种运营目标的复杂拓扑结构 - 对网络的大小没有理论上的限制。此外,单个组织内的节点有效地发现和相互通信的技术机制gossip protocol P2P的一种协议) - 将容纳大量节点以支持这种拓扑。

仔细使用网络和通道策略甚至可以使大型网络得到良好的治理。组织可以自由地将节点添加到网络,只要它们符合网络同意的策略即可。网络和通道策略在自治和控制之间创造了平衡,这是分散式网络的特征。

简化视觉词汇

我们现在将简化用于表示我们的样本区块链网络的视觉词汇。随着网络规模的扩大,最初用于帮助我们理解通道的线路将变得繁琐。想象一下,如果我们添加另一个对等或客户端应用程序或另一个通道,我们的图表会有多复杂?

这就是我们一分钟要做的事情,所以在我们做之前,让我们简化视觉词汇。这是我们迄今为止开发的网络的简化表示:

该图示出了与网络N中的通道C1有关的事实如下:客户端应用A1A2可以使用通道C1与节点P1P2以及排序节点O4进行通信。节点P1P2可以使用通道C1的通信服务。排序服务O4可以利用通道C1的通信服务。通道配置CC1适用于通道C1

请注意,通过用连接点替换通道线简化了网络图,显示为包含通道编号的蓝色圆圈。没有信息丢失。这种表示更具可扩展性,因为它消除了交叉线。这使我们能够更清楚地代表更大的网络。我们通过关注组件和通道之间的连接点而不是通道本身来实现这种简化。

添加另一个联盟定义

在网络开发的下一阶段,我们介绍组织R3。我们将给组织R2R3一个单独的应用程序通道,允许它们相互进行交易。此应用程序通道将与先前定义的通道完全分离,因此R2R3交易可以对它们保持私有。

让我们回到网络级别并为R2R3定义一个新的联盟X2

组织R1R4的网络管理员添加了一个新的联盟定义X2,其中包括组织R2R3。这将用于为X2定义新通道。

请注意,网络现在定义了两个联盟:X1用于组织R1R2X2用于组织R2R3。引入了Consortium X2,以便能够为R2R3创建新的通道。

新网关只能由网络配置网络策略NC4中明确标识的组织创建,因为它们具有相应的权限,即R1R4。这是一个策略示例,它将可以管理网络级资源的组织与可以在通道级别管理资源的组织分开。在工作中看到这些策略有助于我们理解为什么Hyperledger Fabric具有复杂的分层策略结构。

实际上,联盟定义X2已被添加到网络配置NC4中。我们将在文档的其他地方讨论此操作的确切机制。

添加新通道

现在让我们使用这个新的联盟定义X2来创建一个新的通道C2。为了帮助您加强对更简单的通道符号的理解,我们使用了两种视觉样式 - 通道C1用蓝色圆形端点表示,而通道C2用红色连接线表示:

使用联盟定义X2R2R3创建了新的通道C2。该通道具有与网络配置NC4完全分离的通道配置CC2和通道配置CC1。通道C2R2R3管理,它们具有与CC2中的策略所定义的C2相同的权限。R1R4没有在CC2中定义的任何权限。

通道C2为联盟X2提供专用通信机制。再次注意,在一个联盟中组织起来的组织是如何形成通道的。通道配置CC2现在包含管理通道资源的策略,通过通道C2为组织R2R3分配管理权限。它由R2R3独家管理; R1R4在通道C2中没有电源。例如,随后可以更新通道配置CC2以添加组织以支持网络增长,但这只能通过R2R3来完成。

注意通道配置CC1CC2如何保持彼此完全分离,并且与网络配置NC4完全分离。我们再一次看到Hyperledger Fabric网络的分散性一旦创建了通道C2,它就由组织R2R3独立管理到其他网络元素。通道网络策略始终保持彼此独立,并且只能由获得授权的组织在通道中进行更改。

随着网络和通道的发展,网络和通道配置也将如此发展。有一个过程可以通过这种方式以受控方式完成 - 包括捕获这些配置变化的配置交易。每次配置更改都会导致生成新的配置块交易,稍后在本主题中,我们将看到如何验证和接受这些块以分别创建更新的网络和通道配置。

网络和通道配置

在整个示例网络中,我们看到了网络和通道配置的重要性。这些配置很重要,因为它们封装了网络成员同意的 策略,这些策略为控制对网络资源的访问提供了共享参考。网络和通道配置还包含有关网络和通道组成的事实,例如联盟的名称及其组织。

例如,当首先使用排序服务节点O4形成网络时,其行为由网络配置NC4控制。NC4的初始配置仅包含允许组织R4管理网络资源的策略。随后更新NC4以允许R1管理网络资源。完成此更改后,组织R1R4中连接到O4的任何管理员都将拥有网络管理权限,因为这是网络配置NC4中允许的策略。在内部,排序服务中的每个节点都记录网络配置中的每个通道,以便在网络级别创建每个通道的记录。

这意味着虽然排序服务节点O4是创建联盟X1X2以及通道C1C2参与者,但是网络的智能地包含在O4正在服从的网络配置NC4中。只要O4表现良好,并且无论何时处理网络资源,都能正确实现NC4中定义的策略,我们的网络就会像所有组织都同意的那样行事。在很多方面,NC4可以被认为比O4更重要,因为它最终控制着网络访问。

相同的原则适用于相对于节点的通道配置。在我们的网络中,P1P2同样是优秀的演员。当节点P1P2与客户端应用程序A1A2交互时,它们每个都使用在通道配置CC1内定义的策略来控制对通道C1资源的访问。

例如,如果A1想要在节点P1P2上访问智能合约链码S5,则每个节点使用其CC1的副本来确定A1可以执行的操作。例如,可以允许A1根据CC1中定义的策略从账本L1读取或写入数据。稍后我们将看到通道中的演员及其通道配置CC2的相同模式。同样,我们可以看到,虽然节点和应用程序是网络中的关键角色,但它们在通道中的行为更多地取决于通道配置策略而不是任何其他因素。

最后,了解网络和通道配置的物理实现方式很有帮助。我们可以看到网络和通道配置在逻辑上是单一的 - 网络有一个,每个通道有一个。这个很重要访问网络或通道的每个组件必须对授予不同组织的权限有共同的了解。

即使逻辑上只有一个配置,它实际上也会被形成网络或通道的每个节点复制并保持一致。例如,在我们的网络中,节点P1P2都具有通道配置CC1的副本,并且到网络完全完成时,节点P2P3都将具有通道配置CC2的副本。类似地,排序服务节点O4具有网络配置的副本,但是在多节点配置中,每个排序服务节点将具有其自己的网络配置副本。

网络和通道配置使用与用户交易相同的区块链技术保持一致 - 但对于 配置交易。要更改网络或客户端配置,管理员必须提交配置交易以更改网络或通道配置。它必须由相应策略中指定的组织签署,以负责配置更改。此策略称为mod_policy稍后我们将对其进行讨论

实际上,排序服务节点运行一个迷你区块链,通过我们前面提到的系统通道连接 。使用系统通道排序服务节点分配网络配置交易。这些交易用于在每个排序服务节点处协作地维护网络配置的一致副本。以类似的方式,应用程序通道中的节点 可以分发通道配置交易。同样,这些交易用于维护每个节点处的通道配置的一致副本。

通过物理分布在逻辑上是单数的对象之间的这种平衡是Hyperledger Fabric中的常见模式。例如,逻辑单一的网络配置之类的对象在一组排序服务节点之间被物理地复制。我们也看到了它与通道配置,账本,以及在某种程度上智能合约,这些合同安装在多个地方,但其接口在逻辑上存在于通道层面。这是您在Hyperledger Fabric中反复出现的模式,并使Hyperledger Fabric既可以分散,又可以同时进行管理。

添加另一个节点

现在组织R3能够完全参与C2通道,让我们将其基础设施组件添加到通道。我们不是一次只做一个组件,而是一次性添加一个节点,一个账本的本地副本,一个智能合约和一个客户端应用程序!

让我们看看添加了组织R3组件的网络:

 

该图示出了与网络N中的通道C1C2有关的事实如下:客户端应用A1A2可以使用通道C1与节点P1P2进行通信,以及排序服务O4; 客户端应用程序A3可以使用通道C2与对等P3和排序服务O4进行通信。排序服务O4可以利用通道C1C2的通信服务。通道配置CC1适用于通道C1CC2适用于通道C2

首先,请注意,由于节点P3连接到通道C2,因此它与使用通道C1的节点具有不同的账本 - L2。账本L2有效地限定为通道C2。账本L1完全分开它的范围是C1通道。这是有意义的-的通道C2的目的是联盟X2的成员之间提供专用的通信,和账本L2为他们的交易的专用存储区。

以类似的方式中,智能合同S6,安装在节点P3,和实例化通道C2,用于提供受控访问总账L2。应用A3现在可以使用的通道C2来调用智能合同S6提供给产生可以接受到网络中的总账L2的每个副本的交易服务。

此时,我们有一个网络,其中定义了两个完全独立的通道。这些通道为组织提供独立管理的设施,以便彼此进行交易。同样,这是工作中的分散化我们在控制和自治之间取得平衡。这是通过适用于受不同组织控制和影响的通道的网络策略来实现的。

将节点加入多个通道

在网络开发的最后阶段,让我们将重点放在组织R2上。我们可以通过将R2连接到多个通道来利用R2是联盟X1X2的成员这一事实:

该图示出了与网络N中的通道C1C2有关的事实如下:客户端应用A1可以使用通道C1与节点P1P2进行通信,以及排序服务O4; 客户端应用程序A2可以使用通道C1与节点P1P2进行通信,并使用通道C2进行与节点P2P3的通信以及排序服务O4; 客户端应用程序A3可以使用通道C2与对等P3和排序服务O4进行通信。排序服务O4可以利用通道C1C2的通信服务。通道配置CC1适用于通道C1CC2适用于通道C2

我们可以看到R2是网络中的一个特殊组织,因为它是唯一一个是两个应用程序通道成员的组织!它能够在通道C1上与组织R1进行交易,同时它还可以在不同的通道C2上与组织R3进行交易。

注意节点P2如何为通道C1安装智能合约S5,为通道C2安装智能合约S6。节点P2同时通过不同的账本的智能合约同时是两个通道的完整成员。

这是一个非常强大的概念 - 通道既提供了组织分离的机制,也提供了组织之间协作的机制。此外,该基础架构由一组独立组织提供并在其之间共享。

同样重要的是要注意,节点P2的行为根据其进行交易的通道而受到非常不同的控制。具体地,包含在通道配置CC1中的策略规定了P2在通道C1中进行交易时可用的操作,而通道配置CC2中的策略控制P2在通道C2中的行为。

同样,这是可取的--R2R1同意通道C1的规则,而R2R3同意通道C2的规则。这些规则在相应的通道网络策略中被捕获 - 它们可以并且必须由通道中的每个组件使用,以按照约定强制执行正确的行为。

同样,我们可以看到客户端应用程序A2现在能够在通道C1C2上进行交易。同样,它也将受适当通道配置中的网络策略支配。另外,请注意客户端应用程序A2和节点P2正在使用混合的可视词汇表 - 包括行和连接。你可以看到它们是等价的它们是视觉同义词。

排序服务

细心的读者可能会注意到排序服务节点似乎是一个集中的组件最初用于创建网络,并连接到网络中的每个通道。即使我们将R1R4添加到控制排序节点的网络配置策略NC4,该节点也在R4的基础架构上运行。在一个去中心化的世界里,这看起来很错误!

别担心!我们的示例网络显示了最简单的排序服务配置,可帮助您了解网络管理点的概念。事实上,排序服务本身也可以完全分散!我们之前提到过,排序服务可能由不同组织拥有的许多单个节点组成,所以让我们看看如何在我们的示例网络中完成。

让我们看看更现实的排序服务节点配置:

多组织排序服务。排序服务包括排序服务节点O1O4O1由组织R1提供,节点O4由组织R4提供。网络配置NC4定义来自组织R1R4的演员的网络资源许可。

我们可以看到这个排序服务完全分散 - 它在组织R1中运行,并在组织R4中运行。网络配置策略NC4允许R1R4对网络资源具有相同的权限。组织R1R4的客户端应用程序和节点可以通过连接到节点O1或节点O4来管理网络资源,因为两个节点的行为方式相同,如网络配置NC4中的策略所定义。在实践中,来自特定组织的参与者倾向于使用其本地组织提供的基础设施,但情况肯定并非总是如此。

分散的交易分配

除了作为网络的管理点之外,排序服务还提供了另一个关键设施 - 它是交易的分配点排序服务是从应用程序收集认可的交易并将它们命令到交易块的组件,交易块随后被分发到通道中的每个节点。在每个提交节点中,记录交易,无论是有效还是无效,并且它们的账本的本地副本被适当地更新。

注意排序服务节点O4如何为通道C1执行与对网络N不同的角色。当在通道级别执行时,O4的作用是收集交易并在通道C1内分配块。它根据通道配置CC1中定义的策略执行此操作。相反,当在网络级别执行时,O4的作用是根据网络配置NC4中定义的策略为网络资源提供管理点。请再次注意这些角色如何分别由通道和网络配置中的不同策略定义。这应该强调了Hyperledger Fabric中基于声明性策略的配置的重要性。网络策略既定义又用于控制联盟中每个成员的商定行为。

我们可以看到,排序服务与Hyperledger Fabric中的其他组件一样,是一个完全分散的组件。无论是充当网络管理点还是作为通道中块的分配器,其节点都可以根据需要在网络中的多个组织中进行分发。

改变网络策略

在我们对样本网络的探索中,我们已经看到了策略控制系统中行为者行为的重要性。我们只讨论了一些可用的策略,但是有很多可以通过声明性定义来控制行为的各个方面。这些单独的策略将在文档的其他地方讨论。

最重要的是,Hyperledger Fabric提供了一个独特的强大策略,允许网络和通道管理员自行管理策略更改!根本的理念是,网络策略变化是一个常数,无论是在组织内部还是组织之间,或者是否由外部监管机构强加。例如,新组织可能加入通道,或者现有组织可能会增加或减少其权限。让我们再研究一下Hyperledger Fabric中如何实现更改策略。

他们理解的关键点是网络策略变化由网络策略内部的网络策略管理。的修改策略,或 mod_policy的简称,是管理变化的网络或通道配置中的第一类的策略。让我们举两个简短的例子,说明我们 已经使用过的mod_policy如何用来管理我们网络的变化!

第一个例子是最初建立网络的时候。此时,只允许组织R4管理网络。实际上,这是通过使R4成为网络配置NC4中定义的唯一具有网络资源权限的组织来实现的。此外,NC4mod_policy仅提到组织R4 - 只允许R4更改此配置。

然后,我们将网络N演进为允许组织R1管理网络。R4通过将R1添加到用于创建通道和联盟创建的策略中来实现此目的。由于这种变化,R1能够定义联盟X1X2,并创建通道C1C2R1对网络配置中的通道和联盟策略具有相同的管理权限。

但是,R4可以通过网络配置为R1提供更多功能!R4可以将R1添加到mod_policy,以便R1也能够管理网络策略的更改。

这第二个功能比第一个功能强大得多,因为现在R1现在可以 完全控制 NC4的网络配置!这意味着R1原则上可以从网络中删除R4的管理权限。在实践中,R4将配置mod_policy,以便R4还需要批准更改,或者mod_policy中的所有组织都必须批准更改。有很多灵活性可以使mod_policy变得复杂,因为它需要支持所需的任何更改过程。

这是mod_policy在工作 - 它允许基本配置的优雅演变为复杂的配置。所有这些都是在所有相关组织的同意下发生的。mod_policy的行为与网络或通道配置中的所有其他策略相似它定义了一组允许更改mod_policy本身的组织。

我们只是在本小节中特别指出了网络策略和mod_policy的力量。在网络策略主题中对它进行了更详细的讨论,但现在让我们回到我们完成的网络!

网络完全形成

让我们用一致的视觉词汇来概括我们的网络。我们使用更紧凑的可视化语法稍微重新组织了它,因为它更适合更大的拓扑:

在此图中,我们看到Fabric区块链网络由两个应用程序通道和一个排序通道组成。组织R1R4负责排序通道,R1R2负责蓝色应用程序通道,而R2R3负责红色应用程序通道。客户端应用程序A1是组织R1的元素,CA1是其证书颁发机构。注意,组织R2的节点P2可以使用蓝色和红色应用程序通道的通信设施。每个应用程序通道都有自己的通道配置,在本例中为CC1CC2。系统通道的通道配置是网络配置NC4的一部分。

我们正在构建Hyperledger Fabric区块链示例网络的概念之旅结束。我们创建了一个四个组织网络,包含两个通道和三个节点,两个智能合约和一个排序服务。它由四个证书颁发机构支持。它为三个客户端应用程序提供账本和智能合约服务,这些应用程序可以通过两个通道与其进行交互。花点时间查看图中网络的详细信息,并随时回顾主题以增强您的知识,或者转到更详细的主题。

网络组件摘要

以下是我们讨论过的网络组件的快速摘要:

网络摘要

在本主题中,我们已经了解了不同的组织如何共享其基础架构以提供集成的Hyperledger Fabric区块链网络。我们已经看到如何将集体基础设施组织成提供独立管理的私人通信机制的通道。我们已经看到客户应用程序,管理员,同事和排序节点等参与者如何通过使用各自证书颁发机构的证书来识别来自不同组织的参与者。反过来,我们已经看到了网络策略对于定义这些组织参与者对网络和通道资源的商定权限的重要性。

 

猜你喜欢

转载自blog.csdn.net/yangwei256/article/details/83119020