李天翼
(中国铁道科学研究院集团有限公司 电子计算技术研究所,北京 100081)
随着科技水平的快速发展和高速铁路规模的不断扩大,旅客的出行目的、出行方式和服务需求呈现出多样化趋势,传统的销售渠道和客运产品已不能满足旅客对铁路出行服务的要求。铁路需要加强与路内外优质企业的协作互补,推进一站式的出行服务[1],提高出行服务的供给质量。区块链是一种去中心化的分布式账本技术[2],近年来在金融领域和实体经济领域得到广泛应用,其中联盟链是机构与机构之间的区块链网络,拥有更高的应用可扩展性。在铁路客运出行服务系统中引入联盟链技术,有利于建立一个多方参与、公平可信的交易平台,形成更加成熟、层次分明的铁路出行产业链,推动铁路客运出行服务的进一步发展。
近年来,中国国家铁路集团有限公司运用信息化手段与航空、金融、汽车等路内外企业实现对接,在12306 上推出相应客运出行服务,涉及车站服务、车上服务、到达服务等定制化服务。旅客登陆12306 网站购票,可以随票选择铁路乘意险;购票成功后,系统根据乘车信息向旅客推荐送站接车、车上餐饮、酒店住宿等服务;同时,旅客可以在12306 网站上直接选择机票销售、酒店住宿、个人旅游、餐饮特产、商城购物等一系列服务。既有铁路客运出行服务系统逻辑架构图如图1所示。
图1 既有铁路客运出行服务系统逻辑架构图Fig.1 Logical structure of existing railway passenger travel service system
既有铁路客运出行服务系统从架构上可以分为4 层,第一层是客运服务层,主要包括12306 WEB、12306 APP、客服语音等服务渠道;第二层为服务接入层,实现各类服务渠道的接入,包括路内系统与路外系统的接入服务;第三层是业务逻辑层,是出行服务中业务逻辑的具体实现;第四层为数据层,采用关系数据库、NoSQL 数据库、文件系统等多种数据存储方式,保存运营数据、共享数据、交易数据和营销分析数据等。在系统层面,通过服务接口、数据接口的方式,实现同路内外系统互联。但是各系统之间授权机制复杂,数据安全难以保障,导致多主体难以实现互信,从而影响业务规模和用户体验[3],具体问题如下。
(1)数据安全风险高。在既有铁路客运出行服务系统中,业务数据与用户数据以信息流的方式在各系统间传输、处理和存储,存在隐私信息泄露、数据被篡改的风险,参与交易的企业需要采用多种技术手段保证己方的数据安全和交易安全。
(2)信息交换流程长。在空铁联运等场景中,铁路需要获取民航等其他主体的数据才能完成交易,目前采取多级缓存策略完成数据交换,但在售票高峰期可能出现数据更新不及时、不准确的情况,从而导致旅客交易失败,用户体验差。
(3)对账环节低效。在出行服务系统中,各交易企业都是独立记录各自的交易数据,企业之间对账时,往往需要交换数据进行比对,企业间数据的差异易引起对账争议,通常需要人工介入或第三方协调,增加了交易企业的结算时间和人力成本。
目前,既有铁路客运出行服务系统中的问题已制约铁路客运出行服务的系统规模和服务水平,亟需引入新技术构建全新的铁路客运出行服务系统。
区块链技术起源于比特币[4],可在没有信任基础的个体之间就交易的合法性等达成共识,保证交易数据的真实性、安全性、不可篡改、可溯源、多方共享,按参与方式可以分为公有链、私有链、联盟链[5]。其中联盟链是有限开放的网络,它限定了联盟成员的范围,新成员在加入联盟链时,需要经过联盟成员投票决定是否同意加入,具有节点可控、性能高、可能提供更好的隐私保护等优势,目前企业中应用最广的为Fabric 联盟链,其采用模块化的架构设计,支持可插拔组件的开发与使用。
结合既有铁路客运出行服务系统存在的问题,基于联盟链的特点与优势,设计基于联盟区块链的铁路客运出行服务系统,系统由各企业应用、联盟区块链、旅客服务、链下数据和旅客客户端等部分协同完成,基于联盟区块链的铁路客运出行服务系统架构如图2 所示。
图2 基于联盟区块链的铁路客运出行服务系统架构Fig.2 Architecture of railway passenger travel service system based on consortium blockchain
基于联盟区块链的铁路客运出行服务系统架构主要包括基础层、区块链层、服务层与应用层4部分。
(1)基础层。基础层涵盖公路、铁路、民航、保险、银行等各行业实体应用基础设施,包括云环境、专有和公有网络、终端IOT 设备、专用设备等,基础层为构建上层区块链、服务平台以及应用提供坚实的底座。
(2)区块链层。区块链层负责交易的收集、打包成块、合法性验证以及将验证通过的区块上链,区块链层包括基础组件、扩展组件2 部分。基础组件包括能够适用于客运出行服务不同需求的共识机制、用于区块链节点之间通信的P2P 网络、存储出行服务数据的数据存储组件以及用于智能合约执行的智能合约执行引擎。扩展组件包括用于实现链上交通数据隐私安全的隐私保护组件、网络管理组件、适配不同监管要求的可信计算组件、出行服务应用场景中联盟链成员内部自治的联盟链治理组件与数据管理组件。
(3)服务层。在服务层中,包括统一的旅客服务、区块链管理服务与数据共享服务。旅客服务通过HTTPS/HTTP 协议向旅客提供售票、保险、旅游、订餐等服务。区块链管理服务支持区块链联盟的快速部署、动态扩展,并具备高效智能合约管理能力,通过可视化工具快速生成、部署、发布智能合约。数据共享服务主要面向企业提供数据发布与使用功能。
(4)应用层。应用层为各企业应用和旅客客户端,各企业应用可以作为权威节点参与到客运出行服务联盟区块链中,提供共享数据、数字资产和链下交易服务,并享有交易验证、区块共识、数据查询等权力,主要包括12306 系统、民航系统、公路系统以及酒店、旅游、约车、保险等行业系统,其均为客运出行服务系统的供应商,提供除旅客运输之外的其它商品和服务。
在基于联盟区块链的铁路客运出行服务系统中,主要有2 种交易模式:链上交易和链下交易。链上交易是联盟中的成员将产品或服务等商品转化为数字资产注入到区块链系统中,由智能合约完成交易并将交易凭证写入区块链中;链下交易是联盟中的成员将商品信息发布到区块链中,旅客服务调用企业生产系统服务的模式完成交易,并将交易信息写入区块链中。基于联盟链的铁路客运出行服务交易流程如图3 所示。
图3 基于联盟链的铁路客运出行服务交易流程Fig.3 Transaction flow of railway passenger travel service based on consortium blockchain
铁路客运出行服务业务的基础是票务交易,旅客在客户端中购买产品时,根据出行需要选择运输产品和出行服务,当车票以数字资产的形式保存在区块链中时,区块链系统使用智能合约来执行交易并将交易凭证写入区块链中,同时系统主动将交易信息通知铁路票务系统。当车票需要在链下交易时,区块链系统采用业务执行和共识分离的策略,旅客服务调用票务系统的接口完成交易,交易成功后将交易信息写入区块链中。旅客购票成功后,可以在票务系统中使用,当席位在区块链系统中售出后,票务系统通过内部加密信息判断席位信息的合法性,以方便旅客的电子客票在票务系统中进站、乘车、改签、退票时进行鉴别。
基于联盟链的铁路客运出行服务系统根据业务流程需解决数据安全、数据共享、数据存储、清分结算4 个环节的关键技术。
数据安全是铁路客运出行服务系统的关键环节,而随着数据交换、共享力度的加大,其权属、合规性、安全性等诸多风险开始显现,数据拥有方无法顺利地进行数据共享[6]。针对上述情况,铁路客运出行服务系统设计多链式区块链方案,每个链由不同的节点组成,各节点维护着相同的数据,不同链的数据是相互隔离的,以实现数据的隐私保护。铁路客运出行服务系统多链式数据结构图如图4 所示,系统多链式数据由账户信息链、交易信息链、数字资产链组成。
图4 铁路客运出行服务系统多链式数据结构图Fig.4 Multi-chain data structure of railway passenger travel service system
账户信息链负责创建、验证、保存和查询账户信息,包含旅客账户信息、企业账户信息与账户合约。系统采用实名制注册方式,旅客注册时要求提供相关信息,包括姓名、证件类型、证件号码、手机号码等;企业账户采用联盟邀请机制,注册时提供企业相关信息。数字证书认证中心(CA)对账户信息审核通过后,为账户颁发数字证书,生成用户的私钥和公钥[7],然后在出行服务区块链中对用户信息达成共识后,用户信息被写入账户信息链中,其中,用户隐私信息采用哈希算法和对称加密技术进行加密处理。
交易信息链是出行服务区块链中的主链,该链中存储了旅客出行服务系统中的交易凭证和交易合约。交易信息链中记录完整的交易信息,包括账户信息、数字资产信息和交易相关信息。交易信息区块链保证交易数据的真实性、可追溯性、不可抵赖性、可访问性和可扩展性。
数字资产信息链主要存储铁路客运出行服务系统的数字资产信息,包括商品基本信息、商品属性信息和商品扩展信息等,商品基本信息包括商品的标识(散列值)、类别、名称、所有者、创建时间、有效时间等,商品属性信息包括交易范围、商品价格、服务方式、支付方式、快递方式、商品数量等,商品扩展信息指商品的特有信息,如车票的发到站、席别、票种、车厢、席位号等。其中,企业可以根据需要推出联合产品,在运输领域,除了机票、火车票、客车票、船票等单程票,还可以推出往返票、空铁联运、铁水联运等多种运输产品。
铁路客运出行服务系统涉及众多的路内外信息系统,各机构数据标准不统一,阻碍数据交换以及共享效率的提升。针对以上问题,以可编程网络技术切入,基于联盟链设计分布式数据共享流程,数据共享模型如图5 所示,辅之以数据共享智能合约,可实现对接入数据统一标识,获得持续、多源、标准化的数据资源。
图5 数据共享模型Fig.5 Data sharing model
联盟链中的各企业首先需要建立节点,并以P2P 网络的形式拼接形成链下去中心化的数据共享网络。在这个网络上,通过建模可实现分布式的数据协作,根据客运出行系统的业务场景确定共享的业务流程,定义各对等方形成的联盟网络。再联合多方构建业务流程,实现移动计算、共享结果。区块链提供共享安全性及可信的存储,引入数据共享合约实现数据链上精准授权,以及提供数据供需匹配、记录收授。
铁路客运出行系统数据共享平台为各种数据源构建一套在联盟链网络中协作、共享的数据索引、定位、查询、交换和数据追溯审计的统一实现标准,并提供业务流程定制能力。数据共享流程分为数据提供方的发布和数据需求方的获取使用,整个过程分为以下2 部分。
(1)数据提供方发布流程。数据共享过程分为数据的导入、命名、发布与同步。数据导入过程会对数据进行统一标识,根据导入的数据类型不同,进行不同的处理。数据命名通过自描述的数据结构,形成网络唯一的ID,提供数据在网络中的定位、查找能力。数据发布可共享数据的元信息至联盟链,可为某些机构设置默认的访问权限。最后将数据元信息同步至数据共享平台,数据共享平台是链上数据汇集的中心,任意方均可查询,获取此处的数据。
(2)数据需求方获取流程。业务需求方获取数据,编排业务流程,启动数据共享,联盟链节点会根据流程的指示分派共享任务,同时节点的虚拟机会加载业务计算模型利用本地数据执行计算逻辑。获取数据流程分为检索、请求、获取、使用4 步,首先通过数据共享平台检索所需要的数据,再请求相关数据的访问凭证,根据数据发布的方式,请求数据时会进行交易信息上链。数据需求方通过自身的业务定制流程及计算模型,根据流程流转到不同的机构,通过网络的节点ID 以及获取到的数据的凭证向提供方获取数据。最后计算模型会使用授权得到的数据,通过加载模型来使用本方数据,计算得到结果。
目前既有铁路客运出行服务系统是基于关系型数据库构建业务,而区块链的存储数据库仅支持键值对存储,当业务系统需要对接区块链系统时会带来极高的成本。为解决这个问题,铁路客运出行服务系统采用链上链下结合的方式来减少区块链数据存储的开销[8]。考虑到区块共识、网络通信、交易执行是区块链中最为耗时的过程,过多的数据采用链上存储会严重影响系统的运行效率,尤其在数据规模极大的情况下,直接将所有数据存储于区块链中将产生巨大的资源开销[9]。因此,铁路客运出行服务系统同步采用基于关系型数据库的区块链存储技术,理论上可通过设备扩容使存储空间无限扩展,以空间换时间,以较小的代价提高铁路客运出行服务系统的数据存储规模,提升系统运行效率。
链下数据区采用传统的关系型数据库、内存数据库和文件系统,可以存储多种类型的数据。共享数据只在链下进行存储,各企业应用按照出行服务系统规范进行数据组织和索引组织,调用系统接口完成共享数据的传输。服务系统负责组织共享数据,完成数据汇聚、数据审核、数据检索和数据使用等环节。交易凭证存放于链上的同时,以多交易副本的形式同步存放到链下数据区,以便于旅客、企业进行查询统计。历史数据全部存放于关系型数据库中,按照企业标识、旅客标识、交易标识分别建立索引,可以方便生产企业统计本企业商品的交易情况,方便旅客查找自己的历史订单数据;同时把访问频率最高的近期交易数据存放于内存数据库中,提高系统的访问速度。当区块链上的数据规模较大时,直接在链上存储全部的原始数据会导致存储开销极大,且降低系统的性能,针对此种情况,铁路客运出行服务系统采用链上链下混合存储的方式。在混合存储的模式中,区块链中存储的数据为原始数据的哈希值,而原始数据则存放在链下数据区中,如企业账户的营业执照、交易凭证中的发票信息,就采用链上链下混合存储模式。链下数据不做为企业对账的依据,企业之间进行对账清算时以链上数据为准。
目前铁路客运出行系统的清算需要多个企业及所在地银行参与结算流程,同时需要中心机构进行对账清算,由于参与方较多,且分布分散,清算过程中需要经过诸多环节审批,流程冗长。针对客运出行领域中的场景复杂度和参与方复杂度,需设计一套高效的智能合约体系,以简化铁路客运出行服务系统清分结算流程,提升业务效率。
联盟链中的智能合约主要支持EVM 虚拟机与JVM 虚拟机,虚拟机在执行合约时,都是严格按顺序执行,和区块链平台高度耦合。但客运出行中涉及业务众多,且各业务之间并无直接关联关系,此时交易与交易之间可以并发执行,故考虑不同智能合约间的并行优化以提高整体执行效率。每一个智能合约对应一个默克尔(Merkle)树,Merkle 树是一种数据结构,它的所有节点都是哈希值。为了提高联盟链计算效率,设计了一种新型数据结构,对Merkle 树进行优化,同时对数据进行缓存,避免高频读写,提高计算性能,改进后的Merkle树如图6 所示。
图6 改进后的Merkle 树Fig.6 Improved Merkle tree
新的Merkle 树增加了数据缓存层,其主要作用是用来接收、存储数据,并将其映射到对应的数据节点中,当有新数据上链时,数据层进行哈希计算,并映射到桶节点中,最后生成新的根哈希返给外部。相对比原有的数据结构,新的结构不仅可以大大提高Merkle 树的可扩展性,同时也方便提前计算出每次数据更新所影响到的节点,提高哈希计算的并行效率。
铁路客运出行服务系统可基于智能合约建立日清分、月结算应用功能,依托智能合约的特性,按照客运出行结算规则对智能合约进行编程处理,只要各业务部分提供的结算数据都满足合约代码要求,日清月结结果就会自动生成,处理完后的对账结果会写入合约的状态数据库,方便追溯与查询。智能合约的逻辑处理完后,需要修改Merkle树。Merkle 树中,将每一笔清分结算数据的哈希值两两进行哈希运算,最终得到一个哈希根值保存在区块链头中,而Merkel 树本身属于区块体。相比较传统的结账方式,区块链的对账速度更快,点对点的交易模式省去大部分中间流程,实现自动和实时交易。
区块链已逐渐成为“价值互联网”的重要基础设施,引领全球新一轮技术变革和产业变革。区块链技术的应用,为铁路系统和路内外企业提供良好的信任基础和信息安全机制,解决跨企业应用各主体之间的信任问题,保证交易信息的完整性、真实性、安全性、不可篡改、可溯源,降低各企业之间的对账流程与成本,必将吸引更多的优质企业加入。同时,随着区块链技术的成熟和铁路行业监管的完善,未来区块链将和铁路运输结合更加紧密,以不断打造良好的铁路发展环境,持续深入服务铁路行业发展。