CN110830539B - 一种网络存储***及方法 - Google Patents
一种网络存储***及方法 Download PDFInfo
- Publication number
- CN110830539B CN110830539B CN201810919502.2A CN201810919502A CN110830539B CN 110830539 B CN110830539 B CN 110830539B CN 201810919502 A CN201810919502 A CN 201810919502A CN 110830539 B CN110830539 B CN 110830539B
- Authority
- CN
- China
- Prior art keywords
- mpt
- data
- node
- nodes
- network
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种网络存储***及方法。所公开的***包括用于进行一致性存储的中心服务器和客户服务器,其中:中心服务器用于存储全量网络数据,接收和执行用户对网络数据进行操作的第一数据访问操作指令,下发对客户服务器进行管理的客户服务器管理操作指令,接收和执行对中心服务器与客户服务器之间的通信链路进行维护的链路维护操作指令;客户服务器用于自动检查全量网络数据是否更新且一致性地存储全量网络数据的副本,接收和执行中心服务器管理操作指令,接收和执行用户对网络数据的副本进行查询的第二数据访问操作指令。所公开的技术方案使用带宽少,性能好,不会给中心机带来太大压力,可以支持数万级别到数十万级别的服务器。
Description
技术领域
本发明涉及计算机网络和分布式存储领域,尤其涉及一种网络存储***及方法。
背景技术
在用于提供诸如按需计算、内容缓存等特定形式的网络服务的服务器(例如,云服务器、CDN服务器)集群中,提供同一种服务的各个服务器节点为了向不同用户提供相同的服务数据,需要在各个不同的服务器上对数据(包括用户数据、软件配置数据、环境变量数据等)进行一致性存储(即,同步存储),以保证整个集群向不同用户提供完全相同的服务。另外,即使集群中的数据从不进行更新操作,当集群中的某个服务器在宕机或重装操作***之后重新上线时,也需要和线上其他服务器的数据保持一致。
现有技术通常采用图1所示的技术方案来保证不同服务器节点上的数据之间的一致性。
如图1所示,安装了ZooKeeper分布式服务软件(也可以采用etcd、consul等软件来代替ZooKeeper,在图1中未示出)的ZooKeeper服务器(Server)是服务器集群中的中心服务器,例如,(集中配置)管理员可以通过(集中配置管理)Web终端来修改配置目录(/Configuration)、以及配置目录下所包含的各种(配置)数据(Config Data)。例如,服务器集群中的多个客户服务器(Client)则可以监听(Watch)(配置)数据的更新,当监听到(配置)数据更新时,通过诸如C++、Java等语言开发的用于读取(配置)数据的接口来读取更新后的(配置)数据。
图1所示的现有技术方案存在以下缺点:
1)在集群中的服务器数量较少的情况下(例如,几百台至几千台),这些软件基本上能够满足对服务器进行数据一致性管理的要求。然而,当服务器数量达到上万台甚至数十万台时,因为集群中的所有客户服务器都要监听中心服务器的数据更新并从中心服务器获取更新后的数据,中心服务器的带宽决定了无法实时或低延迟地向所有客户服务器传输更新后的数据。
2)由于云服务器和CDN服务器分散在世界各地,且分属于数十个甚至是上百个不同的运营商,网络环境十分复杂,很多客户云服务器和客户CDN服务器无法连接到中心云服务器和中心CDN服务器进行低延迟的数据更新操作。另外,由于网络抖动等网络问题,也可能会导致由于丢失数据或者接收到错误数据而最终导致客户服务器更新后的数据与中心服务器的原始更新数据之间存在不一致的现象。
3)由于客户服务器自主监听,如果不进行更新反馈,那么中心服务器在修改数据之后,就无法确定集群中的某个客户服务器是否已经正确完成了相应的数据更新操作。另外,即使进行了更新反馈,与上述第2)项缺点类似,网络抖动等网络问题也会导致(反馈)数据错误,从而导致操作不符合预期。
为了解决上述问题,需要提出新的技术方案。
发明内容
根据本发明的网络存储***,包括用于进行一致性存储的中心服务器和客户服务器,其中:
中心服务器用于存储全量网络数据,接收和执行用户对网络数据进行操作的第一数据访问操作指令,下发对客户服务器进行管理的客户服务器管理操作指令,接收和执行对中心服务器与客户服务器之间的通信链路进行维护的链路维护操作指令;
客户服务器用于自动检查全量网络数据是否更新且一致性地存储全量网络数据的副本,接收和执行中心服务器管理操作指令,接收和执行用户对网络数据的副本进行查询的第二数据访问操作指令。
根据本发明的网络存储***,其中:
将中心服务器设置为度约束最小生成树DCMST算法中的DCMST根节点,基于度约束最小生成树DCMST算法构建中心服务器和客户服务器之间的数据传输路径。
根据本发明的网络存储***,通过以下步骤实现经由客户服务器自动检查全量网络数据是否更新:
经由客户服务器自动检查全量网络数据的副本的校验值与全量网络数据的校验值是否一致,校验值一致则表明客户服务器存储的全量网络数据的副本与全量网络数据一致,无需更新全量网络数据的副本,
其中,校验值包括hash值。
根据本发明的网络存储***,其全量网络数据采用key-value存储结构,基于以太坊默克尔压缩前缀树(MPT)定义中心服务器和客户服务器的key-value数据存储节点所对应的MPT节点的数据结构,其MPT节点的数据结构包括用于存储MPT节点索引值的第一变量、用于存储校验值的第二变量,其中心服务器和客户服务器中的每个服务器对应于以太坊默克尔压缩前缀树MPT的一个实例,从MPT根节点至MPT叶节点逐层从左至右依次比较以太坊默克尔压缩前缀树MPT的两个实例中的一一对应的两个MPT节点的校验值,当两个MPT节点的校验值一致时,表明与这两个MPT节点对应的两个服务器的两个对应key-value数据存储节点中的网络数据是一致的,无需比较这两个MPT节点的各级子MPT节点的校验值。
根据本发明的网络存储***,其客户服务器还用于执行以下操作:
网络数据变更回调操作;
与中心服务器进行定时心跳保活操作;
在与中心服务器重新建立连接之后,自动重新注册到中心服务器所在的集群。
根据本发明的网络存储***,其MPT节点的数据结构包括:MPT分支节点数据结构、MPT扩展节点数据结构、MPT叶子节点数据结构,
其中,MPT分支节点数据结构还包括,用于存储指向多个子节点的指针的第三变量、用于存储指向一个叶子子节点的指针或空指针的第四变量,
MPT扩展节点数据结构还包括,用于存储指向一个子节点的指针的第五变量、用于存储指向一个叶子子节点的指针或空指针的第四变量,
其中,网络数据按照key-value的形式进行存储,索引值是经压缩的key值。
根据本发明的网络存储方法,包括:
中心服务器存储全量网络数据,接收和执行用户对网络数据进行操作的第一数据访问操作指令,下发对客户服务器进行管理的客户服务器管理操作指令,接收和执行对中心服务器与客户服务器之间的通信链路进行维护的链路维护操作指令;
客户服务器自动检查全量网络数据是否更新且一致性地存储全量网络数据的副本,接收和执行中心服务器管理操作指令,接收和执行用户对网络数据的副本进行查询的第二数据访问操作指令。
根据本发明的网络存储方法,还包括:
将中心服务器设置为度约束最小生成树DCMST算法中的DCMST根节点,基于度约束最小生成树DCMST算法构建中心服务器和客户服务器之间的数据传输路径。
根据本发明的网络存储方法,通过以下步骤实现经由客户服务器自动检查全量网络数据是否更新:
客户服务器自动检查全量网络数据的副本的校验值与全量网络数据的校验值是否一致,校验值一致则表明客户服务器存储的全量网络数据的副本与全量网络数据一致,无需更新全量网络数据的副本,
其中,校验值包括hash值。
根据本发明的网络存储方法,其全量网络数据采用key-value存储结构,基于以太坊默克尔压缩前缀树MPT定义中心服务器和客户服务器的key-value数据存储节点所对应的MPT节点的数据结构,其MPT节点的数据结构包括用于存储MPT节点索引值的第一变量、用于存储校验值的第二变量,其中心服务器和客户服务器中的每个服务器对应于以太坊默克尔压缩前缀树MPT的一个实例,从MPT根节点至MPT叶节点逐层从左至右依次比较以太坊默克尔压缩前缀树MPT的两个实例中的一一对应的两个MPT节点的校验值,当两个MPT节点的校验值一致时,表明与这两个MPT节点对应的两个服务器的两个对应key-value数据存储节点中的网络数据是一致的,无需比较这两个MPT节点的各级子MPT节点的校验值。
根据本发明的网络存储方法,还包括:
客户服务器执行网络数据变更回调操作;
客户服务器与中心服务器进行定时心跳保活操作;
客户服务器在与中心服务器重新建立连接之后,自动重新注册到中心服务器所在的集群。
根据本发明的网络存储方法,其MPT节点的数据结构包括:MPT分支节点数据结构、MPT扩展节点数据结构、MPT叶子节点数据结构,
其中,MPT分支节点数据结构还包括,用于存储指向多个子节点的指针的第三变量、用于存储指向一个叶子子节点的指针或空指针的第四变量,
MPT扩展节点数据结构还包括,用于存储指向一个子节点的指针的第五变量、用于存储指向一个叶子子节点的指针或空指针的第四变量,
其中,网络数据按照key-value的形式进行存储,索引值是经压缩的key值。
根据本发明的上述技术方案,使用带宽少,性能好,不会给中心机带来太大压力,可以支持数万级别到数十万级别的服务器。
附图说明
并入到说明书中并且构成说明书的一部分的附图示出了本发明的实施例,并且与相关的文字描述一起用于解释本发明的原理。在这些附图中,类似的附图标记用于表示类似的要素。下面描述中的附图是本发明的一些实施例,而不是全部实施例。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,可以根据这些附图获得其他的附图。
图1示出了现有技术用于保证不同服务器节点上的数据之间的一致性的技术方案。
图2示例性地示出了根据本发明的网络存储***的示意图。
图3示例性地示出了根据本发明的网络存储方法的示意流程图。
图4示出了由现有网络拓扑图中的通信路由路径构建结构DCMST通信路由路径的示意图。
图5示例性地示出了根据本发明的上述技术方案可以使用的3种不同的MPT节点的数据结构的示意图。
图6示例性地示出了针对使用图5所示的MPT节点的MPT树进行查找操作的示意图。
图7示例性地示出了针对使用图5所示的MPT节点的MPT树进行***或更新操作的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
图2示例性地示出了根据本发明的网络存储***的示意图。
如图2所示,根据本发明的网络存储***,包括用于进行一致性存储的中心服务器(即,图2中的中心)和客户服务器(即,图2中的客户端),其中:
中心服务器用于存储全量网络数据,接收和执行用户对网络数据进行(例如,增删改查等)操作(例如,图2中的增删改k(key)v(value)数据)的第一数据访问操作指令,下发对客户服务器进行管理的客户服务器管理操作指令,接收和执行对中心服务器与客户服务器之间的通信链路进行维护的链路维护操作指令;
客户服务器用于自动检查全量网络数据是否更新(例如,图2中由diff所示的操作)且一致性地存储全量网络数据的副本(例如,图2中由mpt所示的操作),接收和执行中心服务器管理操作指令,接收和执行用户对网络数据的副本进行查询的第二数据访问操作指令。
可选地,可以将中心服务器设置为度约束最小生成树(DCMST)算法中的DCMST根节点,基于度约束最小生成树(DCMST)算法构建中心服务器和客户服务器之间的数据传输路径(即,图2中由以中心为根节点的最小生成树结构表示的网络连通结构)。
可选地,通过以下步骤实现经由客户服务器自动检查全量网络数据是否更新:
经由客户服务器自动检查全量网络数据的副本的校验值(例如,图2中的roothash,客户端也保存了对应的roothash值,在图2中未示出)与全量网络数据的校验值是否一致,校验值一致则表明客户服务器存储的全量网络数据的副本与全量网络数据一致,无需更新全量网络数据的副本,
其中,校验值包括hash值(即,图2中的roothash值)。
可选地,全量网络数据采用key-value存储结构,基于以太坊默克尔压缩前缀树(MPT)(即,图2所示的mpt)定义中心服务器和客户服务器的key-value数据存储节点所对应的MPT节点的数据结构,MPT节点的数据结构包括用于存储MPT节点索引值的第一变量、用于存储校验值的第二变量,中心服务器和客户服务器中的每个服务器对应于以太坊默克尔压缩前缀树(MPT)的一个实例,从MPT根节点至MPT叶节点逐层从左至右依次比较以太坊默克尔压缩前缀树(MPT)的两个实例中的一一对应的两个MPT节点的校验值,当两个MPT节点的校验值一致时,表明与这两个MPT节点对应的两个服务器的两个对应key-value数据存储节点中的网络数据是一致的,无需比较这两个MPT节点的各级子MPT节点的校验值。
可选地,客户服务器还用于执行以下操作:
网络数据变更回调操作;
与中心服务器进行定时心跳保活操作;
在与中心服务器重新建立连接之后,自动重新注册到中心服务器所在的集群。
其中,网络数据变更回调操作,是指当检测到数据变更(即,不一致)时,所需要执行的预先设置的操作。例如,可以把一组(一个或多个key)作为nginx(某软件)的配置的配置项的值,预先设定这些key变更后所需要执行的操作,把key和value生成nginx配置,然后通知nginx加载配置。
可选地,客户端(即,客户服务器)可以预设多个类似这样的操作,分别监听对应key的修改,当key修改的时候就会调用对应的动作。
例如,客户端可能因为网络状态变化,导致原有的连接断开。因此,客户服务器与中心服务器之间需要进行定时心跳保活操作。例如,当客户端会发现心跳数据无法发送到集群中(即,无法发送至中心服务器),便会重新建立连接,找到集群中能和其连接的其他客户端,重新加入集群,并通知中心服务器更新数据传输路径(即,更新DCMST),从而实现定时心跳保活操作。
即,数据传输路径是由集群节点间的连通性和连通延迟生成的DCMST,DCMST包含了全部节点和必要的数据传输路径。除非两个集群节点之间的网络不连通(即,至少一个节点是孤岛),必须等待这两个集群节点之间的网络恢复正常,否则,DCMST的定期更新操作就会经由传输路径达到各个集群节点,从而保证了集群节点和原先传输路径断开会自动重连,保证了传输路径的有效性。
可选地,MPT节点的数据结构包括:MPT分支节点数据结构、MPT扩展节点数据结构、MPT叶子节点数据结构,
其中,MPT分支节点数据结构还包括,用于存储指向多个子节点的指针的第三变量、用于存储指向一个叶子子节点的指针或空指针的第四变量,
MPT扩展节点数据结构还包括,用于存储指向一个子节点的指针的第五变量、用于存储指向一个叶子子节点的指针或空指针的第四变量,
其中,网络数据按照key-value的形式进行存储,索引值是经压缩的key值。
图3示例性地示出了根据本发明的网络存储方法的示意流程图。
如图3的实线框所示,根据本发明的网络存储方法,包括:
步骤S302:中心服务器存储全量网络数据,接收和执行用户对网络数据进行操作的第一数据访问操作指令,下发对客户服务器进行管理的客户服务器管理操作指令,接收和执行对中心服务器与客户服务器之间的通信链路进行维护的链路维护操作指令;
步骤S304:客户服务器自动检查全量网络数据是否更新且一致性地存储全量网络数据的副本,接收和执行中心服务器管理操作指令,接收和执行用户对网络数据的副本进行查询的第二数据访问操作指令。
可选地,如图3的虚线框所示,根据本发明的网络存储方法,还包括:
步骤S306:将中心服务器设置为度约束最小生成树(DCMST)算法中的DCMST根节点,基于度约束最小生成树(DCMST)算法构建中心服务器和客户服务器之间的数据传输路径。
例如,对应于步骤S306,可以基于度约束最小生成树算法,构建中心机器(即,上述中心服务器)到其他节点(即,客户服务器)的数据传输路径。
图4示出了由现有网络拓扑图中的通信路由路径构建结构DCMST通信路由路径的示意图。
如图4所示,图4左上角的附图中示出了包含6个服务器节点的现有网络拓扑图,两个服务器节点之间存在线段表示这两个服务器节点之间存在直连通信路由路径,两个服务器节点之间不存在线段表示两个服务器节点之间不直接互相连通,路径上的数值代表网络延迟。使用现有技术的DCMST算法,可以构建图4左下角的DCMST的树状路径。
例如,在集群初始化的时候中心收集各个节点相互之间的连通性的延迟时间,根据生成树算法生成图4左下角的附图中所示的经加粗显示的初始传输路径,当有新服务器加入的时候称为注册,新服务器与中心或其他已注册器通信,信息通过已有路径到达中心,中心分配给新服务器一个父节点,这样新机器就成功注册。当机器下架时通过父节点到中心的路径通知中心,把自己从父节点中剔除。
可选地,通过以下步骤实现经由客户服务器自动检查全量网络数据是否更新:
客户服务器自动检查全量网络数据的副本的校验值与全量网络数据的校验值是否一致,校验值一致则表明客户服务器存储的全量网络数据的副本与全量网络数据一致,无需更新全量网络数据的副本,
其中,校验值包括hash值。
可选地,全量网络数据采用key-value存储结构,基于以太坊默克尔压缩前缀树(MPT)定义中心服务器和客户服务器的key-value数据存储节点所对应的MPT节点的数据结构,MPT节点的数据结构包括用于存储MPT节点索引值的第一变量、用于存储校验值的第二变量,中心服务器和客户服务器中的每个服务器对应于以太坊默克尔压缩前缀树(MPT)的一个实例,从MPT根节点至MPT叶节点逐层从左至右依次比较以太坊默克尔压缩前缀树(MPT)的两个实例中的一一对应的两个MPT节点的校验值,当两个MPT节点的校验值一致时,表明与这两个MPT节点对应的两个服务器的两个对应key-value数据存储节点中的网络数据是一致的,无需比较这两个MPT节点的各级子MPT节点的校验值。
例如,可以对以太坊默克尔压缩前缀树(MPT)数据结构进行定制,通过生成数据对应的MPT对比来快速对比两台服务器中间的数据差异,以压缩前缀树的特性存储对键值(即,上述key-value对中的value值)进行编码后的hash值,数据节点(即,上述MPT节点)存储键值对应内容的hash值(即,上述校验值的一种形式),这样只要通过递归判断父节点的hash是否一致,就能判断出数据差异。
可选地,如图3的虚线框所示,根据本发明的网络存储方法,还包括:
步骤S308:客户服务器执行网络数据变更回调操作;
步骤S310:客户服务器与中心服务器进行定时心跳保活操作;
步骤S312:客户服务器在与中心服务器重新建立连接之后,自动重新注册到中心服务器所在的集群。
可选地,MPT节点的数据结构包括:MPT分支节点数据结构、MPT扩展节点数据结构、MPT叶子节点数据结构,
其中,MPT分支节点数据结构还包括,用于存储指向多个子节点的指针的第三变量、用于存储指向一个叶子子节点的指针或空指针的第四变量,
MPT扩展节点数据结构还包括,用于存储指向一个子节点的指针的第五变量、用于存储指向一个叶子子节点的指针或空指针的第四变量,
其中,网络数据按照key-value的形式进行存储,索引值是经压缩的key值。
例如,图5示例性地示出了根据本发明的上述技术方案可以使用的3种不同的MPT节点的数据结构的示意图。
由于现有技术中用于描述MPT节点的数据结构比较适合新增节点的操作,不适合频繁的对旧数值进行修改,所以本发明使用了经过改造的MPT节点数据结构,具体数据结构的定义如下:
1、分支节点(即,上述MPT分支节点数据结构):有三个属性(即,变量),第一个是一个childrens(包括上述第一变量和第三变量),存储分支的各个子节点的前缀字节(即,上述第一变量)和指向子节点的指针(即,上述第三变量);第二个value存储的是一个节点的指针,当分支节点本身刚好是其中一个路径上最后一个节点则value指向一个叶子节点,其他情况为空(即,上述第四变量);第三个值hash存储的是该节点所有子节点hash的和的hash值(即,上述第二变量)。
2、扩展节点(即,上述MPT扩展节点数据结构):有四个属性,第一个是key是压缩路径上的字节数组(即,上述第一变量),且该变量存储的索引值是经压缩的key值(例如,字符串值),如唯一的键值(例如,字符串值)nginx.conf、init.conf等;第二个是children存储指向子节点的指针(即,上述第五变量),另外二个属性value和hash(即,上述第四变量和第二变量)同分支节点一样。
3、叶子节点(即,上述MPT叶子节点数据结构):有两个属性,第一个是key(即,上述第一变量)代表压缩路径上的字节数组;如果是路径结尾则为空数组,第二个是hash(即,上述第二变量)代表代表本身的hash,也就是数据内容的hash值。
上述经过改造的MPT节点数据结构在结合本发明的上述技术方案进行使用时,具有以下优点:
1、不直接在分支节点和扩展节点存储数据内容hash,只有叶子节点存储hash,分支节点和扩展节点需要存储数值时指向一个存储数据的叶子节点。并在其增加了对比功能。
2、原有以太坊MPT使用HP编码(以太坊自定义编码),对初始key编码后的值作为key来存储,是为了安全性,但是这样不适合对比和查询数据,本发明的数据结构简化了这一部分,直接使用key的原始字符串值来生成MPT树。
3、原有以太坊MPT三个节点结构都有可能(如果有对应key)存储数据,使用一个简单的字符串变量,这样的话,当存储的结果需要新增字段的时候需要修改三个数据结构,而修改后的MPT数据全部存储在叶子节点,分支和扩展节点要存储数据时用一个特殊变量存储一个指向叶子节点的指针代表本身的数据,这样当在MPT存储更多数据时只要修改叶子节点就可以了。而且方便对比差异,对比得到的差异数据其实就是叶子节点的一个集合。
由于全量网络数据采用key-value存储结构,当全量网络数据的key-value存储结构或其中的某个文件发生改变时,中心服务器和客户服务器中的每个服务器会对应的更新各自的以太坊默克尔压缩前缀树(MPT)实例。例如,可以包括以下具体操作:
1、查找节点操作
图6示例性地示出了针对使用图5所示的MPT节点的MPT树进行查找操作的示意图。
如图6所示,该MPT树实例存储了三个键值和其数据hash值(abc,hash1),(abcef,hash2),(ccc,hash3),查找操作可以包括以下具体步骤:
a)若当前节点是分支节点,如果搜索路径为空,则返回value指向的节点的hash值。若搜索路径不为空,则利用搜索路径第一个字节,在hashmap中查找下个节点,并把搜索路径减去第一个字节。查找不到子节点则不存在。
b)若当前节点是扩展节点,则匹配前缀与扩展节点的key,如果一致,则搜索路径减去key前缀,如果此时的搜索路径为空,则返回value指向的节点的hash值。若搜索路径不为空,进入children节点,如果children为空则不存在。
c)若当前节点是叶子节点,如不为空且搜索路径与key匹配,返回本身的hash值,否则不存在。
以查找键值abcef的hash为例,搜索路径为abcef,首先遇到分支节点,查看childrens,存在a子节点,则搜索路径修改为bcef,此时遇到扩展节点,匹配bc,搜索路径修改为ef,进入子节点,最后是叶子节点,匹配key与ef相等返回hash值hash1。
2、***或更新操作
图7示例性地示出了针对使用图5所示的MPT节点的MPT树进行***或更新操作的示意图。
图7示出了图6中的MPT树实例***(cbb,hash4)数据之后的结果。***或更新可以包括以下具体步骤:
a)首先根据查找逻辑找出最长的路径。
b)如果搜索路径为空,分支节点和扩展节点则添加或更新value指向的叶子节点的hash值。不为空则根据后续步骤继续判断。
c)此时在分支节点则***一个子节点,key为搜索路径。
d)此时若处于扩展节点,如果前缀完全不一致则把扩展节点变成分支节点,并把原来children节点和value节点和新增节点根据第一个字节***到扩展分支的childrens中。
e)由低到高依次更新路径上相关的hash数据hash’2和top。
即,在***(cbb,hash4)时,可以执行以下具体操作:
查找最长路径c,此时搜索路径为bb,当前节点为扩展节点,则把扩展节点变成分支节点,并把原来children节点和新节点***childrens中,并更新路径上相关hash值。
3、删除操作
删除可以当成***的逆操作,可以包括以下具体步骤:
a)查找节点,不存在则返回。
b)若节点的父节点是分支节点,删除节点后,如果父分支节点的子节点只剩下一个则把父分支节点变成扩展节点。
c)若节点的父节点是扩展节点则把扩展节点变成子节点。
d)由低到高依次更新路径上相关的hash数据。
4、对比操作
对比操作可以包括以下具体步骤:
a)对比两棵树(即,树实例)root节点的hash值,如果一致则说明两棵树完全一致。
b)如果当前是叶子节点说明是不一致的两个叶子节点,记录到差异列表为变更。
c)否则根据当前节点的子路径(分支节点childrens包含的key值和指向节点的hash值,扩展节点的key和children指向节点的hash值)去另外一个树查找并标记查找路径,不存在则记录到差异列表为新增,存在并对比hash值,如果hash一致则说明子树一致,hash不一致则递归上述操作对比出全部差异。
d)遍历另外的一棵树,记录所有没有标记的子节点为删除。
为了使本领域技术人员更清楚地理解图3所示的根据本发明的网络存储方法,下面将结合一个具体实施例进行说明。
1、用户使用中心对外的接口新增(删除、或修改)某个键值key的数据value。
2、中心kv库存储该数据和编辑时间戳(timestamp)并更新默克尔压缩前缀树(MPT),得到索引和根节点hash(roothash)。
3、取出最小生成树属于自己的子节点,把key、value、时间戳和根节点hash数据发送给这些客户端。
4、客户端收到数据。
a)取出(如果有)原先key的时间戳,如果新的时间戳比它早说明这条数据是旧数据,丢弃。
b)否则,更新key的value和时间戳,并同样对自己的最小生成树的子节点发送这条数据。
c)更新本身的MPT,得到新的根节点hash,如果与数据的根节点hash一致则结束,否则说明当前数据中间因为网络或者机器上下架导致的数据差异,需要把自己的向周边节点查询根节点hash,如果查询到和根节点hash一致的节点,则把自己的MPT完整的发送给该节点。
d)其他客户端收到该客户端的MPT,进行对比操作,返回差异数据。
e)客户端收到差异数据,合并到自己的数据里,这时根节点hash是一致的。
f)回调注册的操作(代码,***命令或脚本),通过这样的方式达到配置生成或环境变量的修改。
g)原路返回自己当前的根节点hash到中心。
4、客户端内置定时器与父节点客户端心跳,当根节点hash不一致及时更新,心跳断开则重新注册。
5、中心记录收集所有节点的根节点hash,能及时发现故障的节点。
根据本发明的上述技术方案,具有以下优点:
1、进行树状的消息传播,使用带宽少,性能好(延迟小、实时性好),不会给中心机带来太大压力,可以支持数万级别到数十万级别的服务器。
2、根据节点之间的连通性生成的最小生成树的路径保证了数据可以到达一些无法直连中心机器的节点。客户端本身的心跳保证的网络波动断开后可以自动重新加入集群。从而避免了由于网络抖动等网络问题所导致的更新后的数据与原始更新数据不一致的问题。
3、通过客户端根节点hash来保障数据的一致性,当数据不一致客户端会与其他客户端通信至数据准确后才执行操作,保证了操作的正确性。从而避免了由于网络抖动等网络问题所导致的更新后的数据与原始更新数据不一致的问题。
例如,网络抖动等会让某些节点没有接收到部分更新指令,但是当这些节点重连进集群后因心跳会和其他节点交互或收到新的更新指令,这时会发现自己的MPT根节点的值与其他节点不一致,这时会给具有正确的根节点hash的MPT节点发送自己完整的MPT数据,其他节点收到这份数据后对比差异,把差异推送回这些节点,这些节点更新差异数据。外部代码要使用本机数据的情况,也需要判断使用时根节点的版本(即,根节点hash)是否符合预期,不然需要阻塞等待数据更新成最新。
上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、***、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例的技术方案的精神和范围。
Claims (12)
1.一种网络存储***,包括用于进行一致性存储的中心服务器和客户服务器,其特征在于:
所述中心服务器用于存储全量网络数据,接收和执行用户对网络数据进行操作的第一数据访问操作指令,下发对所述客户服务器进行管理的客户服务器管理操作指令,接收和执行对所述中心服务器与所述客户服务器之间的通信链路进行维护的链路维护操作指令;
所述客户服务器用于自动检查所述全量网络数据是否更新且一致性地存储所述全量网络数据的副本,接收和执行所述中心服务器管理操作指令,接收和执行用户对网络数据的副本进行查询的第二数据访问操作指令;
通过以下步骤实现经由所述客户服务器自动检查所述全量网络数据是否更新:
经由所述客户服务器自动检查所述全量网络数据的副本的校验值与所述全量网络数据的校验值是否一致,校验值一致则表明所述客户服务器存储的所述全量网络数据的副本与所述全量网络数据一致,无需更新所述全量网络数据的副本;
所述全量网络数据采用key-value存储结构,基于以太坊默克尔压缩前缀树MPT定义所述中心服务器和所述客户服务器的key-value数据存储节点所对应的MPT节点的数据结构;
所述MPT节点的数据结构包括:MPT分支节点数据结构、MPT扩展节点数据结构、MPT叶子节点数据结构;
所述MPT分支节点数据结构包括:用于存储MPT节点索引值的第一变量和用于存储指向多个子节点的指针的第三变量、用于存储指向一个叶子子节点的指针或空指针的第四变量、以及存储所述MPT节点所有子节点hash的和的hash值;
所述MPT扩展节点数据结构包括:所述第一变量、用于存储指向一个子节点的指针的第五变量、所述第四变量、以及所述存储所述MPT节点所有子节点hash的和的hash值;
所述MPT叶子节点数据结构包括:所述第一变量、以及数据内容的hash值。
2.如权利要求1所述的网络存储***,其特征在于:
将所述中心服务器设置为度约束最小生成树DCMST算法中的DCMST根节点,基于所述度约束最小生成树DCMST算法构建所述中心服务器和所述客户服务器之间的数据传输路径。
3.如权利要求1或2所述的网络存储***,其特征在于,所述校验值包括hash值。
4.如权利要求3所述的网络存储***,其特征在于,所述中心服务器和所述客户服务器中的每个服务器对应于以太坊默克尔压缩前缀树MPT的一个实例,从MPT根节点至MPT叶节点逐层从左至右依次比较以太坊默克尔压缩前缀树MPT的两个实例中的一一对应的两个MPT节点的校验值,当两个MPT节点的校验值一致时,表明与这两个MPT节点对应的两个服务器的两个对应key-value数据存储节点中的网络数据是一致的,无需比较这两个MPT节点的各级子MPT节点的校验值。
5.如权利要求1或2所述的网络存储***,其特征在于,所述客户服务器还用于执行以下操作:
网络数据变更回调操作;
与所述中心服务器进行定时心跳保活操作;
在与所述中心服务器重新建立连接之后,自动重新注册到所述中心服务器所在的集群。
6.如权利要求4所述的网络存储***,其特征在于,
其中,所述网络数据按照key-value的形式进行存储,所述索引值是经压缩的key值。
7.一种网络存储方法,其特征在于,包括:
中心服务器,用于存储全量网络数据,接收和执行用户对网络数据进行操作的第一数据访问操作指令,下发对客户服务器进行管理的客户服务器管理操作指令,接收和执行对所述中心服务器与所述客户服务器之间的通信链路进行维护的链路维护操作指令;
所述客户服务器,用于自动检查所述全量网络数据是否更新且一致性地存储所述全量网络数据的副本,接收和执行所述中心服务器管理操作指令,接收和执行用户对网络数据的副本进行查询的第二数据访问操作指令;
通过以下步骤实现经由所述客户服务器自动检查所述全量网络数据是否更新:
所述客户服务器自动检查所述全量网络数据的副本的校验值与所述全量网络数据的校验值是否一致,校验值一致则表明所述客户服务器存储的所述全量网络数据的副本与所述全量网络数据一致,无需更新所述全量网络数据的副本;
所述全量网络数据采用key-value存储结构,基于以太坊默克尔压缩前缀树MPT定义所述中心服务器和所述客户服务器的key-value数据存储节点所对应的MPT节点的数据结构;
所述MPT节点的数据结构包括:MPT分支节点数据结构、MPT扩展节点数据结构、MPT叶子节点数据结构;
所述MPT分支节点数据结构包括:用于存储MPT节点索引值的第一变量和用于存储指向多个子节点的指针的第三变量、用于存储指向一个叶子子节点的指针或空指针的第四变量、以及存储所述MPT节点所有子节点hash的和的hash值;
所述MPT扩展节点数据结构包括:所述第一变量、用于存储指向一个子节点的指针的第五变量、所述第四变量、以及所述存储所述MPT节点所有子节点hash的和的hash值;
所述MPT叶子节点数据结构包括:所述第一变量、以及数据内容的hash值。
8.如权利要求7所述的网络存储方法,其特征在于,还包括:
将中心服务器设置为度约束最小生成树DCMST算法中的DCMST根节点,基于所述度约束最小生成树DCMST算法构建所述中心服务器和客户服务器之间的数据传输路径。
9.如权利要求7或8所述的网络存储方法,其特征在于,
所述校验值包括hash值。
10.如权利要求9所述的网络存储方法,其特征在于,所述中心服务器和所述客户服务器中的每个服务器对应于以太坊默克尔压缩前缀树MPT的一个实例,从MPT根节点至MPT叶节点逐层从左至右依次比较以太坊默克尔压缩前缀树MPT的两个实例中的一一对应的两个MPT节点的校验值,当两个MPT节点的校验值一致时,表明与这两个MPT节点对应的两个服务器的两个对应key-value数据存储节点中的网络数据是一致的,无需比较这两个MPT节点的各级子MPT节点的校验值。
11.如权利要求7或8所述的网络存储方法,其特征在于,还包括:
所述客户服务器执行网络数据变更回调操作;
所述客户服务器与所述中心服务器进行定时心跳保活操作;
所述客户服务器在与所述中心服务器重新建立连接之后,自动重新注册到所述中心服务器所在的集群。
12.如权利要求10所述的网络存储方法,其特征在于,
其中,所述网络数据按照key-value的形式进行存储,所述索引值是经压缩的key值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810919502.2A CN110830539B (zh) | 2018-08-14 | 2018-08-14 | 一种网络存储***及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810919502.2A CN110830539B (zh) | 2018-08-14 | 2018-08-14 | 一种网络存储***及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110830539A CN110830539A (zh) | 2020-02-21 |
CN110830539B true CN110830539B (zh) | 2022-09-06 |
Family
ID=69547027
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810919502.2A Active CN110830539B (zh) | 2018-08-14 | 2018-08-14 | 一种网络存储***及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110830539B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111831694B (zh) * | 2020-06-23 | 2023-06-20 | 中国科学院软件研究所 | 一种反应式***的快速决策方法 |
CN111737269B (zh) * | 2020-08-26 | 2021-02-02 | 苏州浪潮智能科技有限公司 | 数据查询响应方法、装置及计算机可读存储介质 |
CN112383449B (zh) * | 2020-11-19 | 2022-07-22 | 广东沃科融合通讯有限公司 | 信息发送方法、装置、电子设备和存储介质 |
CN113094074B (zh) * | 2021-05-07 | 2024-03-19 | 聚好看科技股份有限公司 | 一种服务集群的更新方法及装置 |
CN115065642B (zh) * | 2022-08-18 | 2022-12-02 | 深圳华锐分布式技术股份有限公司 | 带宽限制下的代码表请求方法、装置、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102904949A (zh) * | 2012-10-08 | 2013-01-30 | 华中科技大学 | 一种基于副本的动态元数据集群*** |
CN103607405A (zh) * | 2013-11-27 | 2014-02-26 | 东北大学 | 一种面向云存储的密文搜索认证方法 |
CN107231394A (zh) * | 2016-03-25 | 2017-10-03 | 阿里巴巴集团控股有限公司 | 一种数据源地址分发树的构造方法和用于复制数据的方法 |
CN108039943A (zh) * | 2017-12-06 | 2018-05-15 | 清华大学深圳研究生院 | 一种可验证的加密搜索方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008250903A (ja) * | 2007-03-30 | 2008-10-16 | Toshiba Corp | ファイル更新装置、プログラム及び方法 |
KR101252787B1 (ko) * | 2011-12-06 | 2013-04-09 | 이청종 | 다수의 중계 서버를 갖는 보안관리 시스템 및 보안관리 방법 |
-
2018
- 2018-08-14 CN CN201810919502.2A patent/CN110830539B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102904949A (zh) * | 2012-10-08 | 2013-01-30 | 华中科技大学 | 一种基于副本的动态元数据集群*** |
CN103607405A (zh) * | 2013-11-27 | 2014-02-26 | 东北大学 | 一种面向云存储的密文搜索认证方法 |
CN107231394A (zh) * | 2016-03-25 | 2017-10-03 | 阿里巴巴集团控股有限公司 | 一种数据源地址分发树的构造方法和用于复制数据的方法 |
CN108039943A (zh) * | 2017-12-06 | 2018-05-15 | 清华大学深圳研究生院 | 一种可验证的加密搜索方法 |
Non-Patent Citations (1)
Title |
---|
基于代理重签名的云端数据完整性验证方案;杨小东等;《计算机工程》;20171018(第09期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110830539A (zh) | 2020-02-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110830539B (zh) | 一种网络存储***及方法 | |
CN110138588B (zh) | 配置文件自动化管理方法和***、配置管理平台和客户端 | |
US8826032B1 (en) | Systems and methods for network change discovery and host name resolution in storage network environments | |
CN112217656B (zh) | Sd-wan***中的网络设备的配置信息同步方法和装置 | |
US11663192B2 (en) | Identifying and resolving differences between datastores | |
US10956501B2 (en) | Network-wide, location-independent object identifiers for high-performance distributed graph databases | |
CN113360456B (zh) | 数据归档方法、装置、设备以及存储介质 | |
US11379419B2 (en) | Autonomous intelligent data pipeline comparator | |
US10972296B2 (en) | Messaging to enforce operation serialization for consistency of a distributed data structure | |
CN113986873A (zh) | 一种海量物联网数据模型化的处理、存储与共享方法 | |
CN105407117A (zh) | 分布式备份数据的方法、装置和*** | |
CN108694218A (zh) | 一种数据写入及读取的方法和装置 | |
CN109947411A (zh) | 分布式软件生成唯一id主键的方法 | |
CN106911769B (zh) | 云平台路由数据的处理方法和云平台的物理服务器 | |
CN112328702A (zh) | 数据同步方法及*** | |
CN102957546A (zh) | 配置处理方法、装置及*** | |
CN112804276B (zh) | 虚拟化宽带远程接入服务器及其控制方法、通信*** | |
KR100810877B1 (ko) | 분산 시스템에서의 데이터 미러링 복원 | |
CN114500289B (zh) | 控制平面恢复方法、装置、控制节点及存储介质 | |
CN113934742B (zh) | 数据更新方法、节点信息存储方法、电子设备及介质 | |
CN113032408A (zh) | 数据处理方法、***及设备 | |
CN114510529A (zh) | 数据同步方法、装置、计算机设备和存储介质 | |
CN112532660A (zh) | 一种数据同步的方法、装置和网络管理*** | |
US5893103A (en) | Method of reconstructing a managed information tree | |
CN109947451A (zh) | 一种集群应用文件更新方法、***、介质及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |