区块链技术在苏宁商品溯源中的应用

区块链的介绍和商品溯源的应用场景

区块链简介

区块链是一种创建信任的技术机制,通过区块链可以跨机构执行可信的交易。

区块链包括三个基本概念:

交易:一次对账本的操作,导致账本状态的一次改变,如添加一条转账记录;

区块:记录一段时间内发生的所有交易和状态结果,是对当前账本状态的一次共识;

链:由区块按照发生顺序串联而成,是整个账本状态变化的日志记录。

账本底层的基本结构是一个线性的链表,这也是其名字“区块链”的来源。链表有一个个“区块”串联组成,后续区块记录前导区块的哈希值。新的数据要加入,必须放到一个新的区块中。而这个块是否合法,可以通过计算哈希值的方式快速检验出来。

商品溯源业务结合

作为零售行业的领导者,苏宁致力于不断为顾客提供更好的购物体验。区块链技术为商品深度溯源提供了一种解决方案,各个节点作为参与方接入联盟链,可以方便的上传自己的信息和获取其他节点信息。联盟内的成员可以方便的获取商品的状态和流向,共同为商品的信息做背书。作为消费者,可以获取更多所购买商品的流转信息,借以判断商品的质量和真伪(比如生鲜食品是否过期;销售终端是否为联盟授权的节点)。

区块链技术在苏宁商品溯源中的应用

超级账本项目的体系结构

Fabric调用逻辑

超级账本(Hyperledger)是Linux基金会旗下的区块链开发平台项目,致力于发展跨行业的商用区块链平台技术。超级账本项目中提出和实现了许多创新的设计和理念,包括完备的权限和审查管理,细粒度隐私保护,以及可拔插,可扩展的实现架构。

Fabric作为超级账本的顶级项目,创新地引入权限管理支持,设计上支持可插拔,可扩展,是首个面向联盟链场景的开源项目。

Fabric网络中存在以下4中不同种类的服务节点,彼此协作完成整个区块链系统的功能。

背书节点(Endorser):负责对交易的提案(proposal)进行检查和背书,计算交易执行结果;

确认节点(Committer):负责在接受交易结果前再次进行检查合法性,接受合法交易对账本的修改,并写入区块链解构;

排序节点(Orderer):对所有发往网络中的交易进行排序,将排序后的交易按照配置中的约定整理为区块,之后提交给确认节点进行处理;

证书节点(CA):负责对网络中所有的证书进行管理,提供标准的PKI服务。

客户端(Client):客户端应用使用SDK来跟Fabric网络打交道。客户端是用户和应用跟区块链网络打交道的桥梁。客户端主要包括两大职能:

·操作Fabric网络:包括更新网络配置、启停节点等;

·操作运行在网络中的链码:包括安装、实例化、发起交易调用链码等。

区块链技术在苏宁商品溯源中的应用

共识来自于分布式系统领域,在fabric中,共识过程意味着多个peer节点对于某一批交易的发送顺、合法性以及它们对账本状态的更新结果达成一致的观点。Fabric中共识包括背书,排序和验证三个环节的保障。

1、背书过程

背书(endorsement)是指背书节点对收到的来自客户端的请求(交易提案)按照自身的逻辑进行检查,以决策是否予以支持的过程。通常情况下,背书过程意味着背书节点对请求提案和造成的状态变更(读写集)添加数字签名。对于调用某个链码的交易来讲,它需要获得一定条件的背书才被认为合法。例如必须是来自某些特定身份成员的一致同意;或者某个组织中超过一定数目的部分成员的支持;或者指定的某个成员个体的支持。这些规则由链码的背书策略来指定。背书策略内容是比较灵活的,可以使用多种规则自由组合,并在链码进行实例化(instantiate)的时候指定。

2、排序服务

排序服务(orderingservice)通常是由排序节点组成的集群来提供。排序,意味着对一段时间内的一批交易达成一个网络内全局一致的顺序。目前,排序服务采用了可拔插的架构,除了用于测试的solo模式,后端还可以接入包括Kafka在内的CFT类型后端,或者支持第三方实现的BFT类型后端。排序服务除了负责达成一致顺序外,并不执行其他操作,这就避免了它成为整个网络的处理瓶颈。同时,排序服务节点很容易进行横向横向扩展,以提高整个网络的吞吐率。

3、验证过程

验证(validation)是对排序后的一批交易进行提交到账本之前最终检查的过程。验证过程包括检查交易结构自身完整性,交易所带背书签名是否满足预设的背书策略,并且交易的读写集是否满足多版本并发控制(Multi-VersionConcurrencyControl,MVCC)的相关要求等。交易在验证环节如果进行了状态写操作,则对应读集合中所有状态的当前版本必须要跟执行背书时一致。否则该交易会被标记为不合法(invalid),对应交易不会被执行,也不影响世界状态。

超级账本Fabric的系统结构

整体架构图

区块链技术在苏宁商品溯源中的应用

Fabric为应用提供了gRPCAPI,以及封装API的SDK供应用调用。应用可以通过SDK访问Fabric网络中的多种资源,包括账本、交易、链码、事件、权限管理等。应用开发者只需要跟这些资源打交道即可,无需关心如何实现。其中,账本是最核心的结构,负责记录应用信息,应用则通过发起交易来向账本中记录数据。交易执行的逻辑通过链码来承载。整个网络运行中发生的事件可以被应用访问,以触发外部流程甚至其他系统。权限管理则负责整个过程中的访问控制。

账本和交易进一步地依赖核心的区块链结构、数据库、共识机制等技术;链码则依赖容器、状态机等技术;权限管理利用了已有的PKI体系、数字证书、加解密算法等诸多安全技术。

底层由多个节点组成P2P网络,通过gRPC通道进行交互,利用Gossip协议进行同步。

链码(chaincode)

目前超级账本Fabric项目中提供了用户链码和系统链码。前者运行在单独的容器中,提供对上层应用的支持,后者则嵌入在系统内,提供对系统进行配置、管理的支持。

通道(channel)

通道与绑定到该通道上的配置和数据(包括交易、账本、链码实例、实例、成员身份等),一起构成了一条完整的区块链(Chain)。这些数据只会被加入到通道内的组织成员所感知和访问到,通道外的成员无法访问到通道内数据。由于通道与链结构是一一对应的,有时候两者概念可以混用。

目前,通道包括应用通道(ApplicationChannel)和系统通道(SystemChannel)两种类型,前者供用户应用使用,负责承载各种交易;后者则负责对应用通道进行管理。

Gossip协议

在Fabric网络中,节点会定期地利用Gossip协议发送它看到的账本的最新数据,并对发送消息进行签名认证。通过使用该协议,主要实现如下功能:

·通道内成员的探测:新加入通道的节点可以获知其他节点的信息,并发送Alive信息宣布在线;离线节点经过一段时间后可以被其他节点感知。

·节点之间同步数据:多个节点之间彼此同步数据,保持一致性。另外,Leader节点从Orderer拉取区块数据后,也可以通过Gossip传播给通道内其他节点。

gRPC消息协议

Fabric中大量采用了gRPC消息在不同组件之间进行通信交互,主要包括如下几种情况:客户端访问Peer节点,客户端和Peer访问Orderer节点,链码容器跟Peer节点之间,以及多个Peer节点之间的通信。简单理解,接口之间的调用都是通过gRPC协议。

Fabric账本结构

区块链技术在苏宁商品溯源中的应用

账本包括区块链(blockchain)结构,以及多个数据库结构。

·StateDatabase:状态数据库,由区块链结构中交易执行推演而成,记录最新的世界状态;

·HistoryDatabase:历史数据库,存放各个状态的历史变化记录;

·IndexDatabase:索引数据库,存放索引信息,例如从Hash、编号索引到区块,从ID索引到交易等。

从数据库的角度看,区块链结构记录的是状态变更的历史,状态数据库记录的是变更的最终结果。每一次对账本状态的变更通过交易导致的读写集合来进行表达。因此,发生交易实际上就是对一个读写集合进行接受的过程。

Fabric在苏宁中的应用

联盟接入方式

苏宁作为联盟链的发起方,负责联盟链的基础服务的搭建。其他参与方,根据自身情况,可以自主选择接入联盟链的方式:

1)通过API平台和苏宁系统交互,由苏宁节点负责入链;

2)通过手机APP进行数据的上传,后台由苏宁节点负责入链;

3)通过苏宁商品溯源门户网站,注册为供应商,进行溯源操作;

4)独立部署节点,申请加入联盟,通过自身几点进行入链;

5)租用苏宁的baas平台,申请加入联盟,通过自身几点进行入链。

业务系统架构

系统架构如下(其中baas平台还在搭建中):

区块链技术在苏宁商品溯源中的应用

目前整体的应用架构如下:

区块链技术在苏宁商品溯源中的应用

实践中优化点

Fabric实现中的优化处理:

1、针对fabric-sdk进行封装,并开发图形界面,进行可视化操作

2、通过集群化部署水平扩展和并行化处理,提升TPS,提高处理速度

3、针对docker容器进行数据映射,保证重启后,数据无影响

4、K8进行容器的自动化部署

5、权限的进一步完善,根据业务场景定制角色权限

关注区块八点半(ID:qukuaibadianban),每天收获一个币呢!


分享到:


相關文章: