北斗链张蕾:区块链存储技术发展

前几日去北京,拜访了几位在IBM和SAP工作的大学同学,我想刺探这些国际大公司在区块链技术上的研发动向。我们聊到一个关键问题,就是区块链存储。


现在人们对区块链的最大渴望就是尽快出现落地的实际应用,或者是让更多的商业逻辑运行在区块链平台上,或者与其他主流的商业应用系统进行整合。目前区块链在技术层面面临的最大问题是存储,因为存储是商业系统稳定运行的基础,而区块链一开始着重与交易,在存储方面相对偏弱,跟数据库系统还无法抗衡。

很明显,未来越来越多的区块链应用并不与金融交易相关,这些区块链系统的目的是让任何类型的数据,包括结构化数据或文档格式,能够被分布式地收集、排序、时间序列化和归档。这些区块链的核心价值,是让所有参与者,在不依赖可信的中介机构的情况下,就能在“什么人在什么时候向区块链存储了什么信息”上,达成一致意见。例如,SAP最近发布了他们的区块链平台,就是针对广泛的供应链领域和非金融领域。

区块链存储的三种技术:

第一种区块链存储技术,也是使用区块链来存储数据最简单的办法是,将各种数据直接嵌入到交易中。

每一个区块链交易都会被一个或多个参与方进行加密签名,并且复制到各个节点,然后被区块链的共识算法排序并增加时间戳,最终以防篡改的方式永久地保存到区块链上。因此,这些嵌入到交易中的数据,也会同时被保存到区块链上,被每个节点单独存储,而且我们也知道是谁、在什么时候写到区块链的。区块链的用户可以在将来任何时候来检索这些数据。

在北斗链的代码中,提供了一种“数据流”类型的交易引擎,用来做数据的存储和检索。每一个流都有自己的“写”权限,只有授权的地址可以向流中写入数据。每个节点通过“订阅”的方式去读取这些流信息,如果一个节点订阅了某个流,它就可以实时地对流的内容进行索引,并且基于排序、时间戳、区块高度、发布者地址等参数快速检索这些流内容,类似传统的“key-value”格式的数据库系统。

隐私保护和扩展性问题

当我们把数据直接保存在区块链的交易上,我们将面临两个问题:隐私保护和扩展性。

隐私保护问题,在上述的流的方案中,每一个流的内容都能被区块链上任何一个节点订阅和检索到。对于很多区块链应用场景来说,我们会希望这些流信息只被一部分节点可以看到,其他节点只会帮助进行存储、排序、时间序列化或提供内容公证,但是不能读取流的内容。

隐私保护的问题相对容易解决,我们在把数据嵌入到交易之前进行加密就可以办到。每一段数据的加密的密钥可以通过链上或链外的机制,传递给授权接受流媒体的节点,其他没有获得密钥的节点,只能看到二进制乱码而不是信息本身的内容。

扩展性问题,就是一个比较难以解决的挑战了。我们假定一个区块链平台用来做数据存储,它基本的交易容量(TBS)是500笔/秒,每个交易存储一个小数据100bytes,加上交易本身的头部数据100bytes,一共是200bytes,那么区块链的整个网络吞吐量是100k/s(500 笔/秒 * 200bytes),换算成网络带宽约为1M,每个节点每年的存储量为3TB。还是可以接受的。

但是,如果我们存储一个A4大小的扫描的文档,至少是500KB,那么整个网络吞吐量将达到250m/s,换算成网络带宽要达到2G,按照大家普遍使用的阿里云的价格体系,每年的带宽费用可能需要200万左右人民币,这显然是一个节点无法承受的成本,更不要说每年还有8000T的新增数据的存储问题。

很显然,直接在区块链上进行大数据存储是不切实际的。那么我们如何利用区块链的去中心化机制,又不需要在节点之间进行数据复制呢?一个聪明的做法是“链外存储”,然后把存储地址存放到区块链上。

第二种区块链存储技术 — 哈希(HASH)方案。这种方案对要存储的信息通过哈希函数运算,生成摘要。将这个摘要存储到区块链交易中,而信息本身则存储在区块链之外(或者叫off-chain),比如传统的中心化的数据库中,以此来解决存储扩展性问题。

区块链的参与者不能从摘要得到存储的数据,而是从链外获得数据后,通过摘要进行验证。摘要的时间戳和所有者也可以认定为链外数据的时间戳和所有者。因此链外存储跟链上存储一样,都可以获得区块链提供的数据公证。

数据传输问题。

下面我们谈另一个区块链存储面临的问题,就是数据传输问题。如果数据保存在链外,我们不通过区块链的的传输,如何把数据推送到需要它的节点呢?上面我们提出了一个解决方案,就是建立一个中心化的数据库系统。各个节点得到数据的摘要后,主动去数据库上读取数据。这种方案,要求这个数据库系统必须是可信系统,而且这种中心化的架构也违背了区块链去中心化的思想,因为如果数据库出现故障,或者网络问题,或者人为的数据删除,那么区块链节点是获取不到数据的。

另外一种更合理的解决方案是点对点通信,任何一个需求数据的节点直接从原始的发布节点获取链外数据。但是这样也会遇到问题:

1)必须有一个map,来映射每个节点上保存了哪些数据,这样才能让其他节点去请求数据;

2)如果原始的发布节点离开了区块链网络,或者临时性的不能提供服务,那么节点上的数据就不能被其他节点访问;

3)如果同时有多个节点都需要向原始发行节点请求数据,必然会造成网络堵塞和长时间的延迟。

为了解决这些问题,我们有必要引入分布式的数据传输机制。

第三种区块链存储技术:点对点(分布式)数据存储和传输。节点应该能够检索它们需要的数据,而不依赖一个单独的系统- 既不是一个数据库系统,也不是一个原始节点。任何人都不需要信任一个数据源,因为区块链的哈希函数可以保证数据没有被修改,如果有恶意的节点给我发送虚假的数据,我可以很容易识别,并把它们抛弃,然后再向其他节点请求数据。

如果你对P2P文件传输协议比较熟悉的话,比如Napster或BitTorrent,这种机制是非常接近的,只不过区块链增加了新的功能,比如去中心化排序、时间戳、信息公证,使得所有用户都能够对什么时间、什么人、发生了什么达成共识。

那么技术上如何实现这种点对点的数据存储和传输呢?我们可以选择现成的p2p文件传输平台,比如最近热门的IPFS平台,将它和区块链平台组合使用。一个节点上同时部署区块链系统和IPFS系统,可能还需要开发中间件系统来协调两者的工作。当我们需要在区块链上传输链外数据的时候,中间件把原始数据保存在IPFS系统中,然后构建一个区块链交易保存数据的哈希值。当需要检索数据时,中间件从区块链上获取哈希值,用哈希值去IPFS系统中获取内容,IPFS节点根据哈希值验证检索的内容,以确保没有被修改过。

这种解决方案理论上是可行的,但是实际上是非常笨拙的:首先,每个节点都要部署、运行、维护三套系统(区块链系统、IPFS系统和中间件系统),每个系统都有独立的存储空间。第二,将有两个独立的P2P网络(区块链是一个P2P网络,IPFS也是一个P2P网络),每个网络都有自己的配置文件、网络端口、用户系统已经身份认证。IPFS系统迟迟无法上线他们的区块链主网,也说明了将两个系统整合在一起的难度是很大的。

北斗链与IPFS的结合

为了研究区块链的存储技术,尽快达到商用价值,北斗链-IPFS实验室在今年9月份就成立了,研究的出发点,是把IPFS协议在北斗链底层代码中重新实现一下,让北斗链在传统链上存储的基础上,实现链外数据的P2P存储和传输。我们希望在今年年底,也就是赶在IPFS官方区块链主网上线之前(Filecoin可以挖币之前),新版本的北斗链将无缝整合链外数据存储方案,有可能抢先发行北斗链的文件传输币。

同时,我们也在研究区块链存储的C端产品,到时候能够给大家提供一个数据永远不会丢失、永远不会被篡改的存储平台。

.

.

.

Tagged with:

发表评论