TiBI 的 SQL「视界」:DBA 的 BI 工具 | Hackathon 优秀项目分享

avatar
@http://pingcap.com

近日,由 TiDB 社区主办,专属于全球开发者与技术爱好者的顶级挑战赛事——TiDB Hackathon 2020 比赛圆满落幕。今年是 TiDB Hackathon 第四次举办,参赛队伍规模创历届之最,共有 45 支来自全球各地的队伍报名,首次实现全球联动。经过 2 天时间的极限挑战, 大赛涌现出不少令人激动的项目。为了让更多朋友了解这些参赛团队背后的故事, 我们将开启 TiDB Hackathon 2020 优秀项目分享系列,本篇文章将介绍 HundunDM 团队赛前幕后的精彩故事。

我们邀请到了 HundunDM 队的四位选手:nolouch、hundundm、CheneyDing、lhy1024,以及评委徐成选老师,聊聊所谓 SQL 「视界」。

SQL 的「可观测性」

TiDB 4.0 在性能提升的同时,对于自身性能的监测做出了更多的努力,增加了很多的内存表,让 DBA 能够及时监测到 TiDB 集群的数据分布、实时状态。nolouch 发现,在日常分析调度问题的过程中,数据的分布状态是很重要的指标,然而运维人员往往需要输入一段不短的 SQL 或者找到合适的脚本才能进行更加细粒度的分析,最后的效果也不是非常直观。

查询表的数据分布

查询结果并不直观

于是他便萌生了做一个可视化工具的想法。

这次的 Hackathon 正好给了他们一个把想法落地的机会。TiDB 作为一款 HTAP 的数据库,既有高效的事务处理能力,也有强大的数据实时分析能力,可以利用 TiDB 本身的优势,将 BI 工具结合到 TiDB 生态中。

**他们希望能够借鉴 Metabase 等开源工具的方式,将获取到的数据以表格,线状图,柱状图,饼状图等方式呈现出来,结合 TiDB Dashboard,帮助用户能直接在 TiDB 中进行数据可视化分析。**而且在 TiDB 内部有很多和自身状态的一些统计表,也能通过该工具直接对 TiDB 的一些问题进行诊断。

Metabase 可以将数据可视化展现

实践:齐心协力,各司其职

星期五晚开始作战会议,由于 TiDB 内部已经有了很多内置的系统表供分析,对可以展示的 demo 进行了讨论,其中包括了表 region 的分布,leader 的分布,异常日志条目时间分布,流量分布,但是这些都不够发挥它的想象力。进一步,HundunDM 希望能够对底层引擎 sst 的分布的数据也能够进行展示,就这样, 一人负责一个模块,HundunDM 小分队就开始行动了。

项目整体分为数据获取和数据可视化两个步骤

  • 数据获取

用户从 TiBI 组件选择指定表,过滤条件,以及聚合函数和聚合列,自动生成相应的 SQL。Dashboard 直接获取 TiDB 地址,通过 Client 获取对应的查询数据。

  • 数据可视化

借鉴 Metabase 等开源工具的方式,将获取到的数据以表格,线状图,柱状图,饼状图等呈现方式。

此外,他们希望将 TiBI 集成到 TiDB Dashboard 中:

  • 插件化

类似诊断插件,TiBI 以插件的形式做到 Dashboard 中。如果将来 TiDB Dashboard 能支持插件市场,可以作为第三方开放给社区维护开发。

非常巧合的是,他们刚好每个人操刀一门语言:nolouch 负责 TiKV 层 API 相关的工作,使用 Rust 语言;lhy1024 负责从 TiDB 中处理数据和相关内置表,使用的是 Go 语言;CheneyDing 负责 RocksDB 中 SST 部分的数据的统计,使用的是 C++;而 hundundm 负责的前端工作,使用的是 JavaScript。

最终他们完成了了预计的五个模块的界面实现,除此之外,TiBI 还能进行数据的健康度分布统计、容灾情况快速分析;进行日志分析、性能分析;展示各拓扑层级的机器,机架分布以及展示冷热数据在 Engine 里面的分布情况,层级特性等等。

分布式场景下的 LSM-Tree 的 SST 分布

“这个项目的视觉效果非常赞,”评委徐成选老师对这个项目给出了非常高的评价,“他们能够展示 RocksDB SST table 的 level 分布,区别于一般的可视化项目,将 RocksDB 的存储层级和数据分布这样理解起来很有难度的内容做可视化的展示,是非常有价值的。

关于未来:降低运维人员对 TiDB 的学习成本

由于各种条件的限制,在此次 Hackathon 中他们也留下了很多遗憾。比如其实他们并没有把接口的部分完全梳理通,而是使用了外部的工具把 TiDB 中的数据传出来,在性能和安全性上也有很大的改进空间。

提到对 TiBI 未来的期待,他们的想法很简单,那就是合到 TiDB Master 中去,通过多维度数据可视化的实现,降低运维人员对 TiDB 数据库的学习成本,并且可以帮助TiDB 运维人员更加快速的了解系统各维度 workload、快速定位问题。

为此,他们不仅要解决 Hackathon 中暴露出的问题,同时也需要对 TiBI 的功能做更多的扩展,比如动态观察能力、支持多种维度的灵活调整、内置丰富定制化的模板、简化的自定义模版的引导、插件化开放给社区……

评委徐成选老师也很看好 TiBI 的未来,他表示:“BI 是一个数据挖掘领域的概念,AI 往往也是基于数据做一些统计学相关的决策。**现在 AI+ 数据库是一个趋势,TiBI 看到了 BI+ 数据库的可能性。**现在数据库本身的配置和指标越发复杂,大家也越来越重视数据库自身产生的数据,一个更好用、更智能的工具是很有价值的。区别于传统的监控工具,把 BI 概念引入到数据库监控的领域意义深远。”

现 TiBI 已经进入 TiDB Incubator,未来可期!

TiDB Hackathon:一段奇妙的旅程

在 TiDB Hackathon 2020 中,HundunDM 队伍中有几届 Hackathon 的老将,也有第一次参加 Hackathon 的新手。无论是第一次还是第 N 次,Hackathon 都是一段有趣的经历。

比如这次实际的比赛中也出现了各种意料之外的情况。由于负责项目核心 Rust 部分的同学临时需要解决客户问题,导致他们本不富裕的开发时间雪上加霜,只能另辟蹊径将数据利用工具导出再通过前端来处理;负责前端的同学也并不是专业的前端工程师,而他们需要使用的 React 更新迭代速度又非常快,HundunDM 提到这个部分的时候也显得有些无奈:“好像每年 Hackathon 的意义之一就是要把 React 在这一年中的变化学一遍。”

徐成选老师也是一个 Hackathon 的老玩家了,2019 年他就以选手的身份出席了比赛,提到这次作为评委参加 Hackathon 的感想时,他连连赞叹:“本以为做选手会更有趣,没想到这次比赛中的项目无论是创意还是完成度都很不错,能够作为评委第一时间看到各个项目的全貌也十分激动人心。”同时他也表达了对 TiDB Hackathon 的喜爱:“Hackathon 是一种非常有趣的活动,在这两天的时间里没有工作上的负担,可以轻松地去实现自己头脑风暴出来的想法。而且这样非常 Geek 的活动也能让大家遇到更多志同道合的朋友。

本次 Hackathon 因为疫情的原因,许多选手采取了远程的方式,提到对 Hackathon 有什么期待和建议,选手和评委一致表示,希望下次 Hackathon 能够提供更多线下交流的机会:喝着酒唱着歌,让代码飞起来~