字节跳动数据血缘图谱升级方案设计与实现

更多技术交流、求职机会,欢迎关注 字节跳动数据平台微信公众号,回复【1】进入官方交流群

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:b0f9ddf6-fd9c-4ffe-8c5f-4822a1a14adb

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:28f87019-2041-41c7-aa74-366fbb86a58a

血缘图谱由 xGraph 与数据地图平台团队合作研发。xGraph 从 Dataleap 业务中孵化,从底至上完全自研,提供设计成熟的内置节点、连线、分组样式,精心打磨图分析产品中常用布局和交互,帮助用户快速搭建关系图产品。血缘图谱解决方案已沉淀到 xGraph 为更多团队复用。

数据血缘图谱介绍

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:6a6c4153-5e33-4e5f-91eb-f69146a78ee8

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:becb3c61-1680-43cd-99e2-ab9bb553d9ee

数据地图平台在 2021 年接入了全链路核心元数据,包括但不限于:Hive、Clickhouse、Kafka、BI 报表、BI 数据集、画像、埋点、MySQL、Abase。这些数据全部要通过数据血缘连接起来,进而可以进行影响分析、内部审计、SLA保障、归因分析、理解和查找数据、自动化推荐等操作。

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:431eeb7f-f218-4da1-ab26-cb16b45b1739

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:bc928195-dbf1-4a2e-87ec-cdd6160ae1a4

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:ceaf7a47-ad49-4935-b344-c632c760414b

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:b407df91-2bd3-404a-900d-f7fb0f34e244

需求发现

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:5138cd24-79f4-4953-a045-d58664a3c359

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:3c4d3b7d-9bc6-409d-bfd0-eec081beb90a

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:efda5b63-94f6-4750-bdb3-1da6ea7ce9ff

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:ed1a9fda-d3d3-4704-afd5-005d9608b93f

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:70a5af9f-b462-4ecd-ab39-c986bac94087

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:26e428d6-c259-43c5-ad6b-392d67cf120a

问题分析

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:ed18440d-d838-42eb-8e7f-9868cbbae8fa

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:0e98cd77-baaa-4725-9acd-9ed9cc5411fc

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:95863269-3de0-401f-b23e-4062f5e34afb

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:c4edf354-dd37-422d-8a27-72d78eeea1b0

节点较少,比较清晰

大量节点,查看困难

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:22dbea2d-ced8-45a9-945b-c3ee980a33f8

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:a3cacbee-b181-4779-b37b-894c54e50c4c

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:38ff7a42-d752-4e57-a0ea-cb95cff81fa3

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:3be47191-6649-4b0a-9137-1c40368ce738

方案设计

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:f31f086a-a907-4516-b9d8-506d5f713648

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:89c44723-afa7-4103-9317-7667062148e6

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:cf316e68-50cf-4e44-aa6a-ac4b0668ee5f

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:72c6e072-ff79-4d04-85ab-d6538db370c4

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:ecaff26c-2cc7-4420-ae37-974770cf6a38

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:b13204e8-5cfd-47e1-b39a-e62a39f02c86

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:c6fbae2d-5a1c-4594-8ddd-4e5cc6c7387c

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:af9e0ffe-9c07-407e-a8ac-7667bac52469

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:143e0597-a42b-4a6b-a908-db23f2fd4ebb

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:f5fb92fc-d91f-4b11-812f-58440fffc87b

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:3ae60d6d-2601-401e-a69d-9b3c91551f68

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:6c046ec4-dfe3-443f-bd03-835be8f086d9

当用户想去找数,理解数或做归因分析时,不仅要了解一个表的上游依赖,更需要理解表的加工逻辑。因此我们在节点的连线上新增了任务信息。当用户 hover 到连线上后,连线会加粗高亮并弹出任务信息。我们还附上了大数据开发平台的对应任务链接,点击链接即可跳转到新页面查看任务逻辑详情。

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:bdcbe332-099e-429f-a649-7167f9d2a81e

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:4b3895ff-8df5-41e5-89f7-875df67c1a92

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:cd9df267-6def-41fb-86c1-1f448edce25e

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:063b2a5a-ef8f-45d1-aa4e-d8402764d737

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:3e69670b-2994-4b31-be9a-d07115e1b4c7

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:94f93ca3-22f9-4c22-97ec-e86b5823496c

技术实现

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:3ef1538d-916c-42d7-a836-9091c84a80b3

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:1cde8566-2725-45a5-adca-6d89c0ffd58b

于是我们结合两者之长,选用了 React + Canvas 的混合模式来实现血缘图谱。Canvas 居于底部,仅负责画连线。React 在上层负责渲染节点响应 hover 等交互。DOM 层叠关系如下:

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:4913a232-40df-44f8-a713-0075527b57a8

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:e76dcf49-3091-49ec-9fae-eb69aa11526a

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:49eeade4-8da9-4ca2-b9c5-455bd851b9e0

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:23934963-2d65-4ef1-aab8-624df01aa09c

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:c955c234-936d-4d7c-85cd-00b885769982

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:bdeed445-5300-4749-897d-c3c059d94b35

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:03e874d7-cad5-4152-b089-63aff7695806

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:bece6a81-606b-4cfc-a091-46b1a99a4f8d

* 节点布局:根据层级和分组情况布局节点,相对应的每个节点有 { x, y, width, height 属性以确定每个节点的定位。
[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:1705ba18-d176-4556-8aef-8f7a0b359f65

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:0878b60a-4523-4bf2-8bef-13b827a00b8f

* 渲染节点:根据节点的位置和分组情况用 React 渲染出每一列节点 DOM。
[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:99e78c98-5dd9-4b94-a85f-a2e3f5d7ccda

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:5c1e12b8-4f09-4a83-b90a-ea942b0eb087

用这种混合模式的一个挑战就是 Canvas 和 DOM 的刷新率和同步率。在血缘图谱中滚动横向滚动条和每一列的纵向滚动条时 Canvas 要进行及时的刷新以保证连线和节点的相对位置一定。

  • 当图谱横向滚动时,每条连线的斜率不变,只是端点左右平移了。我们可以通过更新绘图矩阵来加速这种情况下的更新,不需要去重计算每条连线的位置。具体做法是监听容器的滚动事件,根据容器的 scrollLeft 属性来更新绘图矩阵后重绘。
    [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:75d12456-6049-4826-8044-b9839a6ccf98
    [En]

    [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:05a9a118-b37e-43a0-8a02-63ed01f0b27f

另一个挑战是 DOM 节点在大数据量下的性能问题。通常情况下我们认为 Canvas 在大数据量渲染有更好的性能,而万级的 DOM 节点就会让用户在使用中感受到卡顿了。这时候我们想到了按需渲染。 用户在图谱可视区域中一屏能看到的节点数量是有限的,高度为 1120 的容器中,一列仅存在至多 30 个节点。如果仅渲染可见的节点,则能保证使用 过程的流畅。具体做法是在节点布局时增加以下步骤:

  • 根据视口的位置(主要是图容器的横向滚动距离 scrollLeft )和每一列的滚动距离(主要是每一列容器的纵向滚动距离 scrollTop )计算目前的可视范围。
    [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:2bf5a007-1bf6-4a71-89db-8fdd4f3fa23b
    [En]

    [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:daf38a77-db8f-4580-aefd-9852c3925a22

    [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:d6bcf073-4224-4001-917d-7ae90f1f864d

    [En]

    [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:e019a58f-8703-407f-a52a-f20b71bb4421

在 React 渲染时更新每列容器的长度,将节点根据坐标绝对定位到正确的位 置上。看起来就跟全量渲染的效果一致,渲染效率大幅提升。

然而问题并不止于此。在进行大数据量的纵向滚动时,会发现帧率很低,交 互还是不流畅。分析得知是由于列表滚动时会在短时间内进行大量线条重计算和渲染。于是还要在 Canvas 绘制上进行优化。

我们从上图可以看到在单层节点很多的情况下,主节点与不可见节点的连线可见,但是没有任何价值,只是加重了用户对当前节点连线查看的负担。因此我们对线条也进行了渲染优化,仅当一条连线两端的节点都在可见范围中时才渲染连线,在连线的 Tooltip 上增加了来源去向的展示辅助查看。至此我们做到了在复杂情况下的流畅展示血缘数据。

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:00876036-a5dc-4efc-a982-160f3a9c3bd7

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:3ad422ce-d271-434e-bfff-5a907ab2ba31

Original: https://www.cnblogs.com/bytedata/p/16734697.html
Author: 字节跳动数据平台
Title: 字节跳动数据血缘图谱升级方案设计与实现

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/561859/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球