概述与架构¶
在GraphScope中,图形分析引擎(GAE)负责处理各种图分析算法。GAE源自GRAPE,这是2017年SIGMOD会议上提出的图处理系统。GRAPE与先前系统的不同之处在于它能够将顺序图算法作为一个整体进行并行化。与其他需要将现有顺序算法重新构建为新模型(如Pregel和GAS)的并行图处理系统不同,在GRAPE中,只需进行少量修改即可轻松"插入"顺序算法,并将其并行化以高效处理大型图。除了编程简便性外,GRAPE还设计为高效灵活,以应对现实图应用的规模、多样性和复杂性。
架构¶
GAE是一个成熟的生产级系统,用于在大规模图数据上执行图分析算法。如下图所示,GAE包含三个主要层级:存储层、引擎层和应用层。接下来我们将逐一概述这些层级。
GAE的架构。¶
存储层:现实生活中的图数据规模极其庞大,因此图存储以分布式方式存储图数据。图存储包含具有不同特性的多种图格式。尽管存在多种类型的图存储,但GraphScope为GAE及其他计算引擎提供了统一的图存储接口,因此GAE无需关心每种图存储的具体实现方式。
引擎层:GAE的核心是其引擎层。它构建在GRAPE之上,提供了许多高效的图特定优化。基于GRAPE,GAE为用户提供了三种编程模型(即Pregel、PIE和FLASH),用户可以通过友好的接口开发自己的图应用。GAE的执行引擎采用C++编写,并通过FFI(外部函数接口)支持其他编程语言(即Java和Python),从而更好地与其他大数据生态系统集成。此外,GAE支持批处理和增量计算两种模式,用户可以根据需求自由选择属性计算模式。
应用层:应用层提供了一个应用SDK,为用户提供友好的接口来访问图结构/属性数据以及在不同子图(片段)之间进行通信,从而用户可以轻松开发自己的算法。图分析算法可以直接使用应用SDK编写,但我们也构建了一个内置算法库,包含针对各种应用领域的常见算法,以简化新图应用的开发。
存储层¶
与许多图处理系统类似,GraphScope使用属性图模型来表示图数据。为了支持大规模图数据,GraphScope采用边切分策略将图划分为多个子图(片段)。
GraphScope中的图存储包含多种图格式类型,每种格式专用于特定场景。部分存储支持实时图更新,而其他存储则将图数据视为创建后不可变的静态数据。有些存储将图数据保存在内存中以获得更佳性能,另一些则支持持久化存储。值得庆幸的是,所有这些存储都通过GRIN实现了统一集成——这是由GraphScope定义的统一图存储接口。因此计算引擎无需感知各存储实现的差异。如需了解图存储接口的更多细节,请参阅我们的GRIN介绍。
引擎层¶
GAE引擎层包含四大核心组件,为图算法提供简单易用的接口。
GRAPE引擎¶
GAE引擎层的基础是GRAPE,它提供了图分析的核心功能,包括访问子图(片段)的顶点/边、访问顶点/边的属性数据、不同片段之间的状态同步以及中间数据管理。同时,GRAPE应用了许多图级别的优化技术,如索引、压缩、动态推/拉切换、流水线和负载均衡,以实现更好的性能。有关这些优化技术的更多详情,请参阅此链接。
编程模型API¶
目前,GAE支持三种编程模型的API:Pregel、PIE和FLASH。Pregel是现有流行图处理系统(如GraphX和Giraph)中广泛应用的以顶点为中心的编程模型。PIE由GRAPE提出,只需稍作修改即可自动并行化现有的串行图算法。FLASH是一种灵活的编程模型,可帮助用户轻松实现复杂的图算法。用户可以根据自身背景和需求自由选择这三种编程模型之一。
FFIs¶
GRAPE引擎采用C++编写以获得更佳性能,GAE还通过FFI(外部函数接口)提供了Python和Java接口。借助Python,GraphScope能自然地与Pandas、Mars等其他Python数据处理系统进行交互操作。基于名为fastFFI的高效Java与C++ FFI技术,GAE支持用户直接编写Java应用程序并在GAE上运行。请参阅我们的教程了解如何使用Python和Java开发算法。
增量计算引擎¶
GAE还支持通过Ingress引擎对图数据进行增量计算,我们首先应用批量算法在原始图G上计算一次结果,然后采用增量算法根据输入变化\(\Delta\)G来调整旧结果。为了实现这一点,基于动态图存储,我们实现了可以捕获原始图与新图之间变化的Ingress片段。更多详情请参阅我们对Ingress引擎的详细介绍。
应用层¶
GAE为图应用提供了C++、Python和Java SDK,用户可自由选择编程模型、编程语言和计算模式(批量计算或增量计算)来开发自己的应用。GraphScope的GAE还内置了20种图分析算法,用户可直接调用。GraphScope兼容NetworkX API,因此用户也能直接调用NetworkX中的各类内置算法。总计有超过100种内置图分析算法可在GraphScope上直接执行。此外,GAE已实现Pregel模型支持,Giraph或GraphX中实现的图算法也能直接在GAE上运行。关于如何在GAE上运行NetworkX/Giraph/GraphX应用,请参阅以下教程。