一张图读懂TuGraph Analytics开源技术架构
TuGraph Analytics(内部项目名GeaFlow)是蚂蚁集团开源的分布式实时图计算引擎,即流式图计算。通过SQL+GQL融合分析语言对表模型和图模型进行统一处理,实现了流、批、图一体化计算,并支持了Exactly Once语义、高可用以及一站式图研发平台等生产化能力。
开源项目代码目前托管在GitHub,欢迎业界同仁、大数据/图计算技术爱好者关注我们的项目并参与共建。
项目地址:https://github.com/TuGraph-family/tugraph-analytics
GeaFlow论文【SIGMOD 2023】:GeaFlow: A Graph Extended and Accelerated Dataflow System
概览
本文希望通过一张图描述清楚TuGraph Analytics的整体架构脉络和关键设计思路,以帮助大家快速对TuGraph Analytics项目的轮廓有个整体的认识。闲言少叙,直接上图。

TuGraph Analytics开源技术架构一共分为五个部分:
- DSL层:即语言层。TuGraph Analytics设计了SQL+GQL的融合分析语言,支持对表模型和图模型统一处理。
- Framework层:即框架层。TuGraph Analytics设计了面向Graph和Stream的两套API支持流、批、图融合计算,并实现了基于Cycle的统一分布式调度模型。
- State层:即存储层。TuGraph Analytics设计了面向Graph和KV的两套API支持表数据和图数据的混合存储,整体采用了Sharing Nothing的设计,并支持将数据持久化到远程存储。
- Console平台:TuGraph Analytics提供了一站式图研发平台,实现了图数据的建模、加工、分析能力,并提供了图作业的运维管控支持。
- 执行环境:TuGraph Analytics可以运行在多种异构执行环境,如K8S、Ray以及本地模式。
DSL层
DSL层是一个典型的编译器技术架构,即语法分析、语义分析、中间代码生成(IR)、代码优化、目标代码生成(OBJ)的流程。

- 语言设计:TuGraph Analytics设计了SQL+GQL的融合语法,解决了图+表一体化分析的诉求。具体语法设计可以参考文章:DSL语法文档
- 语法分析:通过扩展Calcite的SqlNode和SqlOperator,实现SQL+GQL的语法解析器,生成统一的语法树信息。
- 语义分析:通过扩展Calcite的Scope和Namespace,实现自定义Validator,对语法树进行约束语义检查。
- 中间代码生成:通过扩展Calcite的RelNode,实现图上的Logical RelNode,用于GQL语法的中间表示。
- 代码优化:优化器实现了大量的优化规则(RBO)用于提升执行性能,未来也会引入CBO。
- 目标代码生成:代码生成器Converter负责将Logical RelNode转换为Physical RelNode,即目标代码。Physical RelNode可以直接翻译为Graph/Table上的API调用。
- 自定义函数: TuGraph Analytics提供了大量的内置系统函数,用户也可以根据需要注册自定义函数。
- 自定义插件: TuGraph Analytics允许用户扩展自己的Connector类型,以支持不同的数据源和数据格式。
Framework层
Framework层设计与Flink/Spark等同类大数据计算引擎有一定的相似性,即提供了类FlumeJava(FlumeJava: Easy, Efficient Data-Parallel Pipelines)的统一高阶API(简称HLA),用户调用高阶API的过程会被转换为逻辑执行计划,逻辑执行计划执行一定的优化(如ChainCombine、UnionPushUp等)后,被转换为物理执行计划,物理执行计划会被调度器分发到分布式Worker上执行,最终Worker会回调用户传递的高阶API函数逻辑,实现整个分布式计算链路的执行。

- 高阶API:TuGraph Analytics通过Environment接口适配异构的分布式执行环境(K8S、Ray、Local),使用Pipeline封装了用户的数据处理流程,使用Window抽象统一了流处理(无界Window)和批处理(有界Window)。Graph接口提供了静态图和动态图(流图)上的计算API,如append/snapshot/compute/traversal等,Stream接口提供了统一流批处理API,如map/reduce/join/keyBy等。
- 逻辑执行计划:逻辑执行计划信息统一封装在PipelineGraph对象内,将高阶API对应的算子(Operator)组织在DAG中,算子一共分为5大类:SourceOperator对应数据源加载、OneInputOperator/TwoInputOperator对应传统的数据处理、IteratorOperator对应静态/动态图计算。DAG中的点(PipelineVertex)记录了算子(Operator)的关键信息,如类型、并发度、算子函数等信息,边(PipelineEdge)则记录了数据shuffle的关键信息,如Partition规则(forward/broadcast/key等)、编解码器等。
- 物理执行计划:物理执行计划信息统一封装在ExecutionGraph对象内,并支持二级嵌套结构,以尽可能将可以流水线执行的子图(ExecutionVertexGroup)结构统一调度。图中示例的物理执行计划DAG被划分为三部分子图结构分别执行。
- 调度器:TuGraph Analytics设计了基于Cycle的调度器(CycleScheduler)实现对流、批、图的统一调度,调度过程通过事件驱动模型触发。物理执行计划中的每部分子图都会被转换为一个ExecutionCycle对象,调度器会向Cycle的头结点(Head)发送Event,并接收Cycle尾结点(Tail)的发回的Event,形成一个完整的调度闭环。对于流处理,每一轮Cycle调度会完成一个Window的数据的处理,并会一直不停地执行下去。对于批处理,整个Cycle调度仅执行一轮。对于图处理,每一轮Cycle调度会完成一次图计算迭代。
- 运行时组件:TuGraph Analytics运行时会拉起Client、Master、Driver、Container组件。当Client提交Pipeline给Driver后,会触发执行计划构建、分配Task(ResourceManagement提供资源)和调度。每个Container内可以运行多个Worker组件,不同Worker组件之间通过Shuffle模块交换数据,所有的Worker都需要定期向Master上报心跳(HeartbeatManagement),并向时序数据库上报运行时指标信息。另外TuGraph Analytics运行时也提供了故障容忍机制(FailOver),以便在异常/中断后能继续执行。
State层
State层设计相比于传统的大数据计算引擎,除了提供面向表数据的KV存储抽象,也支持了面向图数据的Graph存储抽象,以更好地支持面向图模型的IO性能优化。

- State API:提供了面向KV存储API,如get/put/delete等。以及面向图存储的API,如V/E/VE,以及点/边的add/update/delete等。
- State执行层:通过KeyGroup的设计实现数据的Sharding和扩缩容能力,Accessor提供了面向不同读写策略和数据模型的IO抽象,StateOperator抽象了存储层SPI,如finish(刷盘)、archive(Checkpoint)、compact(压缩)、recover(恢复)等。另外,State提供了多种PushDown优化以加速IO访问效率。通过自定义内存管理和面向属性的二级索引也会提供大量的存储访问优化手段。
- Store层:TuGraph Analytics支持了多种存储系统类型,并通过StoreContext封装了Schema、序列化器,以及数据版本信息。
- 持久化层:State的数据支持持久化到远程存储系统,如HDFS、OSS、S3等。
Console平台
Console平台提供了一站式图研发、运维的平台能力,同时为引擎运行时提供元数据(Catalog)服务。

- 标准化API:平台提供了标准化的RESTful API和认证机制,同时支持了页面端和应用端的统一API服务能力。
- 任务研发:平台支持“关系-实体-属性”的图数据建模。基于字段映射配置,可以定义图数据传输任务,包括数据集成(Import)和数据分发(Export)。基于图表模型的图数据加工任务支持多样化的计算场景,如Traversal、Compute、Mining等。基于数据加速器的图数据服务,提供了多协议的实时分析能力,支持BI、可视化分析工具的接入集成。
- 构建提交:平台通过任务和作业的独立抽象,实现研发态与运维态的分离。任务开发完成后执行发布动作,会自动触发构建流水线(Release Builder),生成发布版本。任务提交器(Task Submitter)负责将发布版本的内容提交到执行环境,生成计算作业。
- 作业运维:作业属于任务的运行态,平台提供了作业的操纵(启停、重置)、监控(指标、告警、审计)、调优(诊断、伸缩、调参)、调度等运维能力。作业的运行时资源会由资源池统一分配和管理。
- 元数据服务:平台同时承载了引擎运行时的元数据服务能力,以实现研发与运维的自动化。元数据以实例维度进行隔离,实例内的研发资源可以根据名字直接访问,如点、边、图、表、视图、函数等。
- 系统管理:平台提供了多租户隔离机制、细粒度用户权限控制,以及系统资源的管理能力。
执行环境
TuGraph Analytics支持多种异构环境执行,以常见的K8S部署环境为例,其物理部署架构如下:

在TuGraph Analytics作业的全生命周期过程中,涉及的关键数据流程有:
- 研发阶段:Console平台提供了实例下所有的研发资源的管理,用户可以在创建任务前,提前准备所需的研发资源信息,并存储在Catalog。
- 构建阶段:任务创建完成后,通过发布动作触发构建流水线,用户的JAR包、任务的ZIP包等会上传到RemoteFileStore。
- 提交阶段:作业提交时,Console会根据作业的参数配置、运行时环境信息,以及远程文件地址等创建KubernetesJobClient,既而会拉起Client Pod,Client会拉起Master Pod,Master会拉起Container Pods和Driver Pod。所有的Pod拉起后,Client会把作业的Pipeline发送给Driver执行,Driver最终通过Cycle调度的Events与Containers交互。所有的Pod启动时都会从RemoteFileStore下载版本JAR包、用户JAR包、作业ZIP包等信息。Driver对DSL代码编译时,也需要通过Console提供的Catalog API操作Schema信息。
- 运行阶段:作业运行时,各个组件会上报不同的数据和信息。Master会上报作业的心跳汇总信息,Driver会上报作业的Pipeline/Cycle指标以及错误信息,Container会上报作业的Offset、指标定义以及错误信息等。RuntimeMetaStore存储作业的Pipeline/Cycle指标、Offset、心跳汇总、错误等信息。HAMetaStore存储各个运行组件的地址信息。DataStore存储State数据和作业FailOver时所需的元数据信息。MetricStore存储运行时指标信息。
- 监控阶段:Console会主要查询RuntimeMetaStore和MetricStore存储的信息用于作业的运行时监控。
- 清理阶段:作业重置/删除时,Console会对作业的RuntimeMeta、HAMeta以及部分Data做清理操作。
总结
希望通过以上的介绍,可以让大家对TuGraph Analytics开源技术架构有个比较清晰的了解,我们非常欢迎开源社区的技术爱好者参与到项目的建设中来。
如果您对TuGraph Analytics项目比较感兴趣,欢迎动动手指直达我们的GitHub仓库github.com/TuGraph-family/tugraph-analytics,为我们的项目加一颗Star。【网络不畅可以尝试使用VPN访问】
如果您对该项目的发展有好的建议和意见,欢迎大家提交Issue到开源社区,或者通过邮箱/钉钉群与我们直接联系。
邮箱:tugraph@service.alipay.com
钉钉群:TuGraph Analytics讨论群
一张图读懂TuGraph Analytics开源技术架构的更多相关文章
- 一张图读懂https加密协议
搭建CA服务器和iis启用https:http://blog.csdn.net/dier4836/article/details/7719532 一张图读懂https加密协议 https是一种加密传输 ...
- 一张图读懂PBN飞越转弯衔接DF航段计算
飞越转弯衔接TF航段时,转弯外边界与旁切转弯相似,只是在拐角位置直接以风螺旋绘制外边界,大部分切点可以精确计算得到. 飞越转弯衔接DF航段时,转弯外边界全部由风螺旋和它的切线构成,又会有哪些神奇的事情 ...
- 一张图读懂PBN飞越转弯衔接TF/CF航段计算
在PBN旁切转弯的基础上,再来看飞越转弯接TF(或CF)航段,保护区结构上有些相似,只是转弯拐角处的保护区边界有“简化”,其余部分是相近的. FlyOver接TF段的标称航迹有一个飞越之后转弯切入航迹 ...
- 比传统事务快10倍?一张图读懂阿里云全局事务服务GTS
近日,阿里云全局事务服务GTS正式上线,为微服务架构中的分布式事务提供一站式解决方案.GTS的原理是将分布式事务与具体业务分离,在平台层面开发通用的事务中间件GTS,由事务中间件协调各服务的调用一致性 ...
- 【Zigbee技术入门教程-02】一图读懂ZStack协议栈的基本架构和工作机理
[Zigbee技术入门教程-02]一图读懂ZStack协议栈的基本架构和工作机理 广东职业技术学院 欧浩源 ohy3686@foxmail.com Z-Stack协议栈是一个基于任务轮询方式的操作 ...
- 一张图读懂Java多线程
1.带着疑问看图 1)竞争对象的锁和竞争CPU资源以及竞争被唤醒 2)何种情况下获取到了锁,何种情况下会释放锁 2.还是那张图 3.详细图解 1)Thread t = new Thread(),初始化 ...
- 一张图读懂PBN旁切转弯计算
当DOC8168进入PBN章节以后,所有的保护区不再标注风螺旋的字母位置点.似乎ICAO已经有了精确计算的方法,只是没有告诉我们.沿着风螺旋的轨迹一路走来,切线与角度的换算方法想必已经相当熟悉了吧,这 ...
- 基础知识《零》---一张图读懂JDK,JRE,JVM的区别与联系
- 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
一张图看懂开源许可协议,开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL.BSD.MIT.Mozi ...
- 一张图看懂Function和Object的关系及简述instanceof运算符
我在写一篇图解prototype和__proto__的区别时,搜资料搜到了一个有意思的现象,下面这两个运算返回的结果是一样的: Function instanceof Object;//true Ob ...
随机推荐
- Redis基础命令汇总,看这篇就够了
本文首发于公众号:Hunter后端 原文链:Redis基础命令汇总,看这篇就够了 本篇笔记将汇总 Redis 基础命令,包括几个常用的通用命令,和各个类型的数据的操作,包括字符串.哈希.列表.集合.有 ...
- 2023-05-18:有 n 名工人。 给定两个数组 quality 和 wage , 其中,quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] 。 现在我们想雇佣
2023-05-18:有 n 名工人. 给定两个数组 quality 和 wage , 其中,quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] . 现在我们想雇佣 ...
- vue3+vite2+element-plus+ts搭建一个项目
花了几天用 vue3+ vite2+ element-plus+ ts 搭了个 极简版骨架型数据管理系统,使用静态数据模拟动态路由,路由拦截,登录页面鉴权等,使用了iconify字体图标,整合了ces ...
- ol设置最佳可视范围和限制缩放
目前随着科技发展,智慧城市的不断发展,GIS方面的技术也是层出不穷,如市场流行的 OPENLAYERS, CESIUM, THREE等,但是也会有很多棘手的问题,比如不同分辨率下,图层的显示范围,禁止 ...
- Linux系统 2023年5月1号
今天正式进入了LINUX基础核心 下载了centos7.4镜像 和vmware12版本,还未安装vmware和centos镜像7.4
- Qt+QtWebApp开发笔记(四):http服务器使用Session和Cookie实现用户密码登录和注销功能
前言 前面实现了基础的跳转,那么动态交互中登录是常用功能. 本篇实现一个动态交互的简单登录和注销功能,在Qt中使用Session和Cookie技术. Demo 下载地址 链接:ht ...
- Pycharm激活码,Pycharm稳定专属激活码(持续更新)
分享一下 PyCharm 2023.1.2 最新激活注册码,破解教程如下,可免费永久激活,亲测有效,下面是详细文档哦~ 申明:本教程 PyCharm 激活码收集于网络,请勿商用,仅供个人学习使用,如有 ...
- Nashorn引擎导致metaspace oom
从报错内容很清楚是Metaspace区域oom了 大部分情况下,程序运行中不会出现过多的类加载数量的变动,先导入dump文件检查是否有异常的classLoader或者有异常动态生成的cla ...
- SpringBoot中的yml文件中读取自定义配置信息
SpringBoot中的yml文件中读取自定义配置信息 开发中遇到的问题,百度的答案我都没有找到,去找大佬获取到的经验总结,这只是其中的一种方法,如果其他大佬有新的方法,可以分享分享. 一.非静态属性 ...
- XTTS系列之三:中转空间的选择和优化
通常选择XTTS做迁移的数据库都不会太小的,至少都是几T.几十T这样的规模,这种级别的数据量原有空间不够用,所以在迁移过程临时用作存放迁移数据库备份文件的空间也是需要提前考虑规划的问题. 最近就有客户 ...