Categorygithub.com/cxio/depots
repositorypackage
0.0.0-20250124103918-177b064a993d
Repository: https://github.com/cxio/depots.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

数据驿站服务(depots)

前言

在传统的P2P网络里,相同应用的节点间相互连接,交互彼此需要或拥有的数据,不同应用之间是隔离的,即便操作的是同一份数据。

数据驿站服务试图在不同的应用系统之间抽象出统一的接口,专门操作数据本身,最大限度地剥离应用的负载,同时也提高效率。实际上,这样的数据服务可以成为P2P网络的通用数据层,如果把网络比喻为一台计算机,这一数据层就类似于文件系统。

数据驿站只是一个内嵌微服务的「壳」,它管理数据在全网的交互流通和暂存,内部的微服务则实际操作数据(archives、blockqs)。基本上,这可以理解为一个内含数据仓库的数据中转站,数据是变动的:增加、减少、暂存、或某种特别处理等。

数据驿站之间相互连接组成P2P网络,构造出一个自由交互的数据流动层。数据的存储是开放式的。

开放式存储

数据的紧缺性感知机制

P2P网络节点对数据的请求是通过广播查询,没有目标数据的节点会转播请求,拥有数据的节点则回应而不再转播。如果设计请求每转播一次就跳数加一,则通过跳数的大小,节点就可以感知请求广播的距离。距离越远说明数据越紧缺,这可以促使节点补充存储紧缺的数据。

驿站之间的这种协作存储,通常会拥有较大的冗余度,但无法100%保证数据的完备性,如果一些数据请求很少,则可能在较长的时间段内慢慢消失。因此,我们需要设计一种措施来保证数据请求的全面性。

数据心跳

自然的紧缺性感知并不完全可靠。有些数据的用户很少或使用率极低,这些数据的请求就会很少,它们可能被慢慢遗忘、清理、最后丢失。

数据心跳就是执行全面性探知的一种机制,它由某种公益节点对稀有的数据发出一种探查请求。探查不是请求数据本身,它包含了一个标记说明只是数据查询,拥有数据的节点无需回应,没有数据的节点正常转播。于是这些稀有数据的紧缺性就可以被察觉到了。

数据索引(ID)都已存在于区块链上,所以探查节点按索引间断发出探测请求即可。这些探测节点被称为心跳节点,理论上应该在地理位置上均衡分布,不需要太多。

数据ID与服务标识

数据ID是数据的哈希摘要,用于唯一地标识一个数据,但事实上,请求标识可以不止是数据ID,它还可以是服务ID,客户机查询该标识建立联系获得服务,这在外观上与数据ID没有区别。

传统的客户机/服务器网络通过域名寻址查找服务,而这里则是以随机的ID标识,通过P2P网络查询服务。显然,这更隐秘、灵活,甚至更有扩展性。

数据站群

数据驿站不必是一个实体,如果有多个服务节点声明同一个收益地址,实际上就创建出一个虚拟的数据站群了。声明共同的收益地址可以使该地址在更广的范围内被认可,从而提升兑奖比例(确认数)。

开放评估

如果创建了数据站群,其管理者需要评估成员节点的服务效率,为分发奖励提供依据。但因为数据服务是端对端的,服务节点直接给请求者提供数据,所以嵌入第三方的管理会是一个问题。

这里提供一个简单的思路:开放式评估

协议补充

数据服务节点在提供数据的同时,需要向对方公布自己的收益地址,以此来接收区块链的代币奖励。这里,我们增加一个可选的字段:身份ID。用途是服务节点在站群中标注自己,以便站群管理者向自己发放收益。

身份ID可能由管理者发放,进行中心化管理。也可以是开放的自由加入的模式(去中心化),由用户提供一个自己的收款地址(身份ID)即可。

第三方的区块链应用(或其它支持奖励的普通应用)只会评估收益地址本身,考评地址关联的服务器服务怎么样。身份ID在这里会被简单忽略,它只对数据站群的管理者有意义。

匿名探测

如果采用非中心化的开放式合作,则很难实施管理。

这里,我们采用匿名探测的方式来评估加入节点的工作质量:管理者像普通客户一样向网络请求数据,如果对方公布的收益地址与本群相同,即为站群成员,此时记录其身份ID,并对其服务进行测试评估。

探测是匿名的,难以作弊,因为对方不知道何时是管理者在探测,以提供良好的服务来博取好感。

开放性

数据站群的收益地址通常是公开的,这样方便吸引离散的自由节点加入。

如果收益地址公开,如果你愿意,通过匿名探测的方式,实际上你可以探测出任何一个站群的成员有哪些。也因此,你甚至可能去评估一个数据站群的奖励分配的状况。

随机缓存

敏感的数据可能被屏蔽,小众的数据可能遗失。

所以从全网整体存储的合理分布上看,数据节点的缓存数据应当是碎片化离散和随机的才好。

随机的数据还可以增强数据完整源的隐匿性,因为如果某数据触手可及到处都是,攻击者就难以追溯它的最初来源(从而实施攻击)。

其它数据

本数据网络是区块链的公共服务系统,用于分离区块链的数据存储,其索引是交易ID或交易中的附件ID。

但是,如果有市场需求,实际上也可以存储其它任意类型的数据,只要有服务器节点愿意存储它们即可。数据在存储和请求中并不会被核验是否属于某个区块链,这种检查既浪费资源也无必要。

注: 区块链就像数据的全网索引,公益的数据心跳节点是一种优势。