Hyperledger Fabric 文档

8.1 架构 - 服务发现

2019-12-05  本文已影响0人  furnace

服务发现 (Service Discovery)

1. 为什么我们需要服务发现?

为了在对端节点 (peer) 上执行链码 (chaincode),将交易提交给交易排序器 (order),并就交易状态进行更新,应用程序 (application) 连接到 SDK 公开的 API。

但是,SDK 需要大量信息,以便允许应用程序连接到相关的网络节点。除了通道上交易排序器和对端节点的 CA 和 TLS 证书及其 IP 地址和端口号之外,它还必须了解相关的背书策略 (endorsement policies) 以及已安装链码的对端节点 (因此应用程序知道发送链码提案给哪些对端节点)。

在 v1.2 之前,此信息是静态编码的。但是,此实现对网络更改 (例如添加已安装相关链码的对端节点或临时脱机的对端节点) 不是动态响应的。静态配置还不允许应用程序对背书策略本身的更改做出反应 (如新组织加入通道时可能发生的情况)。

此外,客户端应用程序无法知道哪些对端节点已更新帐本,哪些未更新。结果,该应用程序可能向其账本数据与网络其余部分不同步的对端节点提交提案,从而导致交易在提交时失效,从而浪费资源。

发现服务 (discovery service) 通过让对端节点动态计算所需信息并将其以可使用的方式呈现给 SDK 来改善此过程。

2. 服务发现在 Fabric 中的工作方式

该应用程序被引导,知道应用程序开发人员/管理员信任的一组对端节点,以提供对发现查询的真实响应。客户端应用程序要使用的一个好的候选对端节点是同一组织中的一个。请注意,为了使发现服务知道对端节点,必须为它们定义 EXTERNAL_ENDPOINT。要查看如何执行此操作,请查看我们的 服务发现 CLI 文档

该应用程序向发现服务发出配置查询,并获取与网络的其余节点进行通信所需的所有静态信息。通过向对端节点的发现服务发送后续查询,可以随时刷新此信息。

该服务在对端节点 (而不是应用程序) 上运行,并使用 gossip 通信层维护的网络元数据信息来找出哪些对端节点处于联机状态。它还从对端节点的状态数据库中获取信息,例如任何相关的背书策略。

通过服务发现,应用程序不再需要指定他们需要认可的对端节点。SDK 可以简单地将查询发送给发现服务,询问给定通道和链码 ID 所需的对端节点。然后,发现服务将计算由两个对象组成的描述符:

  1. 布局 (Layout):对端节点组的列表以及应从每个组中选择的对端节点数量。
  2. 组到对端节点映射 (Group to peer mapping):从布局 (Layout) 中的组到通道的对端节点。实际上,每个组很可能是代表各个组织的同级物,但是由于服务 API 是通用的并且对组织无知,因此这仅仅是一个组 (group)。

以下是对 AND(Org1, Org2) 的策略进行评估得出的描述符的示例,其中每个组织中都有两个对端节点。

Layouts: [
     QuantitiesByGroup: {
       “Org1”: 1,
       “Org2”: 1,
     }
],
EndorsersByGroups: {
  “Org1”: [peer0.org1, peer1.org1],
  “Org2”: [peer0.org2, peer1.org2]
}

换句话说,背书策略要求来自 Org1 中一个对端节点和 Org2 中一个对端节点的签名。它提供了可以背书的组织中可用对端节点的名称 (Org1 和 Org2 中的 peer0 和 peer1)。

然后,SDK 从列表中选择一个随机布局 (layout)。在上面的示例中,背书策略为 Org1 AND Org2。如果是 OR 策略,则 SDK 会随机选择 Org1 或 Org2,因为来自任一 Org 对端节点的签名都将满足该策略。

SDK 选择布局 (layout) 后,它将根据客户端指定的条件从布局的对端节点中进行选择 (SDK 可以执行此操作,因为它可以访问帐本高度等元数据)。例如,根据布局中每个组中对端节点的数量,它可能更喜欢具有更高帐本高度的对端节点 - 或排除应用程序已发现其处于脱机状态的对端节点。如果没有一个基于该标准的对端节点是可取的,那么 SDK 将从最符合该标准的对端节点中随机选择。

2.1 发现服务的功能

发现服务可以响应以下查询:

2.2 特殊要求

当对端节点在启用 TLS 的情况下运行时,客户端在连接到对端节点时必须提供 TLS 证书。如果未将对端节点配置为验证客户端证书 (clientAuthRequired 为 false),则此 TLS 证书可以是自签名的。

Reference

  1. Docs » Architecture Reference » Service Discovery, https://hyperledger-fabric.readthedocs.io/en/release-1.4/discovery-overview.html
  2. Docs » Commands Reference » Service Discovery CLI, https://hyperledger-fabric.readthedocs.io/en/release-1.4/discovery-cli.html

项目源代码

项目源代码会逐步上传到 Github,地址为 https://github.com/windstamp

Contributor

  1. Windstamp, https://github.com/windstamp
上一篇下一篇

猜你喜欢

热点阅读