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

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

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

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

  • 为什么网关很重要
  • 应用程序如何使用网关
  • 如何定义静态网关
  • 如何为服务发现定义动态网关
  • 使用多个网关

1. 场景

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

image

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

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

  • 静态:网关配置在 连接配置文件 中完全定义。应用程序可用的所有对端节点,交易排序器和 CA 在用于配置网关的连接配置文件中静态定义。例如,对于对端节点,这包括其作为支持对端节点或事件通知中心的角色。你可以在 连接配置文件主题 中了解有关这些角色的更多信息。

    SDK 将结合网关 连接选项 使用此静态拓扑来管理交易提交和通知过程。连接配置文件必须包含足够的网络拓扑,以允许网关代表应用程序与网络交互;这包括网络通道,组织,交易排序器,对端节点及其角色。

  • 动态:网关配置在连接配置文件中最少定义。通常,指定应用程序组织中的一个或两个对端节点,他们使用服务发现来发现可用的网络拓扑。这包括对端节点,交易排序器,通道,实例化的智能合约及其背书策略。(在生产环境中,网关配置应至少指定两个对端节点以确保可用性。)

    SDK 将使用所有静态和发现的拓扑信息以及网关连接选项来管理交易提交和通知过程。作为其一部分,它还将智能地使用发现的拓扑。例如,它将使用发现的智能合约背书策略计算所需的最少背书对端节点。

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

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

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

2. 连接

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

await gateway.connect(connectionProfile, connectionOptions);
  • 连接配置文件 (Connection profile):connectionProfile 是将用于 SDK 静态或动态地进行交易处理的网关配置。尽管可以在传递给网关时将其转换为 JSON 对象,但是可以使用 YAML 或 JSON 指定它:
let connectionProfile = yaml.safeLoad(fs.readFileSync('../gateway/paperNet.yaml', 'utf8'));

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

  • 连接选项 (Connection options):connectionOptions 允许应用程序声明而不是实现所需的交易处理行为。 SDK 会解释连接选项,以控制与网络组件的交互模式,例如选择要连接的身份或用于事件通知的对端节点。这些选项可在不影响功能的情况下显着降低应用程序的复杂性。这是可能的,因为 SDK 已实现了许多应用程序否则需要的低层逻辑。连接选项控制此逻辑流。

    阅读有关可用 连接选项 的列表以及何时使用它们的信息。

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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容