首页 > 其他分享 >一张图读懂TuGraph Analytics开源技术架构

一张图读懂TuGraph Analytics开源技术架构

时间:2023-08-22 21:04:25浏览次数:52  
标签:作业 Analytics 开源 API TuGraph 执行 数据


layout: post read_time: true show_date: true show_author: true title: "一张图读懂TuGraph Analytics开源技术架构" date: 2023-08-21 tags: [架构, 分布式计算, SQL, TuGraph-Analytics, 开源, GQL] category: opinion author: 范志东 description: "TuGraph Analytics(内部项目名GeaFlow)是蚂蚁集团开源的分布式实时图计算引擎,即流式图计算。通过SQL+GQL融合分析语言对表模型和图模型进行统一处理,实现了流、批、图一体化计算,并支持了Exactly Once语义、高可用以及一站式图研发平台等生产化能力。"


作者:范志东

**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仓库,为我们的项目加一颗Star。【网络不畅可以尝试使用VPN访问】

GeaFlow(品牌名TuGraph-Analytics) 已正式开源,欢迎大家关注!!!

欢迎给我们 Star 哦!

Welcome to give us a Star!

GitHub

标签:作业,Analytics,开源,API,TuGraph,执行,数据
From: https://blog.51cto.com/u_16180133/7192324

相关文章

  • 手动搭建开源 OpenStack(Ussur)
    最后编辑时间:2023年8月15日19点26分导语实验概述在VMware®Workstation上基于CentOSStream8虚拟机,手动搭建开源OpenStack(Ussur版)实验要求最佳:3台节点(1台Controller+2台Compute);最少:2台节点(1台Controller+1台Compute)Controller节点内存最好8G最少4G,Compute节点4G......
  • StoneDB首席架构师李浩受邀采访:浅谈KPI与开源的可持续发展,认可长期主义很重要
    编者荐语:<br>StoneDB开源社区PMC、首席架构师李浩老师近期接受了ITPUB的采访,本文是对众多采访嘉宾的汇编,李浩老师对KPI与开源提出了独特见解,推荐大家阅读。<br>以下文章来源于ITPUB,作者李雪薇近年来,全球开源生态迈向高速发展的崭新阶段,很多企业、社区和个人都将关注点......
  • 开源.NetCore通用工具库Xmtool使用连载 - 随机值篇
    【Github源码】<br/>《上一篇》详细介绍了Xmtool工具库中的散列算法类库,今天我们继续为大家介绍其中的随机值类库。<br/>基于系统提供的Random获取随机值方法已经足够简单和易用,本类库只对日常开发过程中最常用到的生成随机验证码方法进行了封装,后续发现其他有价值的常用随机......
  • Databend 开源周报第 107 期
    Databend是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn。What'sOnInDatabend探索Databend本周新进展,遇到更贴近你心意的Databend。理解连接参数连接参数是建立与Databend支持的外部......
  • 开源Java诊断工具Arthas:开篇之watch实战
    一、前言还在为排查Java程序线上问题头痛吗,看我们用阿里开源的诊断神器Arthas来帮您本文开篇主要介绍阿里开源的诊断神器Arthas3.7.0版本,watch、jad、classloader命令,以Debian11、openjdk11为例二、Arthas简介和安装1.简介Arthas是一款线上监控诊断产品,通过全......
  • 废品回收抢单派单小程序开源版开发
    废品回收抢单派单小程序开源版开发用户注册和登录:用户可以通过手机号码注册和登录小程序,以便使用废品回收抢单派单功能。废品回收订单发布:用户可以发布废品回收订单,包括废品种类、数量、回收地点等信息。废品回收抢单:回收人员可以浏览最新发布的废品回收订单,并选择抢单。废品回收派......
  • 奖金丰厚 等你来拿!第六届开源创新大赛飞桨赛道下半场来啦
    最近想要充个电......
  • 基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v7.0版已发布
    关于MobileIMSDKMobileIMSDK是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持 UDP 、TCP 、WebSocket 三种协议,支持 iOS、Android、H5、标准Java、小程序、Uniapp,服务端基于Netty编写。工程开源地址是:1)Gitee码云地址:https://gitee.com/ja......
  • 【开源三方库】bignumber.js:一个大数数学库
    OpenHarmony(OpenAtom OpenHarmony简称“OpenHarmony”)三方库,是经过验证可在OpenHarmony系统上可重复使用的软件组件,可帮助开发者快速开发OpenHarmony应用。如果是发布到开源社区,称为开源三方库,开发者可以通过访问开源社区获取。接下来我们来了解bignumber.js开源三方库。bignum......
  • 应用管理平台Walrus开源,构建软件交付新范式
    今日,数澈软件Seal(以下简称“Seal”)宣布正式开源Walrus,这是一款基于平台工程理念的应用管理平台,致力于解决应用交付领域的深切痛点。 借助Walrus将云原生的能力和最佳实践扩展到非容器化环境,并支持任意应用形态统一编排部署,降低使用基础设施的复杂度,为研发和运维团队提供易用......