Fabric:历史遗留系统的兼容

在采用Fabric架构的系统中我们常常面对这样的场景:需要将现有的系统和Fabric系统对接。比较常见的是溯源系统,这样的系统在引入区块链技术之前业务方已经有一个基于传统技术架构的系统,该系统已经运行了一段时间并积累了大量的数据,现在为了提高数据价值准备将所有的历史溯源数据存放到区块链中,并且在系统改造完成之后,新产生的溯源数据也需要存放到区块链中。在实际工作中这样的业务场景和需求是经常会遇见的。

在上述溯源的业务场景中,最核心的问题是历史遗留系统和Fabric的结合。针对这样的业务需求,我们建议从账号同步和数据融合这两个方面来进行考虑。

1、业务系统的历史账号和Fabric账号的同步如果业务系统中存在历史遗留系统,首先需要仔细分析历史遗留系统中的账号体系。分析可以从账号是否会继续增加和现有账号的数量这两个维度来考虑历史遗留系统的账号体系和Fabric账号体系的融合。

(1)历史遗留系统中账号体系中的账号是固定不变的

在这种情况下如果账号的数量比较少,可以通过Fabric的cryptogen模块生成相应数量的账号信息,然后将生成的账号文件和历史遗留系统的账号进行绑定。如果账号的数量比较多,那么可以借助Fabric-ca-server来对这些账号进行管理,通过Fabric-ca-server提供的RESTAPI接口可以将历史遗留系统的账号导入到Fabric-ca-server中。在调用Fabric-ca-server提供的RESTAPI导入数据时,每次调用成功都会返回当前创建账号的证书等信息,通过这些信息可以完成与历史遗留系统账号体系的绑定。

(2)历史遗留系统的账号会持续增加

如果是这种情况,那么只能采取Fabric-ca-server来管理账号,通过Fabric-ca-server提供的RESTAPI接口将历史遗留系统的现有账号导入到Fabric-ca-server中完成绑定。对于新增的账号,每次创建账号之后,调用Fabric-ca-server的接口生成新的账号并完成绑定。 

关于Fabric的账号以及Fabric-ca-server的相关内容。将fabric-ca-server绑定到现有项目中

2、业务系统历史遗留数据和Fabric的融合

关于历史遗留系统的已有数据如何保存到区块链中是一个比较麻烦的问题。在处理这个问题的时候会有一个矛盾。由于历史遗留数据是发生在过去的,但是区块链中每条交易都会在系统级别记录一条数据的时间戳。这个时间是客户端无法修改的并将永远保存。这个时候如果进行数据初始化就会发生数据存储时间不一致的问题,即历史数据的系统时间戳和业务时间戳是不一致。这可能会导致数据有效性受到质疑。这个时候区块链技术已经无法解决这个问题了,只有联盟链的所有参与方达成共识,统一接受这样的事实才可以。针对这种问题我们推荐两种解决方案供大家参考,这两种方案分别是:时间戳截取法和Channel截取法。

(1)时间戳截取法

时间戳截取法是通过设定某个特定的时间点,在该时间点之前的数据为历史数据,时间点之后的数据为新数据。当系统中需要用数据的时间戳的时候,对于时间节点之前的数据以存在交易记录中的历史时间为准,对于时间点之后的数据以系统时间戳为准。

(2)Channel截取法

在使用Channel截取法的时候,将历史数据存储在特定的通道中。当需要使用历史数据的时候从特定的通道中获取相关的数据,如果需要使用新生成的数据则从新创建的Channel中获取数据。

上述两种方法都需要在历史数据保存到区块链中的时候将历史数据中的时间戳一并保存到区块链中。

注意 在设计区块链系统的时候,技术不是万能的,很多时候需要所有的参与者达成共识才能有效地解决问题。人是设计区块链系统必须充分考虑的一个因素。区块链提出了一个区中心化的理想模型,但是直接用来改造现实社会是有问题的。在设计基于区块链技术的系统的时候,需要在理想和现实之间达成妥协。

868区块链学习网为您整理《Fabric:历史遗留系统的兼容》仅供参考。