食品事关国运民生, 食品安全是国家安全的重要基础, 与公众健康、生活水平、经济发展乃至社会稳定息息相关[1]. 果品作为常见食品受众面很广, 其质量安全溯源受到广泛关注. 果品质量溯源是将果品从果园培育到销售的完整产业链中产生的所有数据进行管理以实现监管, 这需要整个供应链中的参与者共同实现[2]. 然而, 现有的主流果品质量溯源系统的溯源数据都是集中化控制管理的, 数据信息存储在中央数据库, 因此追溯数据极易被人刻意篡改且难以发现, 追溯数据的采集比较单一, 数据是否完整也无法被验证[3]. 集中式管理数据的溯源系统并不能保证查询数据的真实性, 不能完全满足果品溯源数据安全完整的需求.
区块链去中心化等特点满足果品质量溯源系统的需求[4]. 在供应流程中产生的果园基地的环境数据、施肥、防虫、除害、加工、销售、物流等溯源数据都可以通过物联网设备或人工录入的方式进行信息上链, 一旦数据上链便不能修改. 区块链上的所有数据都需要信息背书, 这样可以有效减少人为错误, 供应链上的企业能够共同维护数据, 消费者只需通过溯源码进行链上数据查询即可获得果品溯源数据, 因此可以很大程度上解决消费者对数据的不信任问题.
在基于区块链的果品质量溯源系统中, 所有环节产生的数据都在一个去中心化、不可伪造和不可篡改的安全环境中进行流通, 共识机制是保证这些特征的区块链底层技术之一[5]. 由于果品质量溯源系统应用于供应链当中, 每天的交易和账户数据更新较为频繁, 系统需要良好的吞吐量以及低交易时延. 虽然区块链去中心化等特点适用于供应链, 但共识算法存在吞吐量低、时延高、节点数不能动态变化等问题, 影响了基于区块链的果品质量溯源系统的整体性能.
鉴于上述原因, 研究实现一种可以良好的对抗拜占庭将军问题[6]且可以满足高吞吐量和低延时的区块链共识机制成为本文的研究重点.
1 相关研究追溯体系的构建需要依托溯源技术. 目前, 国内外的追溯技术主要是通过二维码、RFID技术、NFC技术和生物DNA等技术手段对产品标记和记录, 实现信息存储, 通过互联网软件系统或手持设备等手段查询信息真伪. 传统溯源技术虽然发展比较成熟[7-9], 但其存在溯源数据采集单一、易被篡改、数据完整性无法验证等问题. 区块链技术的去中心化、可追溯性及不可篡改等特性能够很好的解决传统溯源技术存在的问题, 基于区块链的溯源方法成为国内外众多学者的研究热点[10-12].
区块链的核心技术包括共识机制、分布式存储技术、密码学和智能合约[13]. 其中, 共识机制主要解决分布式系统的一致性问题, 保证所有节点维护的数据副本的一致性. 共识算法已经有了非常丰富的实例, 从区块链应用衍生出来的共识算法有PoW、PoS、DPoS等; 从传统一致性算法衍生出来的共识算法有Paxos、Raft、PBFT等. 6种共识机制具体对比结果如表1所示. 通过对区块链中几种常见的共识机制对比分析, 结合果品质量溯源系统的应用需求可得出: PoW和PoS虽然拥有非常良好的拜占庭容错性但吞吐量与交易时延并不能满足该系统的性能要求, 且其资源消耗普通企业无法承担. Raft、Paxos和Kafka虽然都拥有良好的吞吐量、交易时延和低消耗, 但均不具备拜占庭容错能力, 并不满足果品质量溯源系统对安全性的要求. PBFT虽然在吞吐量、交易时延和消耗都不是最优, 但是其具备抗拜占庭能力, 基本满足果品质量溯源系统的需求, 因此本文选择PBFT共识算法作为基础, 结合果品质量溯源系统的应用场景展开研究工作.
2 基于积分选择的改进PBFT共识算法
针对共识机制低吞吐、高时延和主节点随机选择的问题, 文献[14]提出使用投票选举主节点的方式提高共识效率, 文献[15]通过简化一致性协议提高共识效率, 文献[16]提出分组概念将节点分为共识节点与记账节点, 但这些方法假设所有节点都是诚实节点并未考虑拜占庭问题, 且根据时间戳进行垃圾回收并不满足果品质量溯源系统需求. 本文引入积分机制[17], 对抗拜占庭节点, 对一致性协议步骤进行优化, 通过积分来执行垃圾回收机制, 以提高吞吐量、降低通信开销, 从而提高共识效率.
2.1 PBFT共识算法PBFT共识算法的核心流程, 如图1所示, 算法的核心阶段分别是预准备阶段(pre-prepare)、准备阶段(prepare)和提交阶段(commit). 图中的C代表客户端,
(1)从所有参与共识的节点中随机选择一个节点作为主节点, 主节点的主要工作是负责接收客户端信息、广播信息以及生成新的区块;
(2)预准备阶段: 主节点将从客户端接收到的交易请求进行校验, 校验通过后, 加上自己的签名通过对等网络广播至所有参与共识的从节点, 并且将该交易保存在日志文件中;
(3)准备阶段: 所有从节点收到消息之后, 首先对消息进行校验, 包括主节点签名等, 校验通过后, 将该交易保存在日志文件并向全网广播一条准备消息;
(4)确认阶段: 节点对收到的准备消息进行统计, 若收到2f条通过校验且和自己信息一致的消息, 就广播一条确认消息;
(5)回复阶段: 节点对收到的确认消息进行统计, 若收到2f+1条确认消息, 就将新区块更新到本地账本, 并向客户端发送消息;
(6)客户端若收到f+1条相同消息, 共识结束.
通过对PBFT算法共识过程的分析可以得出, PBFT共识算法存在以下问题: 1)在执行完整的一致性协议时节点间需要进行大量的通信, 其时间复杂度为
针对传统PBFT共识算法存在的问题, 本文提出了一种基于积分选择的改进PBFT共识算法. 该算法通过积分选择, 从一致性协议、视图转换协议、垃圾回收机制几方面进行了优化, 提高了共识算法的效率. 系统中节点的积分是每个参与共识的节点在进行共识过程中根据共识行为进行相应加减. 在成功执行一次一致性协议之后, 对所有达成共识的节点(除主节点), 将积分加5; 对于未达成共识的节点, 将积分减5; 主节点成功完成一次区块生成, 积分加1. 积分选择协议如表2所示, 根据积分赋予节点不同角色.
主节点的选取依据积分选择协议, 积分越高的节点其安全性越高且更稳定不易坏, 增大主节点选择的安全性, 从而降低了视图转化协议执行的概率, 提高共识效率. 通过不断的执行共识机制, 成功达成共识的节点将不断积累积分, 认为积分高的共识节点其安全性更高.
本文参考文献[14-17]对共识算法的改进思路, 进一步明确节点分组边界. 具体来说, 首先将所有节点的积分从小到大进行排序, 认为
具体步骤如下:
(1)首先将区块链所有节点根据积分选择协议的积分选择依据进行分组, 分为共识节点和记账节点;
(2)客户端在共识节点中根据积分区间选择主节点
(3)主节点将从客户端接收到的交易请求进行校验, 校验通过之后, 加上自己的签名通过对等网络广播至所有参与共识的从节点, 并且将该交易保存在日志文件中;
(4)从节点收到消息, 并对消息通过签名字段进行认证, 如果认可这条消息, 则将同样的消息加上签名发送给主节点, 并保留消息内容等待二次确认;
(5)如果主节点收到的认可信息且消息内容没有更改的数量大于等于2f, 则将认可信息打包再发给所有节点, 共识节点将收到的消息进行二次确认检查信息是否正确, 通过验证后进入commit状态, 将新区块更新到本地账本, 并向客户端发送消息, 记账节点接收消息更新本地账本;
(6)如果客户端收到f+1条消息认为达成共识, 共识结束.
算法在执行过程中, 本文针对共识节点内拜占庭节点大于承载能力两种情况, 分别给出解决方法: 1)若3阶段内任意阶段条件为满足, 认为共识节点中存在大于f个拜占庭节点, 则算法执行完整的一致性协议来解决拜占庭问题; 2)若节点请求超时, 认为主节点为恶意节点, 则算法执行视图转换协议来解决主节点作恶问题.
每次执行一致性协议都会对节点积分产生影响, 当积分值积累到一定程度后执行垃圾回收机制更新并重置节点积分值. 优化的一致性协议通过简化信息交互过程, 降低了在共识过程中的通信开销, 并且由于引入积分机制使良好节点当选主节点的概率增高, 降低使用视图转换协议的概率, 提高了整体的效率.
2.3 视图转换协议和垃圾回收机制的优化PBFT共识算法中视图转换协议的主要目的是当判定主节点为错误节点时更换主节点, 具体过程如图3所示.
从节点需要在view-change阶段相互通讯来确定主节点为恶意节点, 然后在view-change-ack阶段随机选择新的节点成为主节点, 并舍弃未完成的交易. 通过积分机制, 在view-change-ack阶段根据当前节点积分选择新的主节点, 可以有效降低使用视图转换协议的概率, 达到提高共识效率的目的.
PBFT通过3阶段协议来对请求达成共识, 但各个阶段产生的消息如果不进行垃圾回收的话, 系统的存储空间将会不堪重负. 为此, PBFT算法设计了垃圾回收机制来清除本地缓存. 根据前面的3阶段协议, 客户端收到某个请求的执行结果的时候, 表明该请求已经被至少f+1个节点提交过, 这个时候需要删除该消息. 垃圾回收机制是通过额外的通讯来提供证明, 证明节点状态正确. 如果每执行结束一次一致性协议都需要生成上述证明, 那么整个网络将会消耗大量资源.
在PBFT垃圾回收机制中, 执行方式是周期性执行, 目的是为了防止节点因为宕机、网络或自身故障等原因而产生节点信息不一致从而导致系统故障. 为了确保系统的正常运转以及安全, 节点在清除本地消息日志中旧消息时, 必须确保至少存在f+1个节点已经执行了这些旧消息, 因此需要进行节点间是否同步的确认通信, 这导致每次在执行垃圾回收机制时就会产生巨大的通信开销.
改进的PBFT算法在垃圾回收机制中实现了动态增加和退出节点的功能以及积分重新分配的功能. 当执行一致性协议时存在节点积分大于等于阈值的情况时, 完成一致性协议后运行垃圾回收机制, 所有参与共识的节点会清除本地日志中已执行过的交易请求, 达到降低网络通讯消耗的目的. 同时将系统中所有共识节点的信用全部清零, 并对所有参与共识节点的积分在一定范围内随机赋值, 提高了新加入网络节点成为主节点的可能, 从而达到了共识节点的动态增加和退出的目的.
3 实验结果与分析本次实验是应用改进PBFT共识机制作为Fabric的自定义共识后端并通过Caliper对区块链框架中两种不同事务在不同情况下进行测试, 然后对测试结果进行分析讨论. 实验环境配置如表3所示.
分别进行提交请求和查询请求的测试, 观察在两种请求下系统资源占用情况与区块链性能情况. 表4、表5分别为在交易数量为100时提交请求和查询请求的内存和CPU占用率.
由表4和表5中的信息可以看出peer1节点的内存、CPU等系统资源使用情况都是0, 表明该节点在运行过程中并没有对系统提交的交易做出响应, 即该节点属于错误节点. 然而可以看出, 当系统发出提交事务请求的时候, 系统依旧完成了共识过程, 并没有因为某些失效节点或恶意节点造成区块链系统瘫痪. 因此基于积分选择的改进PBFT共识算法可以抵抗拜占庭错误, 安全性高.
表6、表7表示在提交请求下不断增加交易数量以及查询请求下不断增加发送请求, 得出不同情况下系统处理返回数据的TPS以及请求时延情况(实验数据为10次请求的平均值).
首先分析吞吐量情况, PBFT共识机制与本文方法提交事务与查询事务吞吐量对比情况如图4、图5所示.
结果表明, 在提交事务中随着交易数量的增加吞吐量逐渐增大并趋向饱和, 可以看出当交易数量达到一定程度之后吞吐量将维持在一个平稳的水平. 通过优化一致性协议、视图转换协议以及垃圾回收机制, 对比发送请求平均吞吐量从604 TPS提升到了756 TPS提升了25%而响应处理请求的平均吞吐量从121 TPS提升到了137 TPS提升了13%. 在查询事务中设置交易数量为5 000在不同的请求发送速率下可得, 系统响应平均吞吐量从298 TPS提升到了350 TPS提升了17%.
接下来分析交易请求的时延情况, 传统PBFT共识机制与本文方法提交事务与查询事务的时延对比情况, 如图6、图7所示.
结果表明, 在进行提交事务与查询事务时, 系统的最大时延、平均时延都随着交易数量的增加而增加, 提交事务的平均时延从3.36 s下降到2.56 s, 查询事务的平均时延从4.96 s下降到4.66 s, 有效的提升了果品质量溯源用户的系统使用体验.
4 结论
针对基于区块链的果品质量溯源系统中存在的共识算法性能低下问题, 本文对PBFT算法进行分析并引入积分选择协议, 优化了一致性协议、视图转换协议以及垃圾回收机制. 在保证算法容错性的同时, 降低了共识过程中的传输消耗, 提高了吞吐量, 缩短了共识达成时间. 在运行垃圾回收机制时给所有节点重新分配积分, 达到了动态更改节点的目的. 最后, 通过实验证明了基于积分选择的改进PBFT共识机制的有效性.
[1] |
Wang L, Hu Z, Liu SY, et al. Application of non-orthogonal multiple access for IoT in food traceability system. 2019 IEEE 4th Advanced Information Technology, Electronic and Automation Control Conference (IAEAC). Chengdu: IEEE, 2019. 104–109.
|
[2] |
杨晓, 秦一浪, 王进磊. 果品质量安全溯源管理系统设计. 现代农业科技, 2018(16): 245-247. DOI:10.3969/j.issn.1007-5739.2018.16.148 |
[3] |
何蕾, 马征, 王刚, 等. 基于区块链技术的茶叶质量溯源研究. 合作经济与科技, 2021(5): 114-117. |
[4] |
王仕栋, 孙建明, 李昭, 等. 基于区块链技术的农产品质量溯源系统. 包装学报, 2020, 12(6): 80-85. DOI:10.3969/j.issn.1674-7100.2020.06.011 |
[5] |
郑旭东, 杨现民, 岳婷燕. 教育政务数据开放平台的区块链技术架构与运行机制设计. 中国电化教育, 2021(3): 71-78. DOI:10.3969/j.issn.1006-9860.2021.03.011 |
[6] |
Driscoll K, Hall B, Paulitsch M, et al. The real Byzantine Generals. The 23rd Digital Avionics Systems Conference (IEEE Cat. No. 04CH37576). Salt Lake City: IEEE, 2004. 4–61.
|
[7] |
王振辉. 基于二维码的食品溯源系统. 农业工程, 2017, 7(6): 29-32, 51. DOI:10.3969/j.issn.2095-1795.2017.06.009 |
[8] |
Bibi F, Guillaume C, Gontard N, et al. A review: RFID technology having sensing aptitudes for food industry and their contribution to tracking and monitoring of food products. Trends in Food Science & Technology, 2017, 62: 91-103. |
[9] |
袁源, 郑嘉利, 石静, 等. 基于Q-learning的RFID多阅读器防碰撞算法. 计算机科学, 2019, 46(6): 124-127. DOI:10.11896/j.issn.1002-137X.2019.06.018 |
[10] |
Salah K, Nizamuddin N, Jayaraman R, et al. Blockchain-based soybean traceability in agricultural supply chain. IEEE Access, 2019, 7: 73295-73305. DOI:10.1109/ACCESS.2019.2918000 |
[11] |
Tsang YP, Choy KL, Wu CH, et al. Blockchain-driven IoT for food traceability with an integrated consensus mechanism. IEEE Access, 2019, 7: 129000-129017. DOI:10.1109/ACCESS.2019.2940227 |
[12] |
工业和信息化部信息化和软件服务业司. 中国区块链技术和应用发展白皮书(2016). http://www.ciotimes.com/recommend/119951.html. (2016-10-18).
|
[13] |
黄冬艳, 李浪, 陈斌, 等. RBFT: 基于Raft集群的拜占庭容错共识机制. 通信学报, 2021, 42(3): 209-219. |
[14] |
杨绿林. 基于改进PBFT算法的区块链溯源系统设计与实现[硕士学位论文]. 北京: 北京邮电大学, 2019.
|
[15] |
徐治理, 封化民, 刘飚. 一种基于信用的改进PBFT高效共识机制. 计算机应用研究, 2019, 36(9): 2788-2791. |
[16] |
方维维, 王子岳, 宋慧丽, 等. 一种面向区块链的优化PBFT共识算法. 北京交通大学学报, 2019, 43(5): 58-64. |
[17] |
孙嘉豪, 孟翔斯, 张浩运, 等. 基于改进PBFT的区块链知识产权保护模型. 计算机工程, 2020, 46(12): 134-141. |