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

这篇具有很好参考价值的文章主要介绍了一张图读懂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开源技术架构

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开源技术架构

  • 语言设计: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函数逻辑,实现整个分布式计算链路的执行。

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

  • 高阶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性能优化。

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

  • 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)服务。

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

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

执行环境

TuGraph Analytics支持多种异构环境执行,以常见的K8S部署环境为例,其物理部署架构如下:

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

在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 Analytics开源技术架构文章来源地址https://www.toymoban.com/news/detail-664292.html

到了这里,关于一张图读懂TuGraph Analytics开源技术架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一张图搞懂微服务架构设计

    当前,微服务架构在很多公司都已经落地实施了,下面用一张图简要概述下微服务架构设计中常用组件。不能说已经使用微服务好几年了,结果对微服务架构没有一个整体的认知,一个只懂搬砖的程序员不是一个好码农! 在上图中可以看到,Nginx作为整个架构的流量入口,可以

    2023年04月17日
    浏览(54)
  • 一张图快速了解 Istio 的 EnvoyFilter

    EnvoyFilter 提供了一种机制来定制 Istio Pilot 生成的 Envoy 配置。使用 EnvoyFilter 修改某些字段的值,添加特定的过滤器,甚至添加全新的侦听器、集群等等。 这个功能必须谨慎使用,因为不正确的配置可能会破坏整个网格的稳定性。与其他 Istio 网络对象不同,EnvoyFilter 是叠加应

    2024年02月08日
    浏览(50)
  • GLES学习笔记---立方体贴图(一张图)

    立方体贴图 如上图是一张2D纹理,我们需要将这个2D纹理贴到立方体上,立方体有6个面,所以上面的2D图分成了6个面,共有14个纹理坐标 上边的立方体一共8个顶点坐标,范围是[-1, 1]; 我们要做的是将纹理图贴到这6个面上面 我们绘制的时候使用了VBO、VAO、EBO、 indices里面是绘

    2024年01月19日
    浏览(53)
  • uniapp:手写签名,多张图合成一张图

    要实现的内容 :手写签名,协议内容。点击提交后:生成1张图片,有协议内容和签署日期和签署人。 实现的效果图如下: 1、签名页面

    2024年02月15日
    浏览(93)
  • 网络安全——一张图看懂HTTPS建立过程

    · 准备工作(对应图中prepare1234) · 发起链接 · 最后 关于网络安全加密的介绍可以看之前文章: (数据的加密与签名) HTTPS建立过程相当复杂,下图为示意图,可以有整体认识,一般我们编程知道这些已足够。 如果你想仿照HTTPS实现类似加密,可以阅读下具体过程,作为参

    2024年04月12日
    浏览(49)
  • Unity 如何通过2D Sprite切割一张图为多张

    1、理解 在一些2D游戏开发中,我们常常使用2D Sprite把一张大图切割成多个小图使用。 这样做有不少好处,首先,通过精准使用小图,能够一定程度上节省内存,提高渲染性能。 其次把同类的小图做成一张大图在切割使用会更方便我们进行对资源的管理。 再者,在2D游戏中通

    2024年04月26日
    浏览(49)
  • 【uniapp小程序-生成二维码+多个图片文字合并一张图】

    下载uqrcodejs: https://uqrcode.cn/doc/guide/getting-started.html

    2024年02月03日
    浏览(62)
  • 一张图让你理解 IaaS、SaaS 和 PaaS 的区别?

    大家看下面这张图,我将从概念,服务,公司和发展,4 个方面,给大家通俗的解释下,什么是:SaaS,PaaS 和 IaaS:  SaaS,Paas,IaaS 的区别 互联网发展到今天,人类已经无法离开互联网而存在,我们日常会用到的微信,抖音,淘宝等,都是面向个人用户的,打开就可以立即使

    2023年04月21日
    浏览(51)
  • 使用Python中的matplotlib将多个图片显示到一张图内

    在我们写论文或是汇报时,经常需要整合所得到的可视化数据结果,插入我们的论文中。如下所示的情况,我们需要将四个相关的弹性模量预测结果在一张图里展示。 使用matplotlib库中的子图(subplot)功能可以轻松而高效地实现这一过程,避免繁琐地手动调节。 具体代码如下,

    2024年02月06日
    浏览(56)
  • iOS 分别对一张图的局部进行磨砂,拼接起来不能贴合

    效果图 需求,由于视图层级的原因,需要对图片分开进行磨砂, 然后组合在一起 如图,上下两部分,上下两个UIImageVIew大小相同,都是和图片同样的大小,只是上面的UIimageVIew 只展示上半部份 (上面图片的父视图cliptobound=YES,超出部分被切掉),下面的UIImageView只展示下半部

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包