CN115495056B - 分布式图计算系统和方法 - Google Patents

分布式图计算系统和方法 Download PDF

Info

Publication number
CN115495056B
CN115495056B CN202211460286.2A CN202211460286A CN115495056B CN 115495056 B CN115495056 B CN 115495056B CN 202211460286 A CN202211460286 A CN 202211460286A CN 115495056 B CN115495056 B CN 115495056B
Authority
CN
China
Prior art keywords
vertex
graph
state information
specified
current
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
Application number
CN202211460286.2A
Other languages
English (en)
Other versions
CN115495056A (zh
Inventor
李雪
孟轲
赖龙彬
于文渊
钱正平
周靖人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba China Co Ltd
Original Assignee
Alibaba China Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba China Co Ltd filed Critical Alibaba China Co Ltd
Priority to CN202211460286.2A priority Critical patent/CN115495056B/zh
Publication of CN115495056A publication Critical patent/CN115495056A/zh
Application granted granted Critical
Publication of CN115495056B publication Critical patent/CN115495056B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供一种分布式图计算系统和方法。本申请的系统提供用于实现图计算任务/图算法的算子,支持自定义进行图计算的顶点集和传输消息的边集,支持对任意顶点集合进行更新以及跨邻居范围的消息传输;通过组合算子可以灵活地实现任意控制流,支持多阶段的图计算任务/图算法,具有更加强大的表达能力,提供了简单灵活、方便易用的算子,降低编程难度;并且,通过代码生成器将控制流信息转换为基于中间件的可执行代码,并利用中间件在分布式运行时上执行可执行代码实现图计算,利用中间件实现分布式环境下图数据中顶点状态的计算更新和数据同步,从而实现分布式环境下的图计算系统,提高了分布式图计算系统的性能。

Description

分布式图计算系统和方法
技术领域
本申请涉及计算机技术,尤其涉及一种分布式图计算系统和方法。
背景技术
图算法是社交网络分析、数据挖掘、网络路由和科学计算等各种现实应用程序的基础。随着图数据越来越庞大,迫切需要在分布式环境中实现图算法,出现了许多分布式图计算系统。
传统的分布式图计算系统通常只关注少数特定类型的图算法,如广度优先搜索、PageRank、最短路径等。随着应用场景的不断丰富,各种复杂、多样的图算法已经被广泛使用,涉及的类型包括聚类、中心性、遍历、子图匹配、图挖掘等。但是,大量图算法在现有分布式图计算系统中面临无法表达、执行效率低或编程难度高的问题。
发明内容
本申请提供一种分布式图计算系统和方法,用以解决大量图算法在现有分布式图计算系统中面临无法表达、执行效率低或编程难度高的问题。
一方面,本申请提供一种分布式图计算系统,包括:
算子库,提供用于实现图计算任务的控制流的算子;
代码生成器,将使用所述算子库中至少一个算子实现的控制流信息,转换为基于中间件的可执行代码;
中间件,用于根据图计算任务的图数据、进行图计算的指定顶点集、用于传输消息的指定边集,在运行有所述中间件的分布式运行时上执行所述可执行代码,执行所述图计算任务,更新所述指定顶点集中顶点的状态信息,得到更新后的图数据;
图处理组件,用于根据更新后的图数据中顶点的状态信息,输出所述图计算任务的执行结果。
另一方面,本申请提供一种分布式图计算方法,包括:
获取图计算任务的图数据、进行图计算的指定顶点集、用于传输消息的指定边集、以及使用图计算的算子实现的控制流信息;
将所述控制流信息转换为基于中间件的可执行代码;
在运行有所述中间件的分布式运行时上执行所述可执行代码,根据所述图数据、指定顶点集和指定边集,执行图计算任务,以更新所述指定顶点集中顶点的状态信息,得到更新后的图数据;
根据更新后的图数据中顶点的状态信息,输出所述图计算任务的执行结果。
另一方面,本申请提供一种分布式图计算系统,包括:
云侧设备,用于向端侧设备提供算子库,所述算子库包括用于图计算的算子,所述算子允许用户指定进行图计算的顶点集和用于传输消息的边集;
端侧设备,用于图计算任务的图数据、进行图计算的指定顶点集、用于传输消息的指定边集、以及使用图计算的算子实现的控制流信息,将所述图数据、指定顶点集、指定边集和所述控制流信息,发送至所述云侧设备;
所述云侧设备用于将所述控制流信息转换为基于中间件的可执行代码;在运行有所述中间件的分布式运行时上执行所述可执行代码,根据所述图数据、指定顶点集和指定边集,执行图计算任务,以更新所述指定顶点集中顶点的状态信息,得到更新后的图数据;根据更新后的图数据中顶点的状态信息,输出所述图计算任务的执行结果;
所述云侧设备,还用于将图计算任务的执行结果输出至所述端侧设备。
本申请提供的分布式图计算系统和方法,提供用于编程实现图计算任务/图算法的算子,这些算子中支持自定义进行图计算的顶点集和传输消息的边集,支持对任意顶点集合进行更新以及跨邻居范围的消息传输;通过实现算子中的接口函数,组合算子可以灵活地实现任意控制流,可以实现多阶段的图计算任务/图算法,具有更加强大的表达能力,提供了简单灵活、方便易用的算子,降低编程难度;并且,通过代码生成器将控制流信息转换为基于中间件的可执行代码,通过该中间件在分布式运行时上执行可执行代码,以通过指定边集传递消息,并更新图数据中共指定顶点集中顶点的状态信息,利用中间件实现了分布式环境下图数据中顶点状态的计算更新和数据同步,实现了分布式环境下的图计算系统,提高了分布式图计算系统的性能。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请实施例提供的一种示例系统架构示意图;
图2为本申请一示例性实施例提供的分布式图计算系统的架构图;
图3为本申请一示例性实施例提供的分布式图计算系统的框架图;
图4为本申请一示例性实施例提供的分布式图计算方法的流程图;
图5为本申请一示例实施例提供的分布式图计算系统的架构图;
图6为本申请实施例提供的一种云服务器的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
首先对本申请所涉及的名词进行解释:
图(Graph):是由顶点和边构成的抽象数据结构。本实施例中,图可以表示为G =(V;E),其中V表示顶点集,包含有限个顶点。每个顶点v∈V都有一个唯一的标识符(如id)和一些相关的属性。 E⊆V×V表示一组有向边。对于每条边(s,d),第一个顶点s是它的源顶点,第二个顶点d是它的目标顶点。图中的顶点数用|V|表示,边数用|E|表示。用G=(V;E;w)表示加权图,其中w是一个将边映射为实值(real value)的函数,因此每条边与权重相关联。
图计算(Graph Processing):对图数据进行分析计算,以获得具有价值的信息。
图算法:图算法以图G为输入,对其进行处理和分析计算,以解决实际问题。本实施例中,正如大多数方案中假设的那样,图算法更新存储在图G的顶点中的信息,而边则被视为不可变的对象。通常,图算法沿边(图G的原始边或在执行图计算期间动态生成的虚拟边)迭代传播更新,直到满足收敛条件或完成给定的迭代次数。其中,正在进行更新的顶点称为活动顶点(或边界),活动顶点的传出边称为活动边。
图计算框架/系统(Graph Processing Framework/System):专门用于进行图计算的编程框架/系统。
超级步(SuperStep):也称为超级步骤、超步。遵循批量同步并行(BulkSynchronous Parallel,简称BSP)计算范式的算法/模型由一系列超级步组成。各个超级步间同步执行。
算子:是实现一定计算逻辑的单元,实现了上层接口的计算逻辑。
目前的分布式图计算框架有Pregel、Giraph、GraphLab、PowerGraph、GraphX、Gemini等,这些图计算框架仅通过少数在计算模式上类似的特定图算法进行评估。但在真实应用程序所需的多样性和可用性方面,这种评估远远不够。为了全面评估分布式图计算框架,可以通过如下三个指标:表达能力、生产效率和执行效率。
其中,表达能力:表示框架提供的编程接口表达不同类型图算法的能力,是在实践中支持各种图应用程序所需满足的度量。
生产效率:显示了使用的便利性或用户实现图算法的编程难度,编程难度高会使图计算将成为少数专业人士的特权。
执行效率:是执行图算法的性能因素。在大规模图上的实际应用程序通常耗时和/或占用大量内存。
传统的分布式图计算系统,为了追求生产效率,如Pregel,提出了一种称为“像顶点一样思考”(或以顶点为中心)的抽象,并在许多现有的图计算框架中应用。图算法的以顶点为中心的实现遵循一种常见的迭代、单阶段和基于值传播(简称ISVP)的模式:算法迭代运行,直到收敛为止,在每次迭代中,所有顶点都从其邻居处接收消息以更新其自己的状态,然后将更新后的状态作为消息发送给邻居,供下一次迭代使用。由于顶点中心模型的生产效率较高,许多图形框架都遵循其抽象理念。这种高级抽象在一定程度上为用户带来了生产效率,但牺牲了表达能力和执行效率。
关于表达能力,在研究了代表性的分布式图算法后,灵活的控制流、顶点集运算和超越邻居消息传输,对于在分布式环境中高效地编程至关重要。现有的图计算框架都无法满足这些需求。例如,Pregel不提供灵活的控制流、顶点集运算,而GAS无法支持所有这三个要求。Ligra无法满足超越邻居消息传输,此外,它是基于共享内存体系结构构建的,因此不适合在分布式环境中对图算法进行编程。
因此,传统的分布式图计算系统,存在表达能力差、执行效率低或编程难度高的问题。
基于此,本申请中提供了一种新的分布式图计算方法和系统,在表达能力、执行效率和编程程度(生产效率)均较优异。
在介绍本申请提供的技术方案之前,下面首先对本申请技术方案的系统架构进行详细说明。
图1为本申请实施例提供的一种示例系统架构示意图。如图1所示,该系统架构包括:云侧设备和端侧设备,云侧设备通过端云链路与端侧设备通信连接。
本实施例中,云侧设备是分布式集群,可以基于分布式云架构实现。云侧设备上部署有分布式图计算系统,用于提供分布式图计算的服务。该分布式图计算系统提供用于编程实现图计算任务/图算法的算子,这些算子中的进行图计算的顶点集和传输消息的边集支持用户自定义。通过实现算子中的接口函数,组合算子来可以实现任意图计算任务/图算法的控制流。分布式计算系统还包括代码生成器和中间件,通过代码生成器将用户通过组合算子实现的图计算任务/图算法的控制流信息转换为基于中间件的可执行代码。中间件用于实现分布式环境下图计算中顶点状态的计算更新和数据同步,通过该中间件在分布式运行时上执行代码生成器生成的可执行代码,执行图计算任务,通过指定边集传递消息,更新图数据中共指定顶点集中顶点的状态信息。分布式计算系统还包括图处理组件,用于根据更新后的图数据,输出图计算任务的执行结果。
端侧设备可以是需使用图计算能力实现图计算任务的用户端设备,可以是各类平台的云服务器、本地设备、客户端设备、物联网设备等。如,可以是电子商务、社交网络、智能交通等平台的服务器,也可以是具有网络路由功能的设备等等。不同的端侧设备可以有不同应用领域/场景,可以具有不同的图计算需求。
基于图1所示的系统架构的第一种使用场景中,用户可以通过端侧设备查看分布式图计算系统提供算子的相关信息,包括算子中可由用户自行编程实现的接口函数,接口函数的默认处理逻辑,算子可由用户指定的顶点集、边集,算子的使用方法等。基于这些相关信息,用户可以自定义算子中接口函数的处理逻辑,并通过组合算子来实现当前图计算任务的控制流。用户还可以指定执行图计算任务时对哪些顶点(指定顶点集)进行图计算,并且还可以通过指定边集来自定义在图计算中用于传输消息的边,可以是图数据中的原始边、或者是图数据中不存在的虚拟边、多跳边等等。端侧设备向云侧设备发送图计算任务的图数据、进行图计算的指定顶点集、用于传输消息的指定边集、以及使用图计算的算子编程实现的控制流信息。云侧设备将端侧设备发送的控制流信息中的算子转换为基于中间件的可执行代码,在运行有中间件的分布式运行时上执行生成的可执行代码,根据用户指定的图数据、指定顶点集和指定边集,执行图计算任务,通过指定边集传递消息,更新图数据中指定顶点集中顶点的状态信息,根据更新后的图数据确定图计算任务的执行结果。云侧设备向端侧设备返回图计算任务的处理结果。
为了便于理解图1所示系统架构中设备间的执行交互过程,下面结合几个具体应用场景,对上述第一种使用场景中设备间的执行交互过程进行说明。
一种可能的应用场景中,端侧设备是电商平台的云服务器。端侧设备能够获取电商平台的数据,例如消费者浏览某款产品,消费者下单某款产品,消费者向亲友分享某款产品等行为数据;产品的消费人群、所属类目、供应商等产品信息等等。端侧设备根据采集的电商平台的数据构建电商领域的消费者-产品关系图。并且,端侧设备可以获取并显示分布式图计算系统提供的算子的相关信息,用户可以基于分布式图计算系统提供的算子,编程实现当前应用场景中图计算任务的控制流信息,并指定进行图计算的指定顶点集、用于传输消息的指定边集。端侧设备向云侧设备发送消费者-产品关系图、指定顶点集、指定边集和图计算任务的控制流信息。云侧设备基于端侧设备发送的消费者-产品关系图、指定顶点集、指定边集和控制流信息,进行图计算,更新消费者-产品关系图中顶点的状态信息,其中状态信息是根据图计算任务设定的,在图计算完成后,根据更新后的消费者-产品关系图中顶点的状态信息,确定图计算任务的执行结果,并向端侧设备反馈执行结果。另外,端侧设备还可以直接从其他设备获取已经构建好的消费者-产品关系图。
例如,该图计算任务可以是消费者偏好分析,消费者-产品关系图中顶点的状态信息可以用于记录消费者对产品的偏好信息,输出的执行结果为用户偏好的产品。其中,指定顶点集可以用于指定待分析的消费者群体和产品集。
例如,图计算任务可以是产品精准推荐,消费者-产品关系图中顶点的状态信息可以用于记录产品被推荐给用户的可能性信息,输出的执行结果为向用户推荐的产品信息。
例如,图计算任务还可以是热门产品统计,消费者-产品关系图中顶点的状态信息可以用于记录产品的热度信息,输出的执行结果是热门产品的信息。
一种可能的应用场景中,端侧设备是社交网络平台的服务器。端侧设备能够获取社交网络平台的使用数据,例如用户发表的文章、评论,用户点赞过的文章、评论,用户添加好友的信息,用户到过的位置等等。端侧设备根据采集的社交网络平台的使用数据构建社交领域的社交网络信息图。并且,端侧设备可以获取并显示分布式图计算系统提供的算子的相关信息,用户可以基于分布式图计算系统提供的算子,编程实现当前应用场景中图计算任务的控制流信息,并指定进行图计算的指定顶点集、用于传输消息的指定边集。端侧设备向云侧设备发送社交网络信息图、指定顶点集、指定边集和图计算任务的控制流信息。云侧设备基于端侧设备发送的社交网络信息图、指定顶点集、指定边集和控制流信息,进行图计算,更新社交网络信息图中顶点的状态信息,在图计算完成后,根据更新后的社交网络信息图中顶点的状态信息,确定图计算任务的执行结果,并向端侧设备反馈执行结果。另外,端侧设备还可以直接从其他设备获取已经构建好的社交网络信息图。
例如,该图计算任务可以是社区的发现,社交网络信息图中顶点的状态信息可以用于记录用户在同一社区的可能性信息,输出的执行结果为一个或者多个社区的信息。
例如,图计算任务可以是精准推荐好友,社交网络信息图中顶点的状态信息可以用于记录用户间关系的密切程度,输出的执行结果为向用户推荐添加好友的用户信息。
一种可能的应用场景中,端侧设备是具有网络路由功能的设备。端侧设备能够获取网络结构数据,例如网络中节点的数量,各个网络节点的位置、性能参数等等。端侧设备根据网络结构数据构建网络拓扑图。并且,端侧设备可以获取并显示分布式图计算系统提供的算子的相关信息,用户可以基于分布式图计算系统提供的算子,编程实现当前应用场景中规划最短网络路径的控制流信息,并指定进行图计算的指定顶点集、用于传输消息的指定边集。端侧设备向云侧设备发送网络拓扑图、指定顶点集、指定边集和规划最短网络路径的控制流信息。云侧设备基于端侧设备发送的网络拓扑图、指定顶点集、指定边集和控制流信息,进行图计算,更新网络拓扑图中顶点的状态信息,在图计算完成后,根据更新后的网络拓扑图中顶点的状态信息,确定最短网络路径,并向端侧设备反馈最短网络路径。其中,网络拓扑图中顶点的状态信息可以指示路径的代价信息。另外,端侧设备还可以直接从其他设备获取已经构建好的网络拓扑图。
基于图1所示的系统架构的第二种使用场景中,端侧设备可以直接使用云侧设备已实现的图算法的控制流信息。端侧设备采集或从其他设备获取图计算任务的图数据,接收用户指定的所需使用的目标图算法、进行图计算的指定顶点集、用于传输消息的指定边集,向云侧设备发送将这些数据。云侧设备基于指定的目标图算法,获取指定的目标图算法的控制流信息,将控制流信息中的算子转换为基于中间件的可执行代码,在运行有中间件的分布式运行时上执行生成的可执行代码,根据用户指定的图数据、指定顶点集和指定边集,执行图计算任务,通过指定边集传递消息,更新图数据中指定顶点集中顶点的状态信息,根据更新后的图数据确定图计算任务的执行结果。云侧设备向端侧设备返回图计算任务的处理结果。
一种可能的应用场景中,端侧设备是电商平台的云服务器。端侧设备能够获取电商领域的消费者-产品关系图。假设端侧设备当前的图计算任务可以是消费者偏好分析,而分布式图计算系统已经实现并提供这一任务的控制流信息。端侧设备可以指定使用云侧设备已实现的这一控制流信息,向云侧设备发送指定使用的控制流信息的标识、以及消费者-产品关系图、指定顶点集和指定边集。云侧设备根据控制流信息的标识,获取对应的控制流信息,根据该控制流信息,端侧设备发送的消费者-产品关系图、指定顶点集和指定边集,进行图计算,更新消费者-产品关系图中顶点的状态信息,在图计算完成后,根据更新后的消费者-产品关系图中顶点的状态信息,确定图计算任务的执行结果,并向端侧设备反馈执行结果。其中,消费者-产品关系图中顶点的状态信息可以用于记录消费者对产品的偏好信息,输出的执行结果为用户偏好的产品。
除图1所示的系统架构之外,本申请提供的分布式图计算方法的第三种使用场景为,分布式图计算方法运行在用户侧的具有分布式计算能力的电子设备上。该电子设备可以是一台计算设备、或者是包含多台计算设备的分布式集群。
该电子设备具有上述端侧设备的能力,负责获取图计算任务的图数据、进行图计算的指定顶点集、用于传输消息的指定边集、以及使用图计算的算子编程实现的控制流信息。并且,该电子设备具备上述云侧设备的分布式图计算能力,负责将控制流信息中的算子转换为基于中间件的可执行代码;在运行有中间件的分布式运行时上执行可执行代码,根据图数据、指定顶点集和指定边集,执行图计算任务,以更新指定顶点集中顶点的状态信息,得到更新后的图数据;根据更新后的图数据中顶点的状态信息,输出图计算任务的执行结果。
以上述电商场景为例,电子设备可以是电商平台的云服务器。电子设备能够获取电商领域的消费者-产品关系图。电子设备可以显示分布式图计算系统提供的算子的相关信息,用户可以基于分布式图计算系统提供的算子,在该电子设备(或其他设备)上编程实现当前应用场景中图计算任务的控制流信息,并指定进行图计算的指定顶点集、用于传输消息的指定边集。电子设备基于消费者-产品关系图、指定顶点集、指定边集和控制流信息,进行图计算,更新消费者-产品关系图中顶点的状态信息,在图计算完成后,根据更新后的消费者-产品关系图中顶点的状态信息,确定图计算任务的执行结果,并输出执行结果。
对于上述任一种场景,端侧设备采集具体应用场景的数据,构建图数据,并将图数据发送至云侧设备,出于隐私保护,端侧设备应及时删除可能涉及的用户的个人数据和隐私数据,在确保用户隐私不回传的同时,为用户提供服务。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图2为本申请一示例性实施例提供的分布式图计算系统的架构图。如图2所示,该分布式图计算系统20包括:算子库21、代码生成器22、中间件23和图处理组件24。其中,算子库21包含分布式图计算系统对外提供的用于图计算的算子、操作符、辅助操作等。
代码生成器22用于将使用算子实现图计算任务得到的控制流信息,转换为基于中间件的可执行代码。
中间件23用于在分布式运行时上执行可执行代码,根据图数据、指定顶点集和指定边集,执行图计算任务,以更新指定顶点集中顶点的状态信息,得到更新后的图数据。
图处理组件24,用于根据更新后的图数据中顶点的状态信息,分布式图计算系统输出图计算任务的执行结果。
其中,分布式运行时包含多个工作节点(worker),每一工作节点可以是一个进程。每个工作节点进行部分分布式计算的处理,不同工作节点之间的通信通过信息传递接口(MPI)实现。
示例性地,分布式运行时可以包含分布式集群中的多个处理器(CPU),每一处理器可以运行一个或多个进程,每个进程作为一个工作节点(worker)。
示例性地,在图计算任务计算量较小时,分布式运行时可以包含一台计算设备,该计算设备可以包括多个处理器(CPU),每一处理器可以运行一个或多个进程,每个进程作为一个工作节点(worker)。
为了实现对图数据进行分布式图计算,图处理组件24包括图分割器,负责将图数据划分为m个子图,将m个子图的顶点集分别存储到m个工作节点。每个工作节点拥有一个子图的顶点集,负责处理其对应的计算和通信。其中m表示分布式运行时包含的工作节点(worker)的数量。
示例性地,根据分布式运行时包含的工作节点(worker)的数量m,采用边分割的方式,将图数据划分为m个分区(称为子图),将m个子图的顶点集分别存储到m个工作节点。每一工作节点持有其中一个子图。对图数据的分区方案应该保证m个子图的顶点集的并集为原始图数据的顶点集,m个子图的边集的并集为原始图数据的边集,并且每个顶点只属于一个子图,也即不同子图的顶点集不包含相同的顶点。边的两个顶点可能属于不同的子图。
本实施例中,每个顶点被分配给一个工作节点并又该工作节点拥有,该工作节点称为该顶点的“主节点”,该顶点为该工作节点存储的“主顶点”。在其他工作节点上,在需要使用其他工作节点拥有的主顶点的信息时,可以创建主顶点的副本,称为主顶点的“镜像”,存储有主顶点的镜像的工作节点称为该主顶点的“远程节点”。
其中,工作节点上的顶点数据保存在内存中。对于顶点关联的边,如果工作节点有足够的内存容量,边数据可以一直缓存在内存中。否则,边数据存储在磁盘中,只有在使用时才从磁盘中加载。
可选地,在其他实施例中也可以采用顶点分割的方式将图数据划分为m个子图。另外,对图划分为多个分区的边分割方法和顶点分割方法可以采用现有的分布式图计算系统中类似的方法实现,此处不再赘述。例如,基于散列的边分割方法、Metis等。
另外,本申请的分布式图计算系统还支持用户指定使用的边分割策略,如可以根据各个工作节点的负载情况使用Metis来进行图分割,以追求更好的工作节点负载平衡。
本申请提供的分布式图计算系统和方法,基于一种新的分布式图计算框架实现,使用函数式编程范式,并且遵循批量同步并行(BSP)计算范式。算子用函数的方式定义,并且每个主要算子(函数)都包含一个超级步。在每个超级步中,计算和通信(消息传递)都发生在活动顶点上。不同的超级步间是同步执行的,在一个超级步结束时,会进行工作节点间的数据同步,以保证在一个超级步发送的消息可以在下一个超级步的开始时被传递,使得在一个超级步中更新的顶点状态信息可以在下一个超级步开始时生效。
具体地,该分布式图计算系统提供的算子包括如下至少一种:
1)顶点集大小算子(SIZE),用于返回指定顶点集U0的大小。顶点集大小算子可以命名为SIZE,指定顶点集U0包含图的一组顶点,具体可以包含一组整数,表示该集合中每个顶点的标识符(id)。
2)顶点映射算子(VERTEXMAP),用于在指定顶点集U1中,筛选出经第一条件检查函数F1检查通过的第一顶点,使用第一映射函数M1计算第一顶点的更新状态。其中,F1和M1是可以由用户编程实现的接口函数。
顶点映射算子可以命名为VERTEXMAP,将第一映射函数M1应用于指定顶点集U1中通过第一条件检查函数F1检查的每个顶点。顶点映射算子输出计算得到临时新值(即顶点的状态信息有更新)的第一顶点的集合,可以包含第一顶点的标识符(id)。
顶点映射算子仅用于分布式运行时中每一工作节点(worker)进行本地顶点(即主顶点)信息的更新。
顶点映射算子中,对每个顶点的计算都是独立的,可以并行地对各个顶点进行计算。
另外,在某些不需要更新顶点的信息,仅基于顶点的信息查找/过滤部分顶点的图计算任务中,由于无需更新顶点的信息,可以省略该顶点映射算子,来实现顶点查找/过滤的功能。
需要说明的是,该顶点映射算子中,进行更新的指定顶点集U1可以由用户指定(自定义),而不是仅操作图中每个顶点,因此支持对任意指定的顶点集进行更新,每次仅对必要的顶点进行更新即可,可以显著提升图计算的执行效率,具有更强的表达能力。例如,用户可以同时维护多个顶点集,甚至可以在递归函数中定义递归地对顶点集进行更新。
如果顶点映射算子不支持U1由用户指定,而是默认为图数据的顶点集U,系统每次都必须从整个图开始,并选择特定顶点进行计算更新,严重影响计算效率。
其中,“更新状态”是指经过一个超级步(顶点映射算子、或边映射算子对应的超级步)的计算得到的,在当前超级步中顶点最终的状态信息。在当前超级步结束时,使用顶点的更新状态来更新顶点的状态信息,并且将主顶点的状态信息同步到它的镜像。
3)边映射算子(EDGEMAP),用于在指定边集H中,筛选出源顶点位于指定顶点集U2中、且目标顶点经顶点检查函数C检查通过的第一边,从第一边中筛选出经第二条件检查函数F2检查通过的第二边,使用第二映射函数M2计算第二边的目标顶点的临时新值,并根据更新模式和聚合函数R,将目标顶点的临时新值与原值聚合,得到目标顶点的更新状态。
其中,顶点检查函数C、第二条件检查函数F2、第二映射函数M2和聚合函数R是由用户编程实现的接口函数。边集H中的边包含如下至少一种:图数据中存在的边、图数据中不存在的虚拟边。虚拟边包括如下至少一种:反向边、多跳边。另外,虚拟边还可以包括图数据中不存在的其他类型的边,可以是通过指定起点(源顶点)和终点(目标顶点)构成的任意边。
默认情况下,指定边集H为图数据的边集E,可以由用户自定义任意边集。指定边集H可以用指定的一个源顶点和多个目标顶点来定义,指定边集H包含由指定的源顶点指向任一指定的目标顶点的边,可以定义出一组虚拟边。
可选地,可以由用户自定义一个函数来定义,该函数的输入为一个源顶点,输出为一组目标顶点,基于该函数的输入和输出可以确定一组虚拟边,构成指定边集H。
该边映射算子可以命名为EDGEMAP,将更新逻辑(第二映射函数M2)应用于源顶点位于指定顶点集U2中,且目标顶点通过顶点检查函数C的特定边。该特定边为指定边集H中的边,并且通过第二条件检查函数F2检查。
“临时新值”是指在边映射算子(对应一个超级步)执行过程中计算得到的顶点的新的状态信息(简称“新值”),由于在边映射算子执行过程中,同一顶点可能经过多个不同的边传输消息后产生多个新值,这些新值不能作为当前超级步结束时该顶点的更新状态,因此称之为临时新值。
对于边映射算子中计算产生的顶点的临时新值,更新模式有两种:拉(pull)模式和推(push)模式。在拉(pull)模式下,则立即按顺序应用临时新值,将临时新值直接作为顶点的更新状态,但是在产生同一顶点的又一新的临时新值后,还会基于顶点的临时新值更新该顶点的更新状态。
在推(push)模式下,使用聚合函数R将临时新值应用于顶点,以将顶点的临时新值与原值聚合,确定当前超级步结束时该顶点的更新状态。
具体地,在推(push)模式下,对于当前超级步中产生的任一顶点的第一个临时新值,使用聚合函数R将该临时新值与该顶点的当前状态信息聚合,将聚合结果作为顶点的更新状态;在当前超级步后续过程中,每当产生该顶点的又一临时新值时,使用聚合函数R将新产生的临时新值与顶点的更新状态聚合,根据聚合结果更新顶点的更新状态。这一过程可以表示为:
Figure 778068DEST_PATH_IMAGE001
,其中,d表示任一目标顶点的当前状态信息,
Figure 148001DEST_PATH_IMAGE002
表示在边映射算子对应的一个超级步中,第一次产生的该目标顶点的临时新值,
Figure 946192DEST_PATH_IMAGE003
表示在同一个超级步中第二次产生的该目标顶点的临时新值。
Figure 941830DEST_PATH_IMAGE004
表示同一超级步中该目标顶点的更新状态。
需要说明的是,该边映射算子中,不仅可以自定义指定顶点集U2,还允许用户自定义想要用来传输消息的任意边集H,边集H中的边还可以是在原始图数据中不存在的虚拟边,因此支持了跨邻居范围的网络通信。
该边映射算子中,通过增加顶点检查函数C,允许用户在顶点检查函数C中自定义要更新的目标顶点所需满足的条件。例如,顶点检查函数C在某些限定对与源顶点关联的目标顶点只更新一次的图计算任务中非常关键,可以通过顶点检查函数C检查目标顶点是否被更新过,一旦更新过,将不会再更新。当用户不需要使用顶点检查函数C时,可以使用默认顶点检查函数C,它直接返回检查通过(true)。
该边映射算子中,通过增加聚合函数R,实现两种不同的顶点更新模式,以此来保证分布式图计算中数据的一致性。聚合函数R应具有关联性和交换性,以保证数据更新的正确性。
4)稠密型边映射算子(EDGEMAPDENSE)和稀疏型边映射算子(EDGEMAPSPARSE),其中,稠密型边映射算子实现使用拉(pull)模式时边映射算子(EDGEMAP)的处理逻辑,稀疏型边映射算子(EDGEMAPSPARSE)实现使用推(push)模式时边映射算子(EDGEMAP)的处理逻辑。
稠密型边映射算子(EDGEMAPDENSE)可以描述为:用于在指定边集H中,筛选出源顶点位于指定顶点集U2中、且目标顶点经顶点检查函数C检查通过的第一边,从第一边中筛选出经第二条件检查函数F2检查通过的第二边,使用第二映射函数M2计算第二边的目标顶点的临时新值,并将目标顶点的临时新值应用为目标顶点的更新状态。
在稠密型边映射算子(EDGEMAPDENSE)中,对于边映射算子中计算产生的顶点的临时新值,立即按顺序应用临时新值,将临时新值直接作为顶点的更新状态,但是在产生同一顶点的又一新的临时新值后,还会基于顶点的临时新值更新该顶点的更新状态。
示例性地,稠密型边映射算子(EDGEMAPDENSE)并行循环图数据中指定边集H中的目标顶点,对于每个目标顶点,依次将第二条件检查函数F2和第二映射函数M2应用于该目标顶点的源顶点处于指定顶点集U2中的边(位于指定边集H中),直到顶点检查函数C对该目标顶点检查不通过(返回false),如果该目标顶点被至少更新一次,则该目标顶点的id将添加到算子返回结果中。由于所有临时新值都会立即应用,所以未使用聚合函数R。
稀疏型边映射算子(EDGEMAPSPARSE)可以描述为:用于在指定边集H中,筛选出源顶点位于指定顶点集U2中、且目标顶点经顶点检查函数C检查通过的第一边,从第一边中筛选出经第二条件检查函数F2检查通过的第二边,使用第二映射函数M2计算第二边的目标顶点的临时新值,并根据聚合函数R将目标顶点的临时新值与原值聚合,得到目标顶点的更新状态。
在稀疏型边映射算子(EDGEMAPSPARSE)中,对于边映射算子中计算产生的顶点的临时新值,使用聚合函数R将临时新值应用于顶点,以将顶点的临时新值与原值聚合,确定当前超级步结束时该顶点的更新状态。具体实现方式与边映射算子(EDGEMAP)在推(push)模式下的更新方式一样。
示例性地,稀疏型边映射算子(EDGEMAPSPARSE)并行循环指定顶点集U2中的所有顶点,对于每个顶点,该顶点作为源顶点,并行执行第二条件检查函数F2和第二映射函数M2以更新其合格(通过顶点检查函数C检查,且形成的边在指定边集H中)的邻居(目标顶点)。如果更新了目标顶点,该目标顶点将被添加到返回结果中。由于一个顶点可以在单个EDGEMAPSPARSE函数中由不同的邻居同时更新,因此所有新值都将通过聚合函数R应用于目标顶点。
为了简化算子,边映射算子(EDGEMAP)可以通过基于稀疏型边映射算子(EDGEMAPSPARSE)和稀疏型边映射算子(EDGEMAPSPARSE)实现。具体地,边映射算子(EDGEMAP)可以根据当前活动顶点集的密度类型,自适应地确定当前使用的更新模式。若活动顶点集的密度类型为密集型,则确定当前的更新模式为拉模式。若活动顶点集为稀疏型,则确定当前的更新模式为推模式。在使用拉(pull)模式时,调用稠密型边映射算子(EDGEMAPDENSE),在使用推(push)模式时,调用稀疏型边映射算子(EDGEMAPSPARSE)。
另外,对外向用户提供稠密型边映射算子(EDGEMAPDENSE)和稀疏型边映射算子(EDGEMAPSPARSE),用户也可以直接选择使用稠密型边映射算子(EDGEMAPDENSE)或稀疏型边映射算子(EDGEMAPSPARSE),选择只在一种更新模式下执行,以组合实现具体图计算任务的控制流信息,可以增加生成控制流的灵活性。
另外,本申请的分布式图计算系统还提供了定义好的辅助操作,具体包括:集合操作,如并集(UNION)、差集(MINUS)、交集(INTERSACT)、添加元素(ADD)、是否包含指定元素(CONTAIN)等。
为了便于用户自定义指定边集H,该分布式图计算系统还预定了一些操作符,如反向边(reverse(E)、两跳邻居(join(E,E))或目标顶点位于U的边(join(E,U))等,使得通信超出了邻居交换限制。
该分布式图计算系统兼容基于“像顶点一样思考”(或以顶点为中心)的模型,在该分布式图计算系统中可以方便地移植现有的以顶点为中心的图计算程序。在以顶点为中心的模型的每个超级步骤中,所有活动顶点(也称为边界frontiers)并行执行相同的用户定义的顶点函数,该函数接收一组消息作为输入(inbox),并可以生成一个或多个消息作为输出(outbox)。在超级步骤结束时,运行时库接收来自每个顶点外部的消息,并计算下一个超级步骤的活动顶点集。每个超级步骤中的本地计算可以通过顶点映射算子(VERTEXMAP)实现,它处理输入(inbox)以生成每个顶点的更新值和输出(outbox),然后使用边映射算子(EDGEMAP)、稠密型边映射算子(EDGEMAPDENSE)和稀疏型边映射算子(EDGEMAPSPARSE)等用于传输消息的算子,将消息传输到目标顶点的输入(inbox)。
本实施例中,分布式图计算系统允许定义顶点子集的结构,而不是仅是操作图中每个顶点,支持了对任意顶点集合进行更新;并且允许用户自定义想要用来传输消息的任意边集H,甚至是在原始图中不存在的虚拟边,支持了跨邻居范围的网络通信;并且提供方便易用的原语(包括算子及辅助操作、操作符等),通过组合原语的方式可以灵活地生成任意图计算任务/图算法的控制流,从而可以支持多阶段的图计算任务/图算法。通过支持以上三个重要特征,分布式图计算系统使得更复杂的图计算任务/图算法在分布式环境下得以实现,具有更加强大的表达能力,同时,还提供了简单灵活、方便易用的编程接口(算子),以提高生产效率。
如,基于中间中心性(Betweeness Centrality,简称BC)算法的社交网络分析任务,包括两个阶段,第一阶段使用类似于广度优先搜索(Breadth First Search,简称BFS)的过程计算从每个顶点到每个顶点的最短路径数,第二阶段通过反向传播计算相关性得分。由于第一阶段每个步骤访问的边界都需要跟踪,因此很难在不提供顶点子集结构的传统顶点中心模型中直接实现BC算法。利用本申请提供的分布式图计算系统,BC算法的实现是很直观的,可以通过组合原语的方式分别实现两个阶段的控制流,在第二阶段,边需要指向相反的方向,通过在边映射算子中指定用于传输消息的指定边集H为反向边的边集reverse(E),很容易可以实现。
本实施例中,中间件提供了两个用于数据访问的应用程序编程接口(ApplicationProgramming Interface,API):读(get)接口和写(put)接口。读(get)接口用于读取顶点的状态信息。写(put)接口用于更新顶点的状态信息。中间件还提供了障碍(barrier)接口。障碍(barrier)接口用于在一个超级步结束时,等待所有工作节点完成当前超级步的处理后,在各个工作节点间同步更新后的状态信息。
代码生成器用于将控制流信息中的算子转换为基于中间件的可执行代码,从生成控制流信息的基于中间件的可执行代码。具体地,分布式图计算系统中可以预先配置好所提供的算子转换为由中间件执行的代码的转换规则。基于该转换规则,代码生成器可以将任一算子转换为对应的基于中间件的可执行代码,也即使用中间件提供的读(get)接口、写(put)接口和障碍(barrier)接口实现的代码,从而将控制流信息转换为基于中间件的可执行代码。
示例性地,以顶点映射算子(VERTEXMAP)为例,该算子通过在工作节点内对指定顶点集U1中的主顶点并行调用读(get)接口和写(put)接口,以读取主顶点的当前状态信息、生成主顶点的更新状态,并将更新状态写入主顶点的下一状态信息;一旦主顶点的下一状态信息更新,会自适应生成消息,该消息用于将主顶点的下一状态信息同步到其镜像;最后调用障碍(barrier)接口以确保在每个工作节点上完成本地计算更新,并传递所有消息。该算子的超级步完成。
本实施例中,中间件用于完成工作节点内顶点更新和工作节点间的通信(消息传输),通过中间件能够隐藏通信和数据分发的细节。通过中间件实现在分布式运行时上执行可执行代码,执行图计算任务,更新指定顶点集中顶点的状态信息,得到更新后的图数据。
由于在实际应用中,顶点可以具有多种类型的属性信息,而图计算任务并不一定更新所有属性的信息。可选地,顶点的状态信息可以包括执行当前的图计算任务的过程中需要更新的一种或多种属性信息。可选地,顶点的状态信息还可以包含顶点的所有属性信息。
基于批量同步并行(BSP),每一工作节点维护顶点的当前状态信息和下一状态信息。顶点的当前状态信息是在一个超级步开始时顶点的起始状态信息。
具体地,在运行有中间件的分布式运行时上,根据可执行代码生成多个有序排列的超级步,不同超级步之间同步执行。在执行每一超级步的过程中,读取指定顶点集中顶点的当前状态信息,基于顶点的当前状态信息和指定边集进行图计算,确定指定顶点集中至少一个顶点的更新状态;将任一顶点的更新状态,存储为顶点的下一状态信息。在当前超级步结束时,在分布式运行时上的不同工作节点间同步顶点的下一状态信息,并用顶点的下一状态信息更新当前状态信息,以将当前超级步中顶点的下一状态信息作为下一超级步启动时顶点的当前状态信息。
其中,顶点的当前状态信息在当前超级步中访问它的所有工作节点上都是一致的,保证各个工作节点可以安全地获得任意顶点(主顶点或镜像)的当前状态信息,而无需数据竞争。在一个超级步中,可能会对同一顶点计算更新多次,用顶点的“临时新值”指代在超级步中对顶点计算得到的顶点的状态信息的新值,不一定是当前超级步结束时顶点的最终值。基于更新模式可以确定当前超级步中顶点最终的临时新值,并写入到顶点的下一状态信息中。在当前超级步结束时,会将顶点的下一状态信息更新为顶点的当前状态信息,使得当前超级步中顶点的下一状态信息作为下一超级步中顶点的当前状态信息(也即起始状态信息)。
可选地,为了节省内存空间,只有在必要时创建顶点的下一状态信息。具体地,在一个超级步中,当计算产生顶点的更新状态时,才会存储/创建该顶点的下一状态信息。对于没有产生更新状态的顶点,则不会存储顶点的下一状态信息。在超级步结束后,将顶点的下一状态信息更为顶点的当前状态信息之后,顶点的下一状态信息占用的内存将被释放。
进一步地,障碍(barrier)接口在超级步结束时调用,用于迫使工作节点等待所有工作节点完成当前超级步的处理后,将顶点的下一状态信息更新为顶点的当前状态信息,以使的该超级步中更新后顶点的下一状态信息在下一超级步中顶点的当前状态信息中可见。
在一可选实施例中,对于当前超级步中计算得到的任一顶点的临时新值,若当前的更新模式为拉模式,则将顶点的临时新值作为顶点的更新状态,立即按顺序应用临时新值。在产生同一顶点的又一新的临时新值后,还会基于顶点的临时新值更新该顶点的更新状态。
若当前的更新模式为推模式,则根据聚合函数R,将顶点的临时新值和当前状态信息聚合,得到顶点的更新状态。从而使用聚合函数R将临时新值应用于顶点,以将顶点的临时新值与原值聚合,确定当前超级步结束时该顶点的更新状态。
进一步地,在确定当前的更新模式时,根据当前超级步中活动顶点集的密度类型,确定当前的更新模式,若活动顶点集为稠密型,则确定当前的更新模式为拉模式;若活动顶点集为稀疏型,则确定当前的更新模式为推模式。
示例性地,可以根据当前超级步中活动顶点集的密度,若活动顶点集的密度大于或等于密度阈值,则确定活动顶点集为稠密型;若活动顶点集的密度小于密度阈值,则确定活动顶点集为稀疏型。
另外,还可以根据当前超级步中活动顶点及关联传出边的数量,确定活动顶点集的密度类型。
本实施例中,基于边映射算子,在顶点信息的更新传输过程中,可以根据活动顶点集的密度(稠密或稀疏),在拉模式(稠密)和推模式(稀疏)之间进行自适应切换,尤其适用于活动顶点集的密度(稠密或稀疏)在计算过程中发生变化的图计算任务/算法,能够显著提高分布式图计算系统的性能。
例如,对于基于广度优先搜索BFS和中间中心性BC等图算法的图计算任务,在常见情况下,活动顶点集最初是稀疏的,经过几次迭代后切换到稠密的,然后再切换回稀疏的。对于基于联通分量(Connected Components,简称CC)、极大匹配(Maximal Matching,简称MM)、极大独立子集(Maximal Independent Set,简称MIS)和图染色(Graph Coloring,简称GC)等算法的图计算任务,活动顶点集从密集开始,随着算法的继续,变得稀疏。
在一可选实施例中,通过中间件实现不同工作节点间的通信(消息传输)。具体地,当前超级步结束后,在同步顶点的下一状态信息时,对于任一工作节点,若更新了任一第一主顶点的下一状态信息,则将第一主顶点的下一状态信息同步到第一主顶点的镜像。其中,工作节点所存储的子图的顶点集中的顶点称为主顶点,存储主顶点的工作节点称为主顶点及镜像对应的主节点。若更新了镜像的下一状态信息,则将镜像的下一状态信息发送到镜像对应主节点,使得主节点根据镜像的下一状态信息,更新镜像对应的第二主顶点的下一状态信息,并将更新后第二主顶点的下一状态信息同步到第二主顶点的所有镜像。
也就是说,当第一节点(任一工作节点)上主顶点的下一状态信息更新后,第一节点向该主顶点的镜像所在的第二节点发送消息,以将该主顶点的下一状态信息同步到其镜像。
例如,第一节点运行顶点映射算子(VERTEXMAP)或稠密型边映射算子(EDGEMAPDENSE)时,会更新主顶点的下一状态信息,此时,第一节点发送消息将主顶点的下一状态信息同步到其镜像。
当第一节点上镜像的下一状态信息更新后,第一节点向镜像对应主顶点所在第三节点发送消息,以将镜像更新后的下一状态信息发送至第三节点。第三节点处理第一节点发送的消息,并确定该镜像对应主顶点的最终状态信息,并将该主顶点的最终状态信息同步(如广播)到必要的镜像上,这一过程有两轮消息传输。
例如,第一节点运行稀疏型边映射算子(EDGEMAPSPARSE)时,会产生镜像的临时新值,镜像的状态信息的同步过程分为三个阶段:首先,第一节点聚合镜像的临时新值和当前状态信息,确定镜像的下一状态信息;然后,第一节点发送消息给该镜像对应主顶点所在的工作节点(即第三节点),将该镜像的下一状态信息传输至第三节点,第三节点处理这些消息,确定该镜像对应主顶点的最终的下一状态信息;最后,第三节点将该主顶点的下一状态信息广播到该主顶点的所有镜像。
本实施例中通过中间件实现不同工作节点间的通信(消息传输)时,仅主顶点仅与必要镜像通信,可以消除冗余消息的传输。对于普通的图计算任务,消息沿边传输。因此,主顶点通常仅与该主顶点至少一个邻居顶点所在工作节点上该主顶点的镜像进行通信,而无需与所有工作节点进行通信。将数据同步时传输的消息数从所有工作节点数m减少到同步到必要的镜像数。仅在边映射算子(EDGEMAP)中指定边集包含虚拟边的情况下,超出了图数据原边集的范围,才会将主节点上主顶点的下一状态信息同步到所有镜像所在工作节点,这一优化能大幅减少通信数量,大幅提高分布式图计算系统的性能。
基于中间件,通过读取顶点的当前状态信息和修改下一状态信息来满足计算过程中的数据访问需求,并自适应地选择更新模式实现消息传递和消息处理完成的数据同步,保证数据一致性。
示例性地,图3为本申请一示例性实施例提供的分布式图计算系统的框架图。如图3中所示的图G,包含id分别为1-6表示6个顶点。假设分布式运行时包含2个工作节点:Worker# 1和Worker# 2。将图G分割为两个子图,分别对应顶点集{1,2,3}和顶点集{4,5,6}。工作节点Worker# 1存储顶点集{1,2,3}和邻居顶点的信息,以此来顶点的关联边信息,例如顶点3的邻居顶点有1、2和5。由于顶点4和5是该顶点集{1,2,3}中顶点的邻居,Worker#1上还存储了顶点4和5的镜像。Worker# 2存储顶点集{4,5,6}和邻居顶点的信息,以及顶点2和3的镜像。用超级步#i表示任一当前超级步,超级步#i+1表示下一个超级步。在超级步#i中,假设Worker# 1使用拉(pull)模式,对活动顶点3执行稠密型边映射算子(此时作为边映射算子中的一部分)的处理流程,通过读接口get()读取该顶点3及其邻居顶点1、2和5的当前状态信息S1、S2、S3和S5,通过计算确定顶点3的更新状态,并写入本地存储的顶点3的下一状态信息,由于是对本地存储的主顶点3的更新,通过内存访问直接更新本地存储的顶点3的下一状态信息。假设Worker# 2使用拉(push)模式,对活动顶点4执行稀疏型边映射算子(此时作为边映射算子中的一部分)的处理流程,通过读接口get()读取该顶点4的当前状态信息S4,通过计算产生镜像2、主顶点5和6的更新状态,并写入本地存储的镜像2、主顶点5和6的下一状态信息。在超级步#i结束时,Worker# 1和Worker# 2均调用障碍接口barrier(),等待所有工作节点完成超级步#i的处理,进行工作节点间的数据同步。Worker# 1将有更新的主顶点3的下一状态信息同步到Worker# 2上的镜像3。Worker# 2将有更新的主顶点5和6的下一状态信息同步到Worker# 1上的镜像5和6。Worker# 2将有更新的镜像2的下一状态信息同步到Worker# 1上,Worker# 1接收该消息并确定主顶点2最终的下一状态信息,并将主顶点2最终的下一状态信息同步到各工作节点Worker# 2的镜像2。在数据同步完成后,Worker# 1将主顶点1、2和3的下一状态信息,作为超级步#i+1中主顶点的当前状态信息。Worker# 2将主顶点4、5和6的下一状态信息,作为超级步#i+1中主顶点的当前状态信息。之后即可启动下一个超级步#i+1。
在一可选实施例中,可以通过构建中间件的快照,增加分布式图计算系统的容错机制。由于分布式图计算系统基于中间件维护的顶点的当前状态信息和下一状态信息运行,因此,为了创建快照,系统保存自上次创建快照以来顶点的状态信息(包括每次修改后的状态信息),以及所有子图的顶点集。一旦出现故障,系统从上一个快照恢复,并基于保存的顶点的状态信息进行恢复。
在实际应用中,顶点可以具有多种类型的属性信息,而图计算任务并不一定更新所有属性的信息。只有在该顶点的属性信息被其他顶点访问时,该顶点的属性才是关键的。如果顶点的属性信息仅作为由主顶点读取,则意味着它仅在本地计算中有用,并不关键。在具体应用中,不同的图计算任务中的关键属性不同。如果顶点的状态信息包含顶点的所有属性信息,工作节点维护顶点的当前状态信息和下一状态信息将占用很多的内存空间,在进行数据同步时同步下一状态信息中所有的属性信息,数据同步的数据量较大,执行效率低。
因此,在一可选实施例中,代码生成器可以对控制流信息进行静态分析,来确定图数据包含的各个类型的属性信息中,在图计算任务处理过程中被访问的一种或多种类型的属性信息,将被访问的属性信息作为关键属性。利用中间件在分布式运行时上的不同工作节点间同步顶点的下一状态信息时,仅同步顶点的下一状态信息中的关键属性。
在同步顶点的下一状态信息时,仅同步其中的关键属性,可以将单个消息的大小从所有属性信息的总大小,减少到仅关键属性的大小,可以降低分布式图计算系统固定通信成本,提高通信效率,提升分布式图计算系统的性能。
通过代码生成器识别关键属性,在图计算任务处理过程中,仅关注顶点的关键属性,将顶点的关键属性作为顶点的状态信息,存储的顶点的当前状态信息和下一状态信息都只包含关键属性,可以节省内存空间。
可选地,代码生成器可以对控制流信息进行静态分析,确定关键属性时,若某一类型的属性信息仅作为稠密型边映射算子(EDGEMAPDENSE)中源顶点的属性信息获取的,或者仅作为稀疏型边映射算子(EDGEMAPSPARSE)中目标顶点的属性信息获得/输入的,那么可以确定该类型的属性信息是关键属性。
在一可选实施例中,每个工作节点维护一个包含多个线程的线程池。其中,一个线程负责工作节点间的消息发送,另一线程通过信息传输接口(MPI)接收消息,剩余线程执行以顶点为中心的并行图计算处理。
也就说,每一工作节点运行有第一线程、第二线程和至少一个第三线程。其中,第一线程用于通过信息传递接口(MPI)发送消息,第二线程用于通过信息传递接口(MPI)接收消息,至少一个第三线程用于并行地进行多个顶点的图计算。
示例性地,对于每一工作节点,可以根据工作节点的内核数量,在线程池中维护对应数量的线程。如,对于具有c核的工作节点,维护一个包含c个线程的线程池。
本实施例中,由于创建了单独的线程来执行消息传输,可以联合调度计算和通信,实现通信与计算的并行处理,重叠两个过程的时间,减少总时间开销,可以加快各种图计算任务的处理速度,提升分布式图计算系统的性能。特别是对于计算量较小且通信时间与计算时间相当的图计算任务/图算法,能够大幅提升分布式图计算系统的性能。
本申请实施例提供的分布式图计算系统,基于所提供的算子实现了多种常见图计算任务/图算法的控制流信息,并对外提供使用这些控制流信息的服务。用户可以通过指定图计算任务/图算法,来直接使用对应的控制流信息。具体使用场景参见上述基于图1所示的系统架构的第二种使用场景的相关内容,此处不再赘述。
图4为本申请一示例性实施例提供的分布式图计算方法的流程图。本实施例中,基于上述分布式图计算系统提供了分布式图计算方法,执行主体为上述图1所示系统架构中的云侧设备,或者是上述用户侧电子设备。
如图4所示,该方法具体步骤如下:
步骤S401、获取图计算任务的图数据、进行图计算的指定顶点集、用于传输消息的指定边集、以及使用图计算的算子实现的控制流信息。
其中,图计算任务可以是各种应用领域/场景的基于图算法可实现的任务。具体可以应用于电子商务、社交网络、智能交通、网络路由等。
对于不同的图计算任务,给定的图数据和实现逻辑可以不同。基于本申请的分布式图计算系统提供的算子库,通过组合算子可以实现任意图计算任务/图算法的控制流信息。另外,这些算子支持用户自定义进行图计算的指定顶点集、用于传输消息的指定边集。
该步骤中,使用图计算的算子实现的控制流信息,可以是系统中内置的图算法的控制流信息,或者用户通过组合算子自行编程实现的控制流信息。
步骤S402、将控制流信息转换为基于中间件的可执行代码。
为了基于中间件在分布式环境下进行图计算,将控制流信息中的算子转换为基于中间件提供的接口的代码,以将控制流信息转换为中间件的可执行代码。
中间件提供了两个用于数据访问的应用程序编程接口(ApplicationProgramming Interface,API):读(get)接口和写(put)接口。读(get)接口用于读取顶点的状态信息。写(put)接口用于更新顶点的状态信息。中间件还提供了障碍(barrier)接口。障碍(barrier)接口用于在一个超级步结束时,等待所有工作节点完成当前超级步的处理后,在各个工作节点间同步更新后的状态信息。
示例性地,分布式图计算系统中可以预先配置好所提供的算子转换为由中间件执行的代码的转换规则。基于该转换规则,代码生成器可以将任一算子转换为对应的基于中间件的可执行代码,也即使用中间件提供的读(get)接口、写(put)接口和障碍(barrier)接口实现的代码,从而将控制流信息转换为基于中间件的可执行代码。
步骤S403、在运行有中间件的分布式运行时上执行可执行代码,根据图数据、指定顶点集和指定边集,执行图计算任务,以更新指定顶点集中顶点的状态信息,得到更新后的图数据。
其中,分布式运行时包含多个工作节点(worker),每一工作节点可以是一个进程。每个工作节点进行部分分布式计算的处理,不同工作节点之间的通信通过信息传递接口(MPI)实现。
中间件是专为分布式环境设计的,用于完成工作节点内顶点更新和工作节点间的通信(消息传输),并能够隐藏通信和数据分发的细节。通过中间件实现在分布式运行时上执行可执行代码,执行图计算任务,更新指定顶点集中顶点的状态信息,得到更新后的图数据。
步骤S404、根据更新后的图数据中顶点的状态信息,输出图计算任务的执行结果。
其中,顶点的状态信息可以包含顶点的所有属性信息。
由于在实际应用中,顶点可以具有多种类型的属性信息,而图计算任务并不一定更新所有属性的信息。可选地,顶点的状态信息可以包括执行当前的图计算任务的过程中需要更新的一种或多种属性信息。
通过分布式图计算执行控制流信息对应的可执行代码,可以实现基于图计算任务的处理逻辑更新图数据中顶点的全部/部分状态信息。根据更新后的图数据中顶点的状态信息,可以确定并输出图计算任务的执行结果。
例如,该图计算任务可以是消费者偏好分析,消费者-产品关系图中顶点的状态信息可以用于记录消费者对产品的偏好信息。根据更新后消费者对产品的偏好信息,可以确定用户偏好的产品,并输出用户偏好的产品的信息。
例如,图计算任务可以是热门产品统计,消费者-产品关系图中顶点的状态信息可以用于记录产品的热度信息。根据更新后产品(对应顶点)的热度信息,可以确定热度较高的热门产品,并输出热门产品的信息。
例如,图计算任务可以是网络路由场景中,查找从指定的起始网络节点到目标网络节点间的最短路径。网络拓扑图中顶点的状态信息可以包括是否属于最短路径中的节点,以及在最短路径中的位置。根据更新后的网络拓扑图中各个网络节点的状态信息,可以确定从指定的起始网络节点到目标网络节点间的最短路径,输出最短路径的信息。
本实施例中,控制流信息可以基于上述分布式图计算系统提供的算子编程实现,允许定义顶点子集的结构,而不是仅是操作图中每个顶点,支持了对任意顶点集合进行更新;并且允许用户自定义想要用来传输消息的任意指定边集,甚至是在原始图中不存在的虚拟边,支持了跨邻居范围的网络通信;并且提供方便易用的算子,通过组合算子的方式可以灵活地生成任意图计算任务/图算法的控制流,从而可以支持多阶段的图计算任务/图算法。通过支持以上三个重要特征,分布式图计算系统使得更复杂的图计算任务/图算法在分布式环境下得以实现,具有更加强大的表达能力,同时,还提供了简单灵活、方便易用的编程接口(算子),以提高生产效率。
在一可选实施例中,基于批量同步并行(BSP),每一工作节点维护顶点的当前状态信息和下一状态信息。顶点的当前状态信息是在一个超级步开始时顶点的起始状态信息。
上述步骤S403中,在运行有中间件的分布式运行时上执行可执行代码,根据图数据、指定顶点集和指定边集,执行图计算任务,以更新指定顶点集中顶点的状态信息,具体可以采用如下步骤S4031-S4034实现:
S4031、在运行有中间件的分布式运行时上,根据可执行代码生成多个有序排列的超级步,不同超级步之间同步执行;
S4032、在执行每一超级步的过程中,读取指定顶点集中顶点的当前状态信息,基于顶点的当前状态信息和指定边集进行图计算,确定指定顶点集中至少一个顶点的更新状态;
S4033、将任一顶点的更新状态,存储为顶点的下一状态信息;
S4034、在当前超级步结束时,在分布式运行时上的不同工作节点间同步顶点的下一状态信息,并用顶点的下一状态信息更新当前状态信息,以将当前超级步中顶点的下一状态信息作为下一超级步启动时顶点的当前状态信息。
其中,顶点的当前状态信息在当前超级步中访问它的所有工作节点上都是一致的,保证各个工作节点可以安全地获得任意顶点(主节点或镜像)的当前状态信息,而无需数据竞争。在一个超级步中,可能会对同一顶点计算更新多次,用顶点的“临时新值”指代在超级步中对顶点计算得到的顶点的状态信息的新值,不一定是当前超级步结束时顶点的最终值。基于更新模式可以确定当前超级步中顶点最终的临时新值,并写入到顶点的下一状态信息中。在当前超级步结束时,会将顶点的下一状态信息更新为顶点的当前状态信息,使得当前超级步中顶点的下一状态信息作为下一超级步中顶点的当前状态信息(也即起始状态信息)。
可选地,为了节省内存空间,只有在必要时创建顶点的下一状态信息。具体地,在一个超级步中,当计算产生顶点的更新状态时,才会存储/创建该顶点的下一状态信息。对于没有产生更新状态的顶点,则不会存储顶点的下一状态信息。在超级步结束后,将顶点的下一状态信息更为顶点的当前状态信息之后,顶点的下一状态信息占用的内存将被释放。
在超级步结束时调用障碍(barrier)接口,以迫使工作节点等待所有工作节点完成当前超级步的处理后,将顶点的下一状态信息更新为顶点的当前状态信息,以使的该超级步中更新后顶点的下一状态信息在下一超级步中顶点的当前状态信息中可见。
在一可选实施例中,上述步骤S4032,具体可以采用如下方式实现:
在执行每一超级步的过程中,对于当前超级步中计算得到的任一顶点的临时新值,根据当前超级步中活动顶点集的密度类型,确定当前的更新模式;若当前的更新模式为拉模式,则将顶点的临时新值作为顶点的更新状态;若当前的更新模式为推模式,则根据聚合函数R,将顶点的临时新值和当前状态信息聚合,得到顶点的更新状态。
对于当前超级步中计算得到的任一顶点的临时新值,若当前的更新模式为拉模式,则将顶点的临时新值作为顶点的更新状态,立即按顺序应用临时新值。在产生同一顶点的又一新的临时新值后,还会基于顶点的临时新值更新该顶点的更新状态。若当前的更新模式为推模式,则根据聚合函数R,将顶点的临时新值和当前状态信息聚合,得到顶点的更新状态。从而使用聚合函数R将临时新值应用于顶点,以将顶点的临时新值与原值聚合,确定当前超级步结束时该顶点的更新状态。
进一步地,在一个超级步中,在确定当前的更新模式时,根据当前超级步中活动顶点集的密度类型,确定当前的更新模式,若活动顶点集为稠密型,则确定当前的更新模式为拉模式;若活动顶点集为稀疏型,则确定当前的更新模式为推模式。
示例性地,可以根据当前超级步中活动顶点集的密度,若活动顶点集的密度大于或等于密度阈值,则确定活动顶点集为稠密型;若活动顶点集的密度小于密度阈值,则确定活动顶点集为稀疏型。
另外,还可以根据当前超级步中活动顶点及关联传出边的数量,确定活动顶点集的密度类型。
在一可选实施例中,上述步骤S4034中,在当前超级步结束时,在分布式运行时上的不同工作节点间同步顶点的下一状态信息,具体可以采用如下方式实现:
在同步顶点的下一状态信息时,对于任一工作节点,若更新了第一主顶点的下一状态信息,则将第一主顶点的下一状态信息同步到第一主顶点的镜像,其中,工作节点所存储的子图的顶点集中的顶点称为主顶点,存储主顶点的工作节点称为主顶点及镜像对应的主节点。
若更新了镜像的下一状态信息,则将镜像的下一状态信息发送到镜像对应主节点,使得主节点根据镜像的下一状态信息,更新镜像对应的第二主顶点的下一状态信息,并将更新后第二主顶点的下一状态信息同步到第二主顶点的所有镜像。
也就是说,当第一节点(任一工作节点)上主顶点的下一状态信息更新后,第一节点向该主顶点的镜像所在的第二节点发送消息,以将该主顶点的下一状态信息同步到其镜像。
例如,第一节点运行顶点映射算子(VERTEXMAP)或稠密型边映射算子(EDGEMAPDENSE)时,会更新主顶点的下一状态信息,此时,第一节点发送消息将主顶点的下一状态信息同步到其镜像。
当第一节点上镜像的下一状态信息更新后,第一节点向镜像对应主顶点所在第三节点发送消息,以将镜像更新后的下一状态信息发送至第三节点。第三节点处理第一节点发送的消息,并确定该镜像对应主顶点的最终状态信息,并将该主顶点的最终状态信息同步(如广播)到必要的镜像上,这一过程有两轮消息传输。
例如,第一节点运行稀疏型边映射算子(EDGEMAPSPARSE)时,会产生镜像的临时新值,镜像的状态信息的同步过程分为三个阶段:首先,第一节点聚合镜像的临时新值和当前状态信息,确定镜像的下一状态信息;然后,第一节点发送消息给该镜像对应主顶点所在的工作节点(即第三节点),将该镜像的下一状态信息传输至第三节点,第三节点处理这些消息,确定该镜像对应主顶点的最终的下一状态信息;最后,第三节点将该主顶点的下一状态信息广播到该主顶点的所有镜像。
本实施例中通过中间件实现不同工作节点间的通信(消息传输)时,仅主顶点仅与必要镜像通信,可以消除冗余消息的传输。对于普通的图计算任务,消息沿边传输。因此,主顶点通常仅与该主顶点至少一个邻居顶点所在工作节点上该主顶点的镜像进行通信,而无需与所有工作节点进行通信。将数据同步时传输的消息数从所有工作节点数m减少到同步到必要的镜像数。仅在边映射算子(EDGEMAP)中指定边集包含虚拟边的情况下,超出了图数据原边集的范围,才会将主节点上主顶点的下一状态信息同步到所有镜像所在工作节点。
基于中间件,通过读取顶点的当前状态信息和修改下一状态信息来满足计算过程中的数据访问需求,并自适应地选择更新模式实现消息传递和消息处理完成的数据同步,保证数据一致性。
在实际应用中,顶点可以具有多种类型的属性信息,而图计算任务并不一定更新所有属性的信息。只有在该顶点的属性信息被其他顶点访问时,该顶点的属性才是关键的。如果顶点的属性信息仅作为由主顶点读取,则意味着它仅在本地计算中有用,并不关键。在具体应用中,不同的图计算任务中的关键属性不同。如果顶点的状态信息包含顶点的所有属性信息,工作节点维护顶点的当前状态信息和下一状态信息将占用很多的内存空间,在进行数据同步时同步下一状态信息中所有的属性信息,数据同步的数据量较大,执行效率低。
因此,在一可选实施例中,可以对控制流信息进行静态分析,来确定图数据包含的各个类型的属性信息中,在图计算任务处理过程中被访问的一种或多种类型的属性信息,将被访问的属性信息作为关键属性;在分布式运行时上的不同工作节点间同步顶点的下一状态信息时,仅同步顶点的下一状态信息中的关键属性。
在同步顶点的下一状态信息时,仅同步其中的关键属性,可以将单个消息的大小从所有属性信息的总大小,减少到仅关键属性的大小,可以降低分布式图计算系统固定通信成本,提高通信效率。
在图计算任务处理过程中,仅关注顶点的关键属性,将顶点的关键属性作为顶点的状态信息,存储的顶点的当前状态信息和下一状态信息都只包含关键属性,可以节省内存空间。
示例性地,代码生成器可以对控制流信息进行静态分析,确定关键属性时,若某一类型的属性信息仅作为稠密型边映射算子(EDGEMAPDENSE)中源顶点的属性信息获取的,或者仅作为稀疏型边映射算子(EDGEMAPSPARSE)中目标顶点的属性信息获得/输入的,那么可以确定该类型的属性信息是关键属性。
在一可选实施例中,可以在每个工作节点上维护一个包含多个线程的线程池。其中,一个线程负责工作节点间的消息发送,另一线程通过信息传输接口(MPI)接收消息,剩余线程执行以顶点为中心的并行图计算处理。
也就说,每一工作节点运行有第一线程、第二线程和至少一个第三线程。其中,第一线程用于通过信息传递接口(MPI)发送消息,第二线程用于通过信息传递接口(MPI)接收消息,至少一个第三线程用于并行地进行多个顶点的图计算。
示例性地,对于每一工作节点,可以根据工作节点的内核数量,在线程池中维护对应数量的线程。如,对于具有c核的工作节点,维护一个包含c个线程的线程池。
本实施例中,由于创建了单独的线程来执行消息传输,可以联合调度计算和通信,实现通信与计算的并行处理,重叠两个过程的时间,减少总时间开销,可以加快各种图计算任务的处理速度,提升分布式图计算系统的性能。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。 “多个”的含义是两个以上,除非另有明确具体的限定。
图5为本申请一示例实施例提供的分布式图计算系统的架构图。如图5所示,该分布式图计算系统50包括:云侧设备51和端侧设备52。
其中,云侧设备51,用于向端侧设备52提供算子库,算子库包括用于图计算的算子,算子允许用户指定进行图计算的顶点集和用于传输消息的边集。
端侧设备52,用于图计算任务的图数据、进行图计算的指定顶点集、用于传输消息的指定边集、以及使用图计算的算子实现的控制流信息,将图数据、指定顶点集、指定边集和控制流信息,发送至云侧设备。
云侧设备51用于将控制流信息转换为基于中间件的可执行代码;在运行有中间件的分布式运行时上执行可执行代码,根据图数据、指定顶点集和指定边集,执行图计算任务,以更新指定顶点集中顶点的状态信息,得到更新后的图数据;根据更新后的图数据中顶点的状态信息,输出图计算任务的执行结果。
云侧设备51,还用于将图计算任务的执行结果输出至端侧设备52。
本实施例中,云侧设备是分布式集群,可以基于分布式云架构实现。云侧设备上部署有分布式图计算系统,用于提供分布式图计算的服务。需要说明的是,本实施例中云侧设备可以同时向一个或者多个端侧设备提供分布式图计算的服务。云侧设备具体实现前述任一实施例提供的分布式图计算系统的功能,其实现原理和技术效果类似,此处不再赘述。
端侧设备可以是需使用图计算能力实现图计算任务的用户端设备,可以是各类平台的云服务器、本地设备、客户端设备、物联网设备等。如,可以是电子商务、社交网络、智能交通等平台的服务器,也可以是具有网络路由功能的设备等等。不同的端侧设备可以有不同应用领域/场景,可以具有不同的图计算需求。
在一可选实施例中,云侧设备可以是分布式云架构的中心云设备,端侧设备是分布式云架构的边缘云设备。由边缘云设备与用户设备通信获取图计算任务的图数据、进行图计算的指定顶点集、用于传输消息的指定边集、以及使用图计算的算子实现的控制流信息,并传输至中心云。中心云将控制流信息转换为基于中间件的可执行代码;在运行有中间件的分布式运行时上执行可执行代码,根据图数据、指定顶点集和指定边集,执行图计算任务,以更新指定顶点集中顶点的状态信息,得到更新后的图数据;根据更新后的图数据中顶点的状态信息,输出图计算任务的执行结果。再由边缘云将图计算任务的执行结果输出。
图6为本申请实施例提供的一种云服务器的结构示意图。如图6所示,该云服务器60包括:存储器601和处理器602。存储器601,用于存储计算机程序,并可被配置为存储其它各种数据以支持在云服务器上的操作。处理器602,与存储器601耦合,用于执行存储器601中的计算机程序,以实现前述实施例中分布式图计算系统的功能,其实现原理和技术效果类似,此处不再赘述。
可选的,如图6所示,该云服务器还包括:防火墙603、负载均衡器604、通信组件605、电源组件606等其它组件。图6中仅示意性给出部分组件,并不意味着电子设备只包括图6所示组件。
本申请实施例提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现上述任一方法实施例所提供的方法/系统,具体功能和所能实现的技术效果此处不再赘述。
本申请实施例提供一种计算机程序产品,计算机程序产品包括:计算机程序,计算机程序存储在可读存储介质中,电子设备的至少一个处理器可以从可读存储介质读取计算机程序,至少一个处理器执行计算机程序使得电子设备执行上述任一方法实施例所提供的方法/系统,具体功能和所能实现的技术效果此处不再赘述。
本申请实施例提供一种芯片,包括:处理模块与通信接口,该处理模块能执行前述方法实施例中云端设备的技术方案。可选的,该芯片还包括存储模块(如,存储器),存储模块用于存储指令,处理模块用于执行存储模块存储的指令,并且对存储模块中存储的指令的执行使得处理模块执行前述实施例中分布式图计算系统的功能,其实现原理和技术效果类似,此处不再赘述。
上述存储器可以是对象存储(Object Storage Service,OSS)。
上述存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
上述通信组件被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G、3G、4G/LTE、5G等移动通信网络,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,通信组件还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
上述电源组件,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。

Claims (14)

1.一种分布式图计算系统,其特征在于,包括:
算子库,提供用于实现图计算任务的控制流的算子,所述算子允许用户指定图计算中用于消息传输的边集;
代码生成器,将使用所述算子库中至少一个算子实现的控制流信息,转换为基于中间件的可执行代码;
中间件,用于根据图计算任务的图数据、进行图计算的指定顶点集、用户指定的用于传输消息的指定边集H,在运行有所述中间件的分布式运行时上执行所述可执行代码,执行所述图计算任务,更新所述指定顶点集中顶点的状态信息,并通过所述指定边集H传输消息,得到更新后的图数据,其中所述指定边集H中的边包含所述图数据中不存在的虚拟边,所述虚拟边包括如下至少一种:反向边、多跳边、通过指定起点和终点构成的任意边;
图处理组件,用于根据更新后的图数据中顶点的状态信息,输出所述图计算任务的执行结果。
2.根据权利要求1所述的系统,其特征在于,所述算子库提供如下至少一种算子:
顶点映射算子,用于在指定顶点集U1中,筛选出经第一条件检查函数F1检查通过的第一顶点,使用第一映射函数M1计算所述第一顶点的更新状态,其中,所述第一条件检查函数F1和第一映射函数M1是由用户编程实现的接口函数;
边映射算子,用于在指定边集H中,筛选出源顶点位于指定顶点集U2中、且目标顶点经顶点检查函数C检查通过的第一边,从所述第一边中筛选出经第二条件检查函数F2检查通过的第二边,使用第二映射函数M2计算所述第二边的目标顶点的临时新值,并根据更新模式和聚合函数R,将所述目标顶点的临时新值与原值聚合,得到所述目标顶点的更新状态;
其中,所述顶点检查函数C、第二条件检查函数F2、第二映射函数M2和聚合函数R是由用户编程实现的接口函数。
3.根据权利要求1所述的系统,其特征在于,所述中间件还用于:
在运行有所述中间件的分布式运行时上,根据所述可执行代码生成多个有序排列的超级步,不同超级步之间同步执行;
在执行每一所述超级步的过程中,读取所述指定顶点集中顶点的当前状态信息,基于顶点的当前状态信息和所述指定边集进行图计算,确定所述指定顶点集中至少一个顶点的更新状态;
将任一顶点的更新状态,存储为所述顶点的下一状态信息;
在当前超级步结束时,在所述分布式运行时上的不同工作节点间同步顶点的下一状态信息,并用顶点的下一状态信息更新当前状态信息,以将当前超级步中顶点的下一状态信息作为下一超级步启动时顶点的当前状态信息。
4.根据权利要求3所述的系统,其特征在于,所述中间件还用于:
在执行每一所述超级步的过程中,对于当前超级步中计算得到的任一顶点的临时新值,若当前的更新模式为拉模式,则将所述顶点的临时新值作为所述顶点的更新状态;
若当前的更新模式为推模式,则根据聚合函数R,将所述顶点的临时新值和当前状态信息聚合,得到所述顶点的更新状态。
5.根据权利要求4所述的系统,其特征在于,所述中间件还用于:
根据当前超级步中活动顶点集的密度类型,确定当前的更新模式;
若所述活动顶点集为稠密型,则确定当前的更新模式为拉模式;
若所述活动顶点集为稀疏型,则确定当前的更新模式为推模式。
6.根据权利要求3所述的系统,其特征在于,所述中间件还用于:
在同步顶点的下一状态信息时,对于任一工作节点,若更新了第一主顶点的下一状态信息,则将所述第一主顶点的下一状态信息同步到所述第一主顶点的镜像,其中,所述工作节点所存储的子图的顶点集中的顶点称为主顶点,存储所述主顶点的工作节点称为所述主顶点及镜像对应的主节点;
并且,
若更新了镜像的下一状态信息,则将所述镜像的下一状态信息发送到所述镜像对应主节点,使得所述主节点根据所述镜像的下一状态信息,更新所述镜像对应的第二主顶点的下一状态信息,并将更新后所述第二主顶点的下一状态信息同步到所述第二主顶点的所有镜像。
7.根据权利要求3或6所述的系统,其特征在于,
所述代码生成器,还用于若所述图数据中的顶点包含多种类型的属性信息,则对所述控制流信息进行静态分析,确定所述多种类型的属性信息中被访问的关键属性;
所述中间件,还用于在所述分布式运行时上的不同工作节点间同步顶点的下一状态信息时,仅同步顶点的下一状态信息中的所述关键属性。
8.根据权利要求1-6中任一项所述的系统,其特征在于,所述分布式运行时包含m个工作节点,
所述图处理组件,还用于将所述图数据划分为m个子图,将所述m个子图的顶点集分别存储到m个工作节点;
所述中间件,还用于在每一所述工作节点上执行所述可执行代码,根据所述图数据、指定顶点集和指定边集,对所存储的子图的顶点集进行图计算,并在需使用本地未存储的远程顶点的状态信息时,创建所需使用的远程顶点的镜像。
9.根据权利要求8所述的系统,其特征在于,每一所述工作节点运行有如下多个线程:
第一线程,用于通过信息传递接口发送消息;
第二线程,用于通过信息传递接口接收消息;
至少一个第三线程,用于并行地进行多个顶点的图计算。
10.一种分布式图计算方法,其特征在于,包括:
获取图计算任务的图数据、进行图计算的指定顶点集、用户指定的用于传输消息的指定边集H、以及使用图计算的算子实现的控制流信息,所述算子允许用户指定图计算中用于消息传输的边集;
将所述控制流信息转换为基于中间件的可执行代码;
在运行有所述中间件的分布式运行时上执行所述可执行代码,根据所述图数据、指定顶点集和指定边集H,执行图计算任务,以更新所述指定顶点集中顶点的状态信息,并通过所述指定边集H传输消息,得到更新后的图数据,其中所述指定边集H中的边包含所述图数据中不存在的虚拟边,所述虚拟边包括如下至少一种:反向边、多跳边、通过指定起点和终点构成的任意边;
根据更新后的图数据中顶点的状态信息,输出所述图计算任务的执行结果。
11.根据权利要求10所述的方法,其特征在于,所述在运行有所述中间件的分布式运行时上执行所述可执行代码,根据所述图数据、指定顶点集和指定边集,执行图计算任务,以更新所述指定顶点集中顶点的状态信息,包括:
在运行有所述中间件的分布式运行时上,根据所述可执行代码生成多个有序排列的超级步,不同超级步之间同步执行;
在执行每一所述超级步的过程中,读取所述指定顶点集中顶点的当前状态信息,基于顶点的当前状态信息和所述指定边集进行图计算,确定所述指定顶点集中至少一个顶点的更新状态;
将任一顶点的更新状态,存储为所述顶点的下一状态信息;
在当前超级步结束时,在所述分布式运行时上的不同工作节点间同步顶点的下一状态信息,并用顶点的下一状态信息更新当前状态信息,以将当前超级步中顶点的下一状态信息作为下一超级步启动时顶点的当前状态信息。
12.根据权利要求11所述的方法,其特征在于,所述在执行每一所述超级步的过程中,读取所述指定顶点集中顶点的当前状态信息,基于顶点的当前状态信息和所述指定边集进行图计算,确定所述指定顶点集中至少一个顶点的更新状态,包括:
在执行每一所述超级步的过程中,对于当前超级步中计算得到的任一顶点的临时新值,根据当前超级步中活动顶点集的密度类型,确定当前的更新模式;若当前的更新模式为拉模式,则将所述顶点的临时新值作为所述顶点的更新状态;
若当前的更新模式为推模式,则根据聚合函数R,将所述顶点的临时新值和当前状态信息聚合,得到所述顶点的更新状态。
13.根据权利要求11所述的方法,其特征在于,所述在当前超级步结束时,在所述分布式运行时上的不同工作节点间同步顶点的下一状态信息,包括:
在同步顶点的下一状态信息时,对于任一工作节点,若更新了第一主顶点的下一状态信息,则将所述第一主顶点的下一状态信息同步到所述第一主顶点的镜像,其中,所述工作节点所存储的子图的顶点集中的顶点称为主顶点,存储所述主顶点的工作节点称为所述主顶点及镜像对应的主节点;
并且,
若更新了镜像的下一状态信息,则将所述镜像的下一状态信息发送到所述镜像对应主节点,使得所述主节点根据所述镜像的下一状态信息,更新所述镜像对应的第二主顶点的下一状态信息,并将更新后所述第二主顶点的下一状态信息同步到所述第二主顶点的所有镜像。
14.一种分布式图计算系统,其特征在于,包括:
云侧设备,用于向端侧设备提供算子库,所述算子库包括用于图计算的算子,所述算子允许用户指定进行图计算的顶点集和用于传输消息的边集;
端侧设备,用于获取图计算任务的图数据、进行图计算的指定顶点集、用户指定的用于传输消息的指定边集H、以及使用图计算的算子实现的控制流信息,将所述图数据、指定顶点集、指定边集和所述控制流信息,发送至所述云侧设备;
所述云侧设备用于将所述控制流信息转换为基于中间件的可执行代码;在运行有所述中间件的分布式运行时上执行所述可执行代码,根据所述图数据、指定顶点集和指定边集H,执行图计算任务,以更新所述指定顶点集中顶点的状态信息,并通过所述指定边集H传输消息,得到更新后的图数据;根据更新后的图数据中顶点的状态信息,输出所述图计算任务的执行结果,其中所述指定边集H中的边包含所述图数据中不存在的虚拟边,所述虚拟边包括如下至少一种:反向边、多跳边、通过指定起点和终点构成的任意边;
所述云侧设备,还用于将图计算任务的执行结果输出至所述端侧设备。
CN202211460286.2A 2022-11-17 2022-11-17 分布式图计算系统和方法 Active CN115495056B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211460286.2A CN115495056B (zh) 2022-11-17 2022-11-17 分布式图计算系统和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211460286.2A CN115495056B (zh) 2022-11-17 2022-11-17 分布式图计算系统和方法

Publications (2)

Publication Number Publication Date
CN115495056A CN115495056A (zh) 2022-12-20
CN115495056B true CN115495056B (zh) 2023-03-07

Family

ID=85114729

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211460286.2A Active CN115495056B (zh) 2022-11-17 2022-11-17 分布式图计算系统和方法

Country Status (1)

Country Link
CN (1) CN115495056B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117972154A (zh) * 2024-03-27 2024-05-03 支付宝(杭州)信息技术有限公司 图数据处理方法和图计算引擎

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0881568A2 (en) * 1997-05-30 1998-12-02 Abb Sace Spa Procedure for partitioning control functions in distributed systems.
US6057847A (en) * 1996-12-20 2000-05-02 Jenkins; Barry System and method of image generation and encoding using primitive reprojection
CN105653204A (zh) * 2015-12-24 2016-06-08 华中科技大学 一种基于磁盘的分布式图计算方法
CN113177034A (zh) * 2021-05-06 2021-07-27 南京大学 一种跨平台统一的分布式图数据处理方法
CN114567634A (zh) * 2022-03-07 2022-05-31 华中科技大学 面向后e级图计算的方法、系统、存储介质及电子设备

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9400767B2 (en) * 2013-12-17 2016-07-26 International Business Machines Corporation Subgraph-based distributed graph processing
US10268776B1 (en) * 2016-09-23 2019-04-23 Amazon Technologies, Inc. Graph store built on a distributed hash table
CN110211197B (zh) * 2019-05-29 2020-10-02 山东大学 一种基于多边形空间划分的光子映射优化方法、装置及系统
CN111177486B (zh) * 2019-12-19 2020-09-08 四川蜀天梦图数据科技有限公司 一种分布式图计算过程中的消息传递方法和装置
CN112235550A (zh) * 2020-05-14 2021-01-15 陈洋洋 基于物联网和人工智能的安防监控方法、系统及服务器
CN113761011A (zh) * 2020-06-04 2021-12-07 阿里巴巴集团控股有限公司 对象关系计算方法、装置、设备及存储介质
CN112114984A (zh) * 2020-09-17 2020-12-22 清华大学 图数据处理方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6057847A (en) * 1996-12-20 2000-05-02 Jenkins; Barry System and method of image generation and encoding using primitive reprojection
EP0881568A2 (en) * 1997-05-30 1998-12-02 Abb Sace Spa Procedure for partitioning control functions in distributed systems.
CN105653204A (zh) * 2015-12-24 2016-06-08 华中科技大学 一种基于磁盘的分布式图计算方法
CN113177034A (zh) * 2021-05-06 2021-07-27 南京大学 一种跨平台统一的分布式图数据处理方法
CN114567634A (zh) * 2022-03-07 2022-05-31 华中科技大学 面向后e级图计算的方法、系统、存储介质及电子设备

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
GraphHP:一个图迭代处理的混合平台;苏静等;《华东师范大学学报(自然科学版)》;20160930(第05期);全文 *
IncGraph:支持实时计算的大规模增量图处理系统;申林等;《计算机科学与探索》;20130808(第12期);全文 *
面向分布式图计算的图划分算法研究;嵇圣硙;《中国优秀硕士学位论文全文数据库基础科学辑》;20200115;全文 *

Also Published As

Publication number Publication date
CN115495056A (zh) 2022-12-20

Similar Documents

Publication Publication Date Title
Chen et al. ThriftyEdge: Resource-efficient edge computing for intelligent IoT applications
Wang et al. Service placement for collaborative edge applications
CN115495056B (zh) 分布式图计算系统和方法
CN112822115B (zh) 一种基于插件式引擎的服务框架构建方法和系统
CN112906206B (zh) 数字孪生模型构建方法和装置
Bhatta et al. A bifactor approximation algorithm for cloudlet placement in edge computing
CN112965710A (zh) 计算图的处理方法、装置和系统
CN116011562A (zh) 算子处理方法及算子处理装置、电子设备和可读存储介质
CN116339985A (zh) 资源调度方法、装置、计算集群及数据库
Buchin et al. On the computational power of energy-constrained mobile robots: algorithms and cross-model analysis
CN111159577A (zh) 一种社群划分方法、装置、存储介质及电子装置
CN112714146B (zh) 一种资源调度方法、装置、设备及计算机可读存储介质
Dimolitsas et al. Time-efficient distributed virtual network embedding for round-trip delay minimization
Choo et al. Reliable vehicle selection algorithm with dynamic mobility of vehicle in vehicular cloud system
CN112395282A (zh) 一种图重构方法及装置
CN113163421B (zh) 分级网络的组建方法、装置、终端及介质
Hegyi Service deployment design in latency-critical multi-cloud environment
CN114024977A (zh) 一种基于边缘计算的数据调度方法、装置及系统
Han et al. Opportunistic coded distributed computing: An evolutionary game approach
CN114579506A (zh) 处理器之间的通信方法、系统、存储介质以及处理器
Tran-Dang et al. Distributed Computation Offloading Framework for Fog Computing Networks
Huang et al. Solving service selection problem based on a novel multi-objective artificial bees colony algorithm
Malashenko et al. Heterogeneous Flow Distribution at the Peak Load in the Multiuser NetworkK
CN107729154A (zh) 资源分配方法及装置
CN111638941B (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