GraphScope的设计¶
现实生活中的图计算应用通常比我们目前所见的负载更为复杂,这凸显了对图处理系统进行灵活智能设计的必要性。在本节中,我们将介绍GraphScope的模块化设计,以及它如何满足图计算负载的多样化需求。
动机¶
随着图数据及其应用的快速增长,众多图处理系统应运而生。然而现有系统往往专注于特定类型的图计算,而现实场景通常需要能处理多种图计算的工具或系统。例如在电商平台中,部分商家和买家可能通过合谋进行虚假交易和评价,以此提升信用评级和搜索排名。实际应用中,所有用户和交易都可以表示为包含买家、商家、商品等顶点,以及购买、销售、评价等关系边的大规模图结构。
电商领域的一个示例¶
为了在交易图中识别可疑用户和交易,反欺诈工作流程可能包含以下步骤:
从外部存储使用数据并行系统构建图。
应用如k-clique或k-core等挖掘算法来提取可疑模式。
使用标签传播算法识别潜在的欺诈顶点。
为每个顶点执行k跳邻域采样(使用图神经网络GNN),并将结果输入深度学习框架(如TensorFlow),基于GNN模型进行欺诈预测。
将结果呈现在可视化的WebUI中,支持交互式探索结果和图数据,便于人工验证。
如该流程所示,现实中的图计算通常更为复杂,单个工作负载内可能涉及多种类型的图计算。这种情况带来了诸多挑战。应用的编程抽象范围广泛,从面向迭代算法的顶点中心模型,到图遍历的随机游走,再到模式匹配的专门化处理。因此,开发者往往需要整合多个系统,处理跨系统的数据表示、资源利用和性能调优等复杂问题。此外,每个应用都有其独特的运行时特性,需要在计算引擎中做出不同的权衡与优化,这些优化应与特定的编程抽象紧密关联。最后,由于图计算工作负载的多样性,系统应设计得足够灵活,以支持不同类型的图计算,无论是复杂流程还是简单任务。
为了解决这些挑战,我们推出了GraphScope,采用分层解耦架构,为大规模图计算提供全面高效的平台。
统一图计算平台¶
GraphScope 是一个全面、生产就绪的系统,用于大规模图数据的端到端分析。 为实现这一目标,各组件必须无缝协作, 包括集群管理(部署)软件、图存储(用于输入、输出和中间结果)、 分布式执行引擎、语言结构以及开发工具。
GraphScope 工作流程¶
应用层¶
图处理通常需要为每个特定任务定制应用程序。这些任务可能包括使用Gremlin、Cypher或GQL进行交互式查询,使用迭代计算(如PageRank、连通分量)进行图分析,或为图学习任务构建GNN模型。对于交互式查询,GraphScope支持Apache基金会开发的广泛使用的遍历语言Gremlin。对其他语言(如Cypher和GQL)的支持正在开发中。对于图分析和学习任务,GraphScope内置了包含各领域常见算法(如图神经网络、聚类和模式匹配)的库。为了简化新图应用的开发,GraphScope允许程序员使用高级通用编程模型编写代码,就像在单机上开发一样,而系统会处理分布式执行的复杂性。这种方法使GraphScope能够在单一统一平台内无缝集成多个图执行引擎,如下所述。
执行引擎层¶
GraphScope执行层包含三个引擎:GraphScope交互式引擎(GIE)、GraphScope分析引擎(GAE)和GraphScope学习引擎(GLE)。这些引擎分别提供交互式查询、分析计算和图机器学习功能。这些执行引擎的共同特点是都能自动支持其目标领域中查询和算法的高效分布式执行。每个查询或算法都会被GraphScope自动透明地编译为分布式执行计划,分配到多个计算节点上并行执行。每个分区运行在独立计算节点上,由本地执行器管理,该执行器负责在多核服务器上调度和执行计算。这些引擎可以部署为完整的GraphScope协同工作,能够处理复杂多样的工作流,包括分析计算、交互式查询和图神经网络(GNN)计算的任意组合。此外,这些引擎也可以单独部署,独立完成特定任务。
存储层¶
GraphScope定义了一个统一的存储接口,用于访问和管理图数据。 该接口使存储层具备灵活性和可扩展性, 能够轻松集成不同的存储后端。GraphScope包含多种图存储系统,例如vineyard, 这是一种内存存储,可在集群中维护分区数据对象, 并实现在工作流中跨引擎无拷贝共享数据。 此外还提供了名为groot的磁盘式多版本持久化图存储系统。 与专注于内存分析工作负载的vineyard不同, groot负责运行持续的图数据管理服务并处理频繁的图数据更新。 GraphScope还拥有归档存储功能,支持通过bin-log从关系数据库快速同步数据, 并为基于图定义的计算任务创建图视图。 此外,阿里巴巴内部还使用多种自研管理的图存储系统, 同时一些第三方存储系统也准备集成。 得益于统一接口,用户可根据需求选择合适的存储系统, 而引擎层可以透明使用无需任何修改。
面向多样化图应用的解耦式设计¶
GraphScope采用分离式设计, 允许用户仅部署选定的组件来简化部署并满足特定需求。 例如,如果用户只需要在社交网络图上运行社区检测, 仅部署分析引擎就足够了。 在GraphScope的系统设计中,组件分为三层:应用层、 引擎层和存储层。用户可以从这三层中选择组件来创建定制化部署。 这种灵活的设计使得GraphScope能够针对各种图计算场景进行部署和优化。
接下来,我们将重点介绍GraphScope的一些特色部署案例。
GraphScope 商业智能分析工具¶
BI分析用户通常是业务分析师,他们通过Web界面交互式查询和分析数据。 在此场景下,并发性并非首要考量,但复杂查询的低延迟至关重要。 GraphScope作为动态演化图上的交互式查询应答服务运行。 在应用层,它支持Gremlin或Cypher查询语言。 引擎层部署了交互式引擎(GIE)。当引擎接收到Gremlin/Cypher编写的查询时, 编译器GAIA会将查询编译为统一的中间表示(IR)。 随后应用通用查询优化器对IR进行优化,并将其转换为适用于不同后端的执行计划。 在此BI场景中,查询类似OLAP风格,因此IR会被解释为数据并行执行计划。 接着代码生成模块会生成物理执行计划并应用于Pegasus—— 这是GIE核心基于循环数据流计算模型的分布式数据并行计算引擎。 存储层部署了动态图存储系统,负责存储图数据。 通过这种组合,GraphScope为BI分析提供了高性能的交互式查询应答服务。
GraphScope 支持高 QPS 查询¶
在某些服务场景中,例如推荐或搜索场景,图查询请求会以极高的频率到达。 GraphScope可以通过部署与BI场景类似的组件集来处理这些场景。 不过,通用查询优化器会生成更适合高QPS查询的执行计划。 随后,专用代码生成模块会为另一个核心引擎Hiactor生成物理执行计划,这是一个高性能并发actor框架,在GIE核心层负责处理类OLTP查询。 由于存储层提供了统一接口, 用户可以根据实际需求选择部署内存图存储(如vineyard)或持久化图存储(如groot)。 值得注意的是,GraphScope针对高QPS查询的部署方式与BI分析部署类似。 但通用优化器会根据不同的工作负载特征生成不同的执行计划,并将其分发到不同的后端处理引擎。
GraphScope 图分析工具¶
GraphScope 在图分析任务中既高效又易于使用。 在此场景中,应用程序以内置库中的迭代算法形式提供,或由用户自定义实现。 这些算法可通过 FLASH-style API、Pregel API 或 GRAPE 原生 API 进行开发。 所有类型的算法均在引擎层编译,并运行于 GRAPE 系统——该系统源自 SIGMOD 2017 发表的这篇论文。 GRAPE 的独特优势在于能将顺序图算法整体并行化。 在 GRAPE 中,仅需微小改动即可轻松"接入"顺序算法,使其高效处理大规模图数据。 为实现高性能,此场景的部署通常选择内存图存储作为存储层。
用于学习的GraphScope¶
图神经网络(GNNs)已在众多实际应用中展现出显著效果,例如在十亿级图数据普遍存在的电商推荐系统和金融风控平台中。GraphScope的学习引擎(GLE)能够高效支持这些工业场景下的大规模图分布式训练。GLE为图采样操作提供了Python和C++双接口,以及类Gremlin的GSL(图采样语言)接口,可简化采样查询的定义。针对GNN模型开发,GLE提供多种范式与流程支持,并内置丰富的示例模型库。用户可灵活选择TensorFlow或PyTorch作为训练后端。为实现灵活且高性价比的资源配置,GLE将采样与训练过程解耦,使两者能够独立扩展,从而获得最优的端到端吞吐性能。