有效
一种面向分布式存储的高效DAG构建、遍历及导出方法和装置
黄山、周晓磊、严浩、王芳潇、范强、赵俊舟
中国人民解放军国防科技大学
摘要
本申请涉及一种面向分布式存储的高效DAG构建、遍历及导出方法和装置,所述方法采用一种流式、分层的并行处理架构,对于DAG中同一层级的多个子树,各子树的内部构建过程是相互独立的;DAG构建无需等待所有叶子节点都生成完毕后再进行上层构建,而是可以采用一种“边产生、边处理”的模式:一旦底层的节点累计到足以构成一个父节点的数量时,立即启动一个任务来构建这个父节点,并将其推送到更高一层的处理队列中。本方法打破其内在的串行依赖,以适应高吞吐、低延迟的应用需求,从而显著提高用户在上传、下载文件时的体验。
1.一种面向分布式存储的高效DAG构建方法,其特征在于,包括步骤:通过叶子节点生产者模块读取数据源,并将读取的数据源流式地转换为DAG的叶子节点,通过一个输出通道将叶子节点以数据流的形式进行分发;通过层级处理器从下层通道接收节点流,对节点流进行缓存、计数,当缓存的节点数量达到预设阈值时,则将缓存的节点合并为一个新的父节点,并将新的父节点推送到上层通道中;通过流程控制与级联模块将叶子节点生产者模块和多个层级处理器通过数据通道级联起来,将上一级模块的输出通道作为下一级模块的输入通道,从而实现从叶子节点到根节点的递归或迭代式合并,直至生成唯一的根节点。
2.一种面向分布式存储的高效DAG构建装置,其特征在于,包括:叶子节点生产者模块,用于读取数据源,并将读取的数据源流式地转换为DAG的叶子节点,通过一个输出通道将叶子节点以数据流的形式进行分发;层级处理器,用于从下层通道接收节点流,对节点流进行缓存、计数,当缓存的节点数量达到预设阈值时,则将缓存的节点合并为一个新的父节点,并将新的父节点推送到上层通道中;流程控制与级联模块,用于将所述叶子节点生产者模块和多个所述层级处理器通过数据通道级联起来,将上一级模块的输出通道作为下一级模块的输入通道,从而实现从叶子节点到根节点的递归或迭代式合并,直至生成唯一的根节点。
3.一种面向分布式存储的高效DAG遍历方法,其特征在于,所述方法用于对采用权利要求1所述的面向分布式存储的高效DAG构建方法构建的DAG进行遍历;包括步骤:步骤1:在并发预取器初始化时,启动一个由预设固定数量的后台工作协程组成的并发工作池;所述预取器是SlidingPrefetcher并发预取器;步骤2:从DAG根节点开始,在解析出每一个数据块的CID后,立即提交至预取器的内部任务队列中,从而触发其从IPFS网络中下载;步骤3:数据节点处理池中的每个工作协程从步骤2中的队列通道中获取一个CID,并调用预取器的同步机制进行等待,一旦预取器确认该CID对应的数据已下载至本地,协程立即从中解析并提取出原始的文件数据,并放入一个结果通道中;步骤4:从结果通道中按序消费数据块,并利用带缓冲的写入器将聚合后的数据高效地写入磁盘;通过步骤1至步骤4实现了数据块的CID查找、下载、解析和写入,每一个阶段都能处理不同的CID对应的数据块,使得节点解析逻辑和网络I/O预取在结构上完全分离,使DAG遍历结构具有流水线式运行性能。
4.根据权利要求3所述的面向分布式存储的高效DAG遍历方法,其特征在于,将所述面向分布式存储的高效DAG遍历方法应用于DAG下载过程中实现基于滑动预取和多阶段流水线的DAG并发下载遍历过程中得到CID节点池;其中,基于滑动预取和多阶段流水线的DAG并发下载的具体过程包括:采用所述面向分布式存储的高效DAG遍历方法获取CID节点池;并发工作池中每个协程从遍历阶段的任务队列获取一个CID,然后调用并发预取器的同步方法进行等待,直到并发预取器确认该CID对应的数据节点已下载并缓存完毕;当节点就绪时,协程便立即从中解析并提取出原始的文件数据,再将原始的文件数据放入一个结果通道中;从结果通道中消费数据模块,并利用一个带缓冲的写入器将在内存中的数据块聚合后按序写入磁盘。
5.一种面向分布式存储的高效DAG遍历装置,其特征在于,所述装置用于对采用权利要求1所述的面向分布式存储的高效DAG构建方法构建的DAG进行遍历;包括:CID查找模块,用于在并发预取器初始化时,启动一个由预设固定数量的后台工作协程组成的并发工作池;所述预取器是SlidingPrefetcher并发预取器;下载模块,用于从DAG根节点开始,在解析出每一个数据块的CID后,立即提交至预取器的内部任务队列中,从而触发其从IPFS网络中下载;解析模块,用于数据节点处理池中的每个工作协程从步骤2中的队列通道中获取一个CID,并调用预取器的同步机制进行等待,一旦预取器确认该CID对应的数据已下载至本地,协程立即从中解析并提取出原始的文件数据,并放入一个结果通道中;写入模块,用于从结果通道中按序消费数据块,并利用带缓冲的写入器将聚合后的数据高效地写入磁盘;通过CID查找模块、下载模块、解析模块和写入模块实现了数据块的CID查找、下载、解析和写入,每一个阶段都能处理不同的CID对应的数据块,使得节点解析逻辑和网络I/O预取在结构上完全分离,使DAG遍历结构具有流水线式运行性能。
6.一种面向分布式存储的高效DAG第一种导出方法,其特征在于,所述方法用于导出采用权利要求1所述的面向分布式存储的高效DAG构建方法构建的DAG;所述方法包括:利用IPFS数据访问架构的模块化特性,将高层的DAG遍历逻辑与底层的块存储访问逻辑相解耦;在不改变高层DAG遍历算法的前提下,当接收到仅元数据导出的指令时,在数据访问链路中,用一个自定义的元数据提取代理来替换标准的块存储读取组件;当元数据提取代理接收到一个针对特定CID的节点读取请求时,则选择性地读取构成元数据的信息,根据读取的信息在内存中动态的合成一个新的、轻量级占位节点,将所述占位节点返回至高层DAG遍历算法。
7.一种面向分布式存储的高效DAG第一种导出装置,其特征在于,所述装置用于导出采用权利要求1所述的面向分布式存储的高效DAG构建方法构建的DAG;所述第一种导出装置包括:元数据代理定义模块,用于利用IPFS数据访问架构的模块化特性,将高层的DAG遍历逻辑与底层的块存储访问逻辑相解耦;在不改变高层DAG遍历算法的前提下,当接收到仅元数据导出的指令时,在数据访问链路中,用一个自定义的元数据提取代理来替换标准的块存储读取组件;DAG导出模块,用于当元数据提取代理接收到一个针对特定CID的节点读取请求时,则选择性地读取构成元数据的信息,根据读取的信息在内存中动态的合成一个新的、轻量级占位节点,将所述占位节点返回至高层DAG遍历算法。
8.一种面向分布式存储的高效DAG第二种导出方法,其特征在于,所述方法用于导出采用权利要求1所述的面向分布式存储的高效DAG构建方法构建的DAG;所述方法包括:利用IPFS数据访问架构的模块化特性,将高层的DAG遍历逻辑与底层的块存储访问逻辑相解耦;采用改进的上层DAG遍历算法替换原有高层遍历算法,不改变底层的块存储读取机制;其中改进的上层DAG遍历算法中,当遍历器在处理一个节点时,调用GetNodeMetadata(CID)接口或GetLinks(CID)接口,仅从数据块中解析并返回节点的元数据,忽略文件本身的内容;节点的元数据至少包括链接和数据块大小。
9.一种面向分布式存储的高效DAG第三种导出方法,其特征在于,所述方法用于导出采用权利要求1所述的面向分布式存储的高效DAG构建方法构建的DAG;所述方法包括:利用IPFS数据访问架构的模块化特性,将高层的DAG遍历逻辑与底层的块存储访问逻辑相解耦;在不改变高层的DAG遍历逻辑与底层的块存储访问逻辑的情况下,在写入IPFS节点时预先为所有数据块建立一个独立的元数据索引库;当执行元数据优先的DGA导出时,将遍历器被配置为直接查询所述元数据索引库;其中元数据索引库至少包括数据块大小、链接列表。




