Skip to content

Instantly share code, notes, and snippets.

@disksing
Last active October 22, 2022 05:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save disksing/d9c2b2360e4aaafb260664e450855bfd to your computer and use it in GitHub Desktop.
Save disksing/d9c2b2360e4aaafb260664e450855bfd to your computer and use it in GitHub Desktop.
TiDB Hackathon 2022 RFC
  • 团队名称:龙哥说的都队
  • 作者:@disksing @JerryWangTdcy @YiniXu9506
  • 项目进展:尚未开始

项目链接 https://github.com/orgs/dui-dui-dui/repositories

项目介绍

通过可视化的方式配置 Placement Rules,可以在配置的过程中直观地看到 Placement Rules 生效后的效果。

背景&动机

TiDB 的 Placement Rules是一个比较强大的功能,它可以组合不同的调度规则,精细化地控制数据的分布。

目前 Placement Rules 有两种配置方式:

一种是使用 TiDB 6.0 提供的 Placement Rules In SQL 功能,直接在 SQL 中对副本的 Placement Policy 进行设置。不过,Placement Rules In SQL 只支持配置固定的几种模式,不能完全释放 Placement Rules 本身所能提供的能力。

另一种是使用 PD 原生支持的 Placement Rules 接口,它的好处是可以释放 Placement Rules 的潜能,但问题是接口太过于裸,需要手写 JSON,很难配置,而且 PD 不感知 TiDB 的 Schema 元信息,配置的时候只能使用 key range 来进行配置,因此门槛很高。

这两种方法还有一个共有的问题,就是太不直观了,在配置的过程中我们很难想象配置会怎么实际影响数据的调度,以及调度后数据分布的效果。

项目设计

Placement Rules 可视化配置是一个典型的 Web 应用。

后端负责从 TiDB 加载数据库 schema,从 PD 加载 Placement Rules 配置信息,把相关信息整理好后发给前端。

前端根据数据在页面上把配置详情渲染出来,如图所示,界面的左侧显示详细的配置,右侧图表的横轴是数据库的 Schema,纵轴是 Placement Rules 配置,其中外围的大框是Rule Group,按照 group index 从上到下排列,每个 group 中的小框是 Rule 配置,Rule 在横轴上所覆盖的范围就是规则所影响的数据范围。

Frame 1

前端支持下列操作来调整 Placement Rules 配置:

  • 修改 group/rule 的 override、replica、label 等属性
  • 拖动 group/rule 来调整堆叠顺序
  • resize rule 来调整 rule 影响数据的范围

调整完成后,点击保存可以将配置发送到服务器端,服务器端将配置整理成 PD 的格式后保存至 PD。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment