GraphScope 的图分析引擎源自于 GRAPE 系统。本文介绍 GRAPE 的开源实现:高性能并行图分析 C++ 库 libgrape-lite。该图计算库具有性能优越、易用性好、模块化设计、支持自动并行化等特点,当前也是 GraphScope 项目的一个 submodule。
背景
图数据作为一种表示数据之间关系的抽象模型,可以直观、自然地表示现实世界中各种实体对象以及它们之间的关系。在大数据场景下,社交网络、交易数据、知识图谱、交通和通信网络、供应链和物流规划等都是典型的以图建模的例子。学术界和工业界现有的引擎有如 PowerGraph、Pregel、Spark GraphX 等。这些图计算引擎虽然可以解决大规模图计算的并行化问题,但是,其往往仅支持基于点中心模型的编程方法,需要编程者对相关领域有比较深刻的了解。这就使得图计算变成了少数算法专家的专利。而另一方面,图算法的研究已经进行了几十年,积累了大量算法,只是这些算法往往是串行化的,需要算法专家将其并行化后才能执行在以上这些平台上。
如何最大程度的复用现有的图计算算法?如何提升易编程性以降低图计算的门槛?如何保证并行图计算的正确性和终止性?为了解决以上问题,樊文飞教授与 GraphScope 团队核心成员在 2017 年研发了并在 SIGMOD'2017上发表了 GRAPE[1] (GRAPh computation Engine),一个全新的大规模分布式图计算引擎。GRAPE 获得了 SIGMOD'2017 最佳论文奖、VLDB'2017 最佳演示奖和 SIGMOD 研究亮点奖等奖项。
为了检验 GRAPE 系统在实际场景中的有效性与性能,近两年来我们在阿里巴巴集团广泛实践,支持了阿里集团内各种图计算相关业务,并取得了良好的效果。我们选择将其最核心的计算库精简版 libgrape-lite[2] 开源,与社区共同探索应用范式、多样化场景的更多实践。同时,libgrape-lite作为开源一站式图计算平台GraphScope的图分析引擎,提供了图分析的底层能力支持。
libgrape-lite 的设计
libgrape-lite 是一个近乎 Header-Only 的库,主要的函数和功能都在头文件中提供了带模板参数的实现,方便用户适配各种复杂数据类型。相比于现在已有的图计算系统,libgrape-lite 继承了 GRAPE 的各项优势,例如具有坚实的理论保证、易编程、自动并行化、高性能等。
libgrape-lite 的核心构成
libgrape-lite的核心构成部分如上图所示。
-
图数据结构 Fragment。Fragment 是图数据的一个分区,也是 libgrape-lite 中一个计算节点上的图处理对象;
-
管理通讯策略的 MessageMessager,负责显式或隐式的管理分区之间的消息通信和状态同步等;
-
用户编写的应用主体逻辑 Application,在 Application 中,用户通过操作本地的 Fragment 或者通过 MessageManager 收发消息。具体应用的编程模型见下文。
-
工作节点类 Worker,它负责载图/分区,调用应用程序对本地 Fragment 进