蜗牛讲-Fabric入门之管道

好音乐相伴,让技术不再孤单

原有的数据保密性是通过对交易中的敏感数据进行哈希操作,因此,就需要每个节点维护所有其他节点上的数据来对敏感数据进行安全保障,即使这些数据是我这个节点一点不关心的,特别是有多个联盟加入的时候。所以在fabric中引入了管道概念。管道的设计目的是为了让交易方在各自独立的管道内进行交易,保障交易的秘密性和私有性。一个管道内的交易对其他管道是不可见的,这样所有在交易中的敏感数据都不需要一个单独的数据库来维护。

Fabric管道的原理类似于订阅者发布者的消息队列,一个管道就像一个topic,每个授权通过的节点都可以订阅这个topic,成为这个管道的一个成员,而之后这个管道内的所有交易都会通知到这个节点,但是对于其他没有订阅这个管道的节点来说,这些交易是不可见的。

在之前的文章中,我们已经知道一比交易需要经过背书签名,排序分发以及验证三个过程。Ordering服务提供了基于消息订阅发布模式的消息格式。每个节点通过一个或是多个管道与ordering服务通信,通信的方式类似于客户端的订阅发布通信系统。经过排序后的交易发布到所有订阅了这个管道的节点上,保证每个节点接收到的交易是一样的,顺序也一致。这些消息在管道内是以块的形式传播。每个节点验证交易块并把交易块提交到账本,之后提供一些服务给应用,方便这些应用使用账本。Ordering服务会根据交易的参数,区分出不同管道的消息,并独立处理,现在的消息还不能跨管道通信。

一个网络中的部分节点可以创建一个管道用于交易,这些节点之间就共享所有发生在这个管道内的所有交易信息,也只有这些节点可以接收这个管道内的交易块。这些交易块对于其他管道的节点来说是完全不可见的。一个未授权订阅这个管道节点无法在这个管道内进行交易。

一个管道上可以有任意多的节点,关键是要节点可到达(可以理解为图论里的“顶点可到达”),也就是要求管道内的所有节点都是“在线”状态(“离线”为长时间不响应或是取消了订阅这个管道)。节点在订阅了一个管道,就维护一个交易账本,如果一个节点参与订阅了两个管道,那这个节点将有两个交易记录或是2本账本,如下图显示:

如上图显示,节点1,2,N订阅了红色管道,这几个节点之间维护了一份红色账本,节点1和N订阅了蓝色管道并维护了一份蓝色账本,注意,节点2由于没有订阅蓝色管道,所有没有蓝色账本。同样的,节点2,N订阅了黑色管道,所有维护了一份黑色账本。可以看到节点1,2,N每个节点都维护了不止一份账本。

看到这里也许有部分读者会有困惑,不是说区块链是去中心化,所有节点共享账本的吗?其实区块链是讲去中心化,但是没有说一定是完全去中心化,也没有说我的账本一定是全局共享的。对于公有链来说,它是一个完全去中心化的,并且对于整个公有链来说只有一条主链,所有的节点都维护一本账本。但是fabric属于联盟链,联盟链是部分去中心化,中心化的程度没有公有链这么高,并且数据是可以根据自己的规则来实现部分节点共享。应用根据自己的业务逻辑来决定一个交易是发送到1个或是多个管道,没有固定的限制。

有些区块链网络如果所有的交易都是公开的,就根本不需要多个管道,比如以太坊,这样,所有的交易对所有的节点可见,每个节点有且仅有一份账本。如果区块链网络中有部分数据具有一定的私有性和保密性,只是针对网络中的部分成员可见的,这种就可以创建一个独立的管道来专门处理这些数据。当然管道只是实现数据隔离访问的一种方法,对于只有一份账本来说,想要实现数据访问的隔离性也可以用非对称加密算法。

注意,ordering服务接收整个区块链网络中的所有管道交易,所以数据的保密性只是针对节点,而不是针对ordering服务。这种设计适合于业务要求数据对ordering服务可见这种情况,也就是说ordering服务对于整个区块链网络是可信的。另一方面,如果有数据需要对ordering服务不可见,就需要使用其他技术来隔离敏感数据,例如加密敏感数据或是再搭建一个ordering服务。

蜗牛讲技术,满满的都是干货,你值得关注。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180417G1UCHZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券