基于区块链的分布式存储系统及方法、设备、存储介质
技术领域
本发明涉及区块链
技术领域
,特别地,涉及一种基于区块链的分布式存储系统及方法、设备、计算机可读取的存储介质。背景技术
区块链技术是指由若干台计算机设备组成点对点的分布式网络,共同维护一个完整的分布式数据库的新兴技术。区块链技术具有去中心化、公开透明、数据难以篡改且不易丢失等特性,在众多领域中具有广泛的应用。
但是,区块链技术严格来说也是一种去中心化的分布式存储技术,它使用P2P技术组网通信,利用加密算法防止数据篡改,通过共识算法使各节点的存储内容达成一致。其中,如图1所示,区块链文件系统通常由两部分组成,一是记录具体事件的链式文件,二是用来记录系统状态的数据库。比特币、以太坊、超级账本等都是区块链项目的代表,它们使用的加密算法与共识机制虽然不同,但都能产生信任与激励,不过受制于区块链技术的天然特性,目前,区块链分布式存储存在以下问题:
1)、处理效率低:可用的区块链项目一定要支持高并发的业务,这对区块链的处理效率提出了很高的要求,但是根据CAP原理,在保证一致性的前提下,很难实现效率的大幅提升。
2)、存储容量低:存储容量低是区块链长期面临的问题,虽然在联盟链中可以通过增加存储服务器的办法来解决,并同时解决数据存储内容单一的问题,但是这种解决方式会进一步拉低区块链的处理效率。
3)、数据存储与实际需求之间存在矛盾:区块链通常是以键值对形式的数据结构存储交易记录,不支持更加复杂的文件存储,比如图片、音频、视频等等,能够存储的内容比较单一,而在实际使用场景中,很多业务需要更加复杂的数据作为支撑,这就造成账本数据不能很好的满足实际业务需求,限制了区块链的应用拓展。
发明内容
本发明提供了一种基于区块链的分布式存储系统及方法、设备、计算机可读取的存储介质,以解决目前的区块链的分布式存储方式存在的处理效率低、存储容量低、无法满足多样化的数据存储需求的技术问题。
根据本发明的一个方面,提供一种基于区块链的分布式存储系统,包括:
用户端,用于供用户进行功能操作以产生一段数据流;
服务端,包括用于根据用户的功能操作请求对数据流进行相应处理的数据处理模块;
存储端,包括区块链文件系统和数据存储组件,所述区块链文件系统用于保存数据的地址和指纹,并记录数据的状态,所述数据存储组件用于存储数据;
API网关,用于对区块链文件系统和数据存储组件的API进行聚合,以供所述数据处理模块进行调用;
所述数据处理模块接收到数据流后根据用户的不同功能操作请求进行相应的数据处理,并调用对应的API分别与区块链文件系统和存储组件进行交互,将数据存储在数据存储组件中,将数据指纹和数据存储地址存储在区块链文件系统中,并根据交互结果向用户端做出响应。
进一步地,所述数据存储组件包括用于保存结构化数据的关系型数据库、用于保存半结构化数据的NOSQL数据库、用于保存具有高速读写需求的数据的高速缓存池、用于保存非结构化数据的去中心化分布式存储组件和用于保存以文件为最小单位的非结构化数据的中心化分布式存储组件中的至少一种,所述数据处理模块还用于根据数据类型或数据读写需求调用不同的API与不同的数据存储组件进行交互。
进一步地,当用户进行读写操作时,所述数据处理模块通过哈希函数对读写操作产生的数据进行指纹计算,并根据数据类型或数据读写需求将其存储至对应的数据存储组件中,该数据存储组件将存储地址发送给数据处理模块,所述数据处理模块将数据指纹和数据地址打包发送给区块链文件系统进行上链。
进一步地,当用户进行查询操作时,通过用户端将数据索引发送给数据处理模块,所述数据处理模块利用接收到的数据索引向区块链文件系统索要对应的数据指纹和数据地址,并根据获得的数据地址向对应的数据存储组件索要数据,所述数据存储组件将数据发送给数据处理模块,所述数据处理模块基于获得的数据利用哈希函数计算数据指纹,若计算得到的数据指纹与从区块链文件系统中获得的数据指纹一致,则证明数据没有被篡改,所述数据处理模块将获得的数据返回至用户端。
进一步地,当用户进行修改操作时,通过用户端将数据索引和修改内容发送至数据处理模块,所述数据处理模块利用接收到的数据索引向区块链文件系统索要对应的数据指纹和数据地址,并根据获得的数据地址向对应的数据存储组件索要数据,所述数据存储组件将数据发送给数据处理模块,所述数据处理模块基于获得的数据利用哈希函数计算数据指纹,若计算得到的数据指纹与从区块链文件系统中获得的数据指纹一致,则证明数据没有被篡改,所述数据处理模块再根据接收的修改内容对获得的数据进行修改,并计算得到修改后数据的新数据指纹,并将修改后的数据存储到相应的数据存储组件,所述数据存储组件将新数据地址发送给数据处理模块,所述数据处理模块将新数据指纹和新数据地址打包发送至区块链文件系统进行上链。
进一步地,当用户进行删除操作时,通过用户端将数据索引和删除指令发送至数据处理模块,所述数据处理模块利用接收到的数据索引向区块链文件系统索要对应的数据指纹和数据地址,并将删除指令发送给区块链文件系统,所述区块链文件系统对该数据指纹和数据地址进行删除,所述数据处理模块将获得的数据地址和删除指令发送给相应的数据存储组件,所述数据存储组件对数据进行删除。
进一步地,所述服务端还包括用于对数据流进行分发的反向代理模块,所述数据处理模块的数量为多个,所述反向代理模块可获取各个数据处理模块的工作状态,所述反向代理模块在接收到数据流后将其分发至空闲的数据处理模块。
另外,本发明还提供一种基于区块链的分布式存储方法,采用如上所述的基于区块链的分布式存储系统,包括以下内容:
用户进行功能操作以产生一段数据流;
根据用户的功能操作请求对数据流进行相应处理,并调用对应的API分别与区块链文件系统和存储组件进行交互,将数据存储在数据存储组件中,将数据指纹和数据存储地址存储在区块链文件系统中;
根据交互结果向用户端做出响应。
另外,本发明还提供一种设备,包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器通过调用所述存储器中存储的所述计算机程序,用于执行如上所述的方法的步骤。
另外,本发明还提供一种计算机可读取的存储介质,用于存储基于区块链进行分布式存储的计算机程序,其该计算机程序在计算机上运行时执行如上所述的方法的步骤。
本发明具有以下效果:
本发明的基于区块链的分布式存储系统,用户进行功能操作产生数据后,数据处理模块根据用户的功能操作请求对数据流进行相应的处理,包括数据的序列化、数据指纹计算、数据指纹比对等,然后调用对应的API分别与区块链文件系统和存储组件进行交互,将数据存储在数据存储组件中,将数据指纹和数据存储地址存储在区块链文件系统中进行上链。通过将区块链文件系统与数据存储组件进行结合,利用区块链文件系统存储数据指纹和数据存储地址,利用数据存储组件存储数据,可以通过区块链文件系统中存储的数据指纹和数据存储地址对数据存储组件中存储的数据进行有效性验证,防止了数据存储组件中的数据被恶意篡改。并且,区块链文件系统只需要记录数据的指纹、地址和状态,减少了区块链系统的存储压力,提高了区块链的处理效率。另外,数据存储组件便于进行扩展,可以实现对各种复杂数据的存储支持,满足了多样化的存储需求,同时实现了整体存储的大容量。
另外,本发明的基于区块链的分布式存储方法、设备、计算机可读取的存储介质同样具有上述优点。
除了上面所描述的目的、特征和优点之外,本发明还有其它的目的、特征和优点。下面将参照图,对本发明作进一步详细的说明。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是现有的区块链文件系统的组成架构示意图。
图2是本发明优选实施例的基于区块链的分布式存储系统的网络架构示意图。
图3是本发明优选实施例中的基于区块链的分布式存储系统在用户进行读写操作时的数据处理过程示意图。
图4是本发明优选实施例中的基于区块链的分布式存储系统在用户进行查询操作时的数据处理过程示意图。
图5是本发明优选实施例中的基于区块链的分布式存储系统在用户进行修改操作时的数据处理过程示意图。
图6是本发明优选实施例中的基于区块链的分布式存储系统在用户进行删除操作时的数据处理过程示意图。
图7是本发明另一实施例的基于区块链的分布式存储方法的流程示意图。
具体实施方式
以下结合附图对本发明的实施例进行详细说明,但是本发明可以由下述所限定和覆盖的多种不同方式实施。
如图2所示,本发明的优选实施例提供一种基于区块链的分布式存储系统,包括:
用户端,用于供用户进行功能操作以产生一段数据流;
服务端,包括用于根据用户的功能操作请求对数据流进行相应处理的数据处理模块;
存储端,包括区块链文件系统和数据存储组件,所述区块链文件系统用于保存数据的地址和指纹,并记录数据的状态,所述数据存储组件用于存储数据;
API网关,用于对区块链文件系统和数据存储组件的API进行聚合,以供所述数据处理模块进行调用;
所述数据处理模块接收到数据流后根据用户的不同功能操作请求进行相应的数据处理,并调用对应的API分别与区块链文件系统和存储组件进行交互,将数据存储在数据存储组件中,将数据指纹和数据存储地址存储在区块链文件系统中,并根据交互结果向用户端做出响应。
可以理解,本实施例的基于区块链的分布式存储系统,用户进行功能操作产生数据后,数据处理模块根据用户的功能操作请求对数据流进行相应的处理,包括数据的序列化、数据指纹计算、数据指纹比对等,然后调用对应的API分别与区块链文件系统和存储组件进行交互,将数据存储在数据存储组件中,将数据指纹和数据存储地址存储在区块链文件系统中进行上链。通过将区块链文件系统与数据存储组件进行结合,利用区块链文件系统存储数据指纹和数据存储地址,利用数据存储组件存储数据,可以通过区块链文件系统中存储的数据指纹和数据存储地址对数据存储组件中存储的数据进行有效性验证,防止了数据存储组件中的数据被恶意篡改。并且,区块链文件系统只需要记录数据的指纹、地址和状态,减少了区块链系统的存储压力,提高了区块链的处理效率。另外,数据存储组件便于进行扩展,可以实现对各种复杂数据的存储支持,满足了多样化的存储需求,同时实现了整体存储的大容量。
可以理解,所述服务端还包括用于对数据流进行分发的反向代理模块,所述数据处理模块的数量为多个,所述反向代理模块可获取各个数据处理模块的工作状态,所述反向代理模块在接收到数据流后将其分发至空闲的数据处理模块。当同时有多个客户端同时产生数据流时,为了满足高并发的需求,所述反向代理模块可以获取每个数据处理模块的工作状态,并将多股数据流分发至各个空闲的数据处理模块,实现了前端的负载均衡,以满足高并发的业务场景。
可以理解,API是区块链文件系统与数据存储组件暴露出来的、方便对其使用的接口,所述API网关将这些接口聚合,以实现协议转换、请求路由、熔断降级、数据缓存、负载均衡等功能,然后统一暴露给服务端中的数据处理模块进行调用。数据处理模块会根据数据流(读、写请求)的不同,调用不同的API来与区块链文件系统和数据存储组件进行交互。
另外,所述区块链文件系统与数据存储组件都属于后台存储端的一部分,两者区别在于存储的内容不同,经过数据处理模块处理后的数据流最终都会发送至区块链文件系统和数据存储组件中进行存储。其中,所述区块链文件系统保存数据的地址和指纹并记录数据的状态,数据存储组件负责实际数据的存储、备份,它们会在进行了相应操作之后将结果反馈给数据处理模块,通过数据处理模块进行交互。
其中,区块链系统中的每个节点都完整或部分的拥有区块链文件系统,区块链文件系统具备三个功能,一是存储数据地址与数据指纹,二是存储数据的历史状态与修改记录,三是防止数据被恶意篡改。所述数据存储组件包括用于保存结构化数据的关系型数据库、用于保存半结构化数据的NOSQL数据库、用于保存具有高速读写需求的数据的高速缓存池、用于保存非结构化数据的去中心化分布式存储组件和用于保存以文件为最小单位的非结构化数据的中心化分布式存储组件中的至少一种,所述数据处理模块还用于根据数据类型或数据读写需求调用不同的API与不同的数据存储组件进行交互。可以理解,所述关系型数据库可以借助pgSQL等关系型数据库实现,以集群方式搭建;所述NOSQL数据库也采用集群的方式搭建;所述高速缓存池依靠Redis等缓存数据库实现,为了保证高速缓存池的性能,也采用集群的方式搭建;所述去中心化分布式存储组件用来保存音频、视频等非结构化数据,可以通过IPFS实现,则本发明的去中心化分布式存储组件作为依托区块链网络而存在的IPFS私有网络中的一个节点;所述中心化分布式存储组件通过HDFS实现,则本发明的中心化分布式存储组件作为依托区块链网络而存在的HDFS分布式存储系统中的一个节点。
本发明的基于区块链的分布式存储系统,可以允许不同类型的存储组件加入,可以对不同类型的数据存储提供良好的支持,进而为建立在分布式存储系统之上的应用开发提供了多样化的选择。同时,在后端可以根据数据类型或数据读写需求调用不同的API与不同的数据存储组件进行交互,实现了存储端的负载均衡,可以很好地满足高并发业务场景的需求。并且,存储端的一部分(数据存储组件)以集群的方式搭建,一部分(区块链文件系统)以P2P网络的形式组成,两者都拥有良好的可拓展性。以往的分布式存储系统的可拓展性受到硬件成本的极大限制,增加系统中服务器的数量要付出高昂成本,但是在云服务与容器技术发展成熟的今天,分布式存储系统的可拓展性被展现的淋漓尽致。对于一个部署在云端或者容器中的分布式存储系统而言,可以根据实际生产场景的需要,灵活的增加与减少服务器或者容器的数量,从而优化资源的分配。本发明的分布式存储系统还将节点失效作为一种常态,并采用多种有效的错误检测与故障恢复机制,一些节点的失效并不会造成数据的丢失,也不会影响系统整体的稳定性,这使得系统可以稳定、持续的对外提供服务,保证了系统的健壮与高容错。
可以理解,本发明的基于区块链的分布式存储系统,将区块链技术与其他存储系统的优秀特性结合在一起,形成一个新的分布式数据存储系统,最终搭建一个基于区块链的高性能可拓展分布式数据平台,为搭建在其上层的应用提供高可用的数据支持。该高性能可拓展分布式存储框架总体可分为四层:最底层的技术支持层为存储系统的实现提供各项技术支持;数据存储层负责具体数据的增删改查;数据处理层负责进行数据处理,以及同各数据存储组件交互;最上层的数据平台为应用提供多样的数据接口。数据平台要实现高可用、大容量、高效率、可拓展及强适应性,一是对高并发业务有很好的支持,二是要解决区块链存储容量低与处理效率低的问题,三是要保证存储系统的可拓展性与稳定性,四是要支持多样的应用开发。数据处理层作为高性能可拓展分布式存储的核心组件,数据处理模块首先实现了负载均衡,为数据平台的高可用提供保障,其次还负责进行数据处理,包括数据的序列化、计算数据指纹、组件交互等等。数据存储层由区块链文件系统与多个可选的、高性能的、可拓展的数据存储组件构成,它支持多种类型的数据存储,同时保证存储数据不被轻易篡改。技术支持层将Protocol Buffers、P2P网络、一致性哈希、Gossip、gRPC、Merkle-DAG等技术结合在一起,为各数据存储组件乃至整个存储系统的稳定运行提供支持。
具体地,如图3所示,当用户进行读写操作时,所述数据处理模块通过哈希函数对读写操作产生的数据进行指纹计算,并根据数据类型或数据读写需求将其存储至对应的数据存储组件中,该数据存储组件将存储地址发送给数据处理模块,所述数据处理模块将数据指纹和数据地址打包发送给区块链文件系统进行上链。
如图4所示,当用户进行查询操作时,通过用户端将数据索引和查询指令发送给数据处理模块,所述数据处理模块利用接收到的数据索引向区块链文件系统索要对应的数据指纹和数据地址,并根据获得的数据地址向对应的数据存储组件索要数据,所述数据存储组件将数据发送给数据处理模块,所述数据处理模块基于获得的数据利用哈希函数计算数据指纹,若计算得到的数据指纹与从区块链文件系统中获得的数据指纹一致,则证明数据没有被篡改,所述数据处理模块将获得的数据返回至用户端。
如图5所示,当用户进行修改操作时,通过用户端将数据索引和修改内容发送至数据处理模块,所述数据处理模块利用接收到的数据索引向区块链文件系统索要对应的数据指纹和数据地址,并根据获得的数据地址向对应的数据存储组件索要数据,所述数据存储组件将数据发送给数据处理模块,所述数据处理模块基于获得的数据利用哈希函数计算数据指纹,若计算得到的数据指纹与从区块链文件系统中获得的数据指纹一致,则证明数据没有被篡改,所述数据处理模块再根据接收的修改内容对获得的数据进行修改,并计算得到修改后数据的新数据指纹,并将修改后的数据存储到相应的数据存储组件,所述数据存储组件将新数据地址发送给数据处理模块,所述数据处理模块将新数据指纹和新数据地址打包发送至区块链文件系统进行上链。
如图6所示,当用户进行删除操作时,通过用户端将数据索引和删除指令发送至数据处理模块,所述数据处理模块利用接收到的数据索引向区块链文件系统索要对应的数据指纹和数据地址,并将删除指令发送给区块链文件系统,所述区块链文件系统对该数据指纹和数据地址进行删除,所述数据处理模块将获得的数据地址和删除指令发送给相应的数据存储组件,所述数据存储组件对数据进行删除。
可以理解,当用户需要对存储端存储的相关数据进行操作时,需要数据处理模块同时与区块链文件系统和数据存储组件进行交互,目的是为了将区块链文件系统中存储的信息与数据存储组件中存储的信息相关联,便于通过区块链文件系统中存储的信息对数据存储组件中存储的信息进行有效应验证,防止数据存储组件中存储的数据被恶意篡改。
可以理解,如图7所示,本发明的另一实施例还提供一种基于区块链的分布式存储方法,优选采用如上所述的基于区块链的分布式存储系统,该方法包括以下内容:
步骤S1:用户进行功能操作以产生一段数据流;
步骤S2:根据用户的功能操作请求对数据流进行相应处理,并调用对应的API分别与区块链文件系统和存储组件进行交互,将数据存储在数据存储组件中,将数据指纹和数据存储地址存储在区块链文件系统中;
步骤S3:根据交互结果向用户端做出响应。
可以理解,本实施例的基于区块链的分布式存储方法,用户进行功能操作产生数据后,数据处理模块根据用户的功能操作请求对数据流进行相应的处理,包括数据的序列化、数据指纹计算、数据指纹比对等,然后调用对应的API分别与区块链文件系统和存储组件进行交互,将数据存储在数据存储组件中,将数据指纹和数据存储地址存储在区块链文件系统中进行上链。通过将区块链文件系统与数据存储组件进行结合,利用区块链文件系统存储数据指纹和数据存储地址,利用数据存储组件存储数据,可以通过区块链文件系统中存储的数据指纹和数据存储地址对数据存储组件中存储的数据进行有效性验证,防止了数据存储组件中的数据被恶意篡改。并且,区块链文件系统只需要记录数据的指纹、地址和状态,减少了区块链系统的存储压力,提高了区块链的处理效率。另外,数据存储组件便于进行扩展,可以实现对各种复杂数据的存储支持,满足了多样化的存储需求,同时实现了整体存储的大容量。
其中,当用户进行读写操作时,所述数据处理模块通过哈希函数对读写操作产生的数据进行指纹计算,并根据数据类型或数据读写需求将其存储至对应的数据存储组件中,该数据存储组件将存储地址发送给数据处理模块,所述数据处理模块将数据指纹和数据地址打包发送给区块链文件系统进行上链。
当用户进行查询操作时,通过用户端将数据索引和查询指令发送给数据处理模块,所述数据处理模块利用接收到的数据索引向区块链文件系统索要对应的数据指纹和数据地址,并根据获得的数据地址向对应的数据存储组件索要数据,所述数据存储组件将数据发送给数据处理模块,所述数据处理模块基于获得的数据利用哈希函数计算数据指纹,若计算得到的数据指纹与从区块链文件系统中获得的数据指纹一致,则证明数据没有被篡改,所述数据处理模块将获得的数据返回至用户端。
当用户进行修改操作时,通过用户端将数据索引和修改内容发送至数据处理模块,所述数据处理模块利用接收到的数据索引向区块链文件系统索要对应的数据指纹和数据地址,并根据获得的数据地址向对应的数据存储组件索要数据,所述数据存储组件将数据发送给数据处理模块,所述数据处理模块基于获得的数据利用哈希函数计算数据指纹,若计算得到的数据指纹与从区块链文件系统中获得的数据指纹一致,则证明数据没有被篡改,所述数据处理模块再根据接收的修改内容对获得的数据进行修改,并计算得到修改后数据的新数据指纹,并将修改后的数据存储到相应的数据存储组件,所述数据存储组件将新数据地址发送给数据处理模块,所述数据处理模块将新数据指纹和新数据地址打包发送至区块链文件系统进行上链。
当用户进行删除操作时,通过用户端将数据索引和删除指令发送至数据处理模块,所述数据处理模块利用接收到的数据索引向区块链文件系统索要对应的数据指纹和数据地址,并将删除指令发送给区块链文件系统,所述区块链文件系统对该数据指纹和数据地址进行删除,所述数据处理模块将获得的数据地址和删除指令发送给相应的数据存储组件,所述数据存储组件对数据进行删除。
另外,本发明的另一实施例还提供一种设备,包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器通过调用所述存储器中存储的所述计算机程序,用于执行如上所述的方法的步骤。
另外,本发明的另一实施例还提供一种计算机可读取的存储介质,用于存储基于区块链进行分布式存储的计算机程序,该计算机程序在计算机上运行时执行如上所述的方法的步骤。
一般计算机可读取介质的形式包括:软盘(floppy disk)、可挠性盘片(flexibledisk)、硬盘、磁带、任何其与的磁性介质、CD-ROM、任何其余的光学介质、打孔卡片(punchcards)、纸带(paper tape)、任何其余的带有洞的图案的物理介质、随机存取存储器(RAM)、可编程只读存储器(PROM)、可抹除可编程只读存储器(EPROM)、快闪可抹除可编程只读存储器(FLASH-EPROM)、其余任何存储器芯片或卡匣、或任何其余可让计算机读取的介质。指令可进一步被一传输介质所传送或接收。传输介质这一术语可包含任何有形或无形的介质,其可用来存储、编码或承载用来给机器执行的指令,并且包含数字或模拟通信信号或其与促进上述指令的通信的无形介质。传输介质包含同轴电缆、铜线以及光纤,其包含了用来传输一计算机数据信号的总线的导线。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。