Hyperledger Fabric 文档

4.7.9 Hyperledger Fabric - 应用程序开

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

应用程序开发 - 应用程序设计元素 - 网关

网关代表应用程序管理网络交互,使其专注于业务逻辑。应用程序连接到网关,然后使用该网关的配置管理所有后续交互。

在本主题中,我们将介绍:

1. 场景

Hyperledger Fabric 网络通道可以不断变化。由网络中不同组织贡献的对端节点,交易排序器和 CA 组件将会来来往往。造成这种情况的原因包括业务需求增加或减少,以及计划内和计划外的停机。网关减轻了应用程序的负担,使它可以专注于要解决的业务问题。

image

MagnetoCorp 和 DigiBank 应用程序 (发行和购买) 将各自的网络交互委托给其网关。每个网关都了解网络通道拓扑,其中包括两个组织 MagnetoCorp 和 DigiBank 的多个对端节点和交易排序器,使应用程序专注于业务逻辑。对端节点可以使用 gossip 协议在组织内部和组织之间交互。

网关可以由应用程序以两种不同方式使用:

你可能会问自己,静态或动态网关是否更好?需要在可预测性和响应性之间进行权衡。静态网络始终会以相同的方式运行,因为它们将网络视为不变的。从这种意义上讲,它们是可预测的 – 如果可用,它们将始终使用相同的对端节点和交易排序器。当动态网络了解网络的变化时,它们的响应速度更快 – 他们可以使用新添加的对端节点和交易排序器,从而带来额外的弹性和可扩展性,但可能会在可预测性方面付出一定的代价。通常,使用动态网络是可以的,实际上,这是网关的默认模式。

请注意,可以静态或动态使用同一连接配置文件。显然,如果要静态使用配置文件,则它必须是全面的,而动态使用只需要稀疏的人口即可。

两种样式的网关对应用程序都是透明的。无论使用静态网关还是动态网关,应用程序设计都不会改变。这也意味着某些应用程序可以使用服务发现,而其他应用程序则可以不使用。通常,使用动态发现意味着 SDK 的定义更少,更多智能。这是默认值。

2. 连接

当应用程序连接到网关时,将提供两个选项。这些用于后续的 SDK 处理:

await gateway.connect(connectionProfile, connectionOptions);
let connectionProfile = yaml.safeLoad(fs.readFileSync('../gateway/paperNet.yaml', 'utf8'));

阅读有关 连接配置文件 以及如何配置它们的更多信息。

3. 静态

静态网关定义网络的固定视图。在 MagnetoCorp 方案中,网关可能会标识 MagnetoCorp 中的单个对端节点,DigiBank 中的单个对端节点以及 MagentoCorp 交易排序器。或者,网关可以定义 MagnetCorp 和 DigiBank 的所有对端节点和交易排序器。在这两种情况下,网关都必须定义足以使商业票据交易获得背书和分发的网络视图。

通过在 gateway.connect() API 上显式指定连接选项 discovery: {enabled: false},应用程序可以静态使用网关。或者,环境变量设置 FABRIC_SDK_DISCOVERY=false 将始终覆盖应用程序选择。

检查 MagnetoCorp 发行应用程序使用的 连接配置文件。查看如何在此文件中指定所有对端节点,交易排序器甚至 CA,包括它们的角色。

值得牢记的是,静态网关代表某个时刻的网络视图。随着网络的变化,将其反映在网关文件的变化中可能很重要。当应用程序重新加载网关文件时,它们将自动获取这些更改。

4. 动态

动态网关为网络定义了一个小的固定起点。在 MagnetoCorp 方案中,动态网关可能仅识别 MagnetoCorp 中的单个对端节点。一切都会被发现!(为了提供弹性,最好定义两个这样的引导对端节点。)

如果应用程序选择了 服务发现,则网关文件中定义的拓扑将使用此过程生成的拓扑进行扩充。服务发现从网关定义开始,并使用 gossip 协议 在 MagnetoCorp 组织中查找所有连接的对端节点和交易排序器。如果已为通道定义了 锚定对端节点,则服务发现将使用跨组织的 gossip 协议来发现所连接组织中的组件。此过程还将发现在对端节点安装的智能合约及其在通道级别定义的背书策略。与静态网关一样,发现的网络必须足以使商业票据交易得到背书和分发。

动态网关是 Fabric 应用程序的默认设置。可以使用 gateway.connect() API 上的连接选项 discovery: {enabled: true} 明确指定它们。或者,环境变量设置 FABRIC_SDK_DISCOVERY=true 将始终覆盖应用程序选择。

动态网关代表网络的最新视图。随着网络的变化,服务发现将确保网络视图正确反映了应用程序可见的拓扑。应用程序将自动获取这些更改;他们甚至不需要重新加载网关文件。

5. 多个网关

最后,对于应用程序而言,定义相同或不同网络的多个网关非常简单。此外,应用程序可以静态和动态使用命名网关。

拥有多个网关可能会有所帮助。原因如下:

Reference

项目源代码

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

Contributor

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

猜你喜欢

热点阅读