跳到主要内容

什么叫无限创意!产品组哪些项目最具战斗力?| TiDB Hackathon 2022 非正式会谈产品组圆桌讨论回顾

“如果用一个词来形容 TiDB Hackathon 2022 产品组赛道,我觉得就是硬核。对于那些喜欢挑战、希望创造不可能的开发者来说,在这里可以遇到更强的对手,让自己变得更强。"在本次 Hackathon 中担任产品组评委的 TiDB Cloud Ecosystem 研发负责人孙晓光如是说。

同样担任产品组评委的 PingCAP 研发副总裁唐刘认为最适合 TiDB Hackathon 2022 的形容词是"挑战自我":"我觉得每次 Hackathon 都是一个挑战自我的过程,本来我在开赛之前都觉得这次应该没什么新的 idea 了吧,真正参与进来后才发现怎么会有这么多新的创意?"

TiDB Hackathon 从 2018 年的第 0 届起(第 0 届为与 Go 社区联合举办),走到今年已经是第 5 届。孙晓光以选手或评委的身份参与了其中 4 届比赛,作为亲历者他也看到 TiDB Hackathon 随着知名度和影响力越来越大,受众群体在不断扩大,项目逐渐多样化,产品赛道越来越硬核,应用生态赛道创意越来越丰富。

对于 PingCAP 全球社区生态负责人姚维来说,这种变化也给 Hackathon 组委会带来了一定压力。近两年,很多参赛选手都反馈 TiDB Hackathon 越来越卷了,尤其是产品内核组赛道过于硬核,如果没有一点知识储备都不太敢报名参赛了。为了解决这些问题,TiDB Hackathon 的赛制也在逐年进行优化。比如去年的比赛中设置了包括产品、生态、工具、云在内共 4 条赛道,不过过于细致的赛道也让选手出现了选择困难症。同时,虽然有了不同的赛道,但决赛答辩还是混在一起,评委也都是同一拨人,这也给评委造成极大挑战。

今年组委会在赛制设计上吸取了历年的经验,直接从物理上分成 TiDB 产品组与应用组两条赛道,对于广大社区开发者而言,不再需要真正懂 TiDB 的内核,也不用懂太多数据库的技能,只要基于 TiDB 做一些创新的应用就可以参赛,大大扩大了参赛范围。作为 TiDB 产品来说,架构改进与功能、性能增强固然重要,但一个产品只有被用户用起来才能给大家创造价值,有更多开发者被激励进来基于 TiDB 创造一些真实业务场景的应用才会将 TiDB 的价值不断放大,拓宽 TiDB 的整个生态。

作为 PingCAP 研发副总裁,唐刘从 2019 年 TiDB Hackathon 起养成了一个习惯,每届 Hackathon 决赛后都会写一篇“不负责任点评”,从个人角度对所有参赛的项目进行点评并思考哪些项目可以合进 TiDB 的产品主干。(最新点评可点击 这里 阅读)几年下来,他发现真的有很多 Hackathon 的 idea 最终进到 TiDB 整个产品的主线中或者已经在 TiDB 的 roadmap 里,这也是 PingCAP 总被冠以是一家 Hackathon 驱动的公司的原因。但 Hackathon 由于时间特性的限制,虽然很多 idea 创意很好,但一个产品从 idea 到 project 还有非常长的路要走,尤其数据库这个产品需要非常长的时间去打磨才能变得稳定,最终才可以交付给客户去使用。比如“黑马警长”去年的获奖项目是做 DDL 加速,直到今年的 TiDB 6.2 版本才合进去,中间用了整整快一年时间。

以下是「 TiDB Hackathon 2022 非正式会谈」 产品组项目深度交流圆桌的对话实录,姚维作为主持人与唐刘、孙晓光连线讲述最喜欢的项目以及对产品组项目的创意建议, 并解读这些项目对 TiDB 未来的方向哪些帮助。(点击观看视频回顾

本届 TiDB Hackathon 中最喜欢的项目

孙晓光:我今年是第一次当评委,对这个角色还有些生疏。从自己的逻辑上看,有几个项目我特别喜欢,其中有两个项目不负众望,都获了奖。一个是产品组赛道的第一名——「摸鱼就是」团队的 Double My QPS 项目。原来在做直播的时候,经常会遇到突然来了一波流量,这个是谁也无法提前预期的,只能眼睁睁看着,没有任何机会做扩容、优化代码。如果有一个方法让我看上去牺牲一小部分人的体验,但可以相对平稳地渡过这个阶段,一定会非常吸引我,这个项目就正中我的这个期待。它解决了非常关键的问题,在 Hackathon 上的演示效果为 TiDB 提供了一个新的优化方向,如果最终能被证明可行性,甚至可能变成 TiDB 默认打开的能力。

Double My QPS」项目详情

第二个是「我垫你们蹲」队伍的 TiFlash Collocated Optimization 项目。极致的性能一直是我们追求的目标,虽然通过 TiFlash,在很多场景都能为客户进行查询的加速,但在一些场景下,TiFlash 的处理能力还是不够。现在 TiFlash 上的数据其实没有做 Collocated 优化,当你做多表 join 的时候,数据需要走网络,很大概率会造成资源消耗。有没有一个方法能相对快地实现,同时保证它的正确性?我垫你们蹲团队采用了一个非常简单的方法,就是『空间换时间』,他们给 TiDB 增加了一种新的 index,叫做 redistributed index,能让用户按照特定的数据 partition 规则,将对应的数据调度到同一个节点上面,减少 shuffle。redistributed index 类似于 TiDB 的 clustered index,它存储的值是整个 row,所以我们直接能在节点上面进行所有相关数据的计算。

TiFlash Collocated Optimization」项目详情

唐刘: Double My QPS 项目我也给打了高分,他们主要做了两个优化:开启 RocksDB multi get 的 async IO 的功能;将相同的 pattern 的请求攥成一批,也就是通常的做 batch,batch 里面调用 TiKV 的 multi get 接口。虽然最终的效果上面,并没有 double,但取得了 60% 的提升也是非常不错的。因为我当时在广州赛区,看到他们这个团队的同学从最开始 40% 到最后 60% 一点点提升,这个过程就勇气可嘉,非常符合 hardcore 的挑战。这个项目有几个方面都是可以用到产品里面的。

另外一个比较喜欢的项目是 TiFancy ,这个项目致力于提升 real-time AP 的 serving 能力。对于比较重的 AP 请求而言,我们通常会限制它的并发,因为太多的并发会将整个系统打爆。要解决这个问题,一个很常用的做法就是 cache。但 cache 又有另外的一个问题:查询结果的及时性,但这个在 TiDB 中还是比较容易解决的,原理如下:

  • 第一次查询之后,TiFancy 将结果进行缓存,缓存的时候,会同时记录当前的 timestamp

  • 创建一个 memory sink,开始订阅数据的变更,这个其实就是借用的 CDC 的机制

  • 数据变更之后,直接更新 cache,保证 cache 的实时性

「TiFancy」项目详情

这个机制其实挺简单的,但还是有不少的事情需要考虑,譬如对于一些查询,类似 avg,min,max 这种,其实是一种有状态的查询,TiFancy 也借用了 Flink 流式计算的思路,引入了 Cache State 来做增量计算。这个项目为啥我非常喜欢,主要是一方面看到了通过 cache 支持 AP serving 的能力,另外一个就是我看到了一点 materialized view 的影子。

还有一个是 「12 只喵」的 MoreCat 项目。我们程序员都有一个改变世界的梦想,这个项目还是挺好玩的。MoreCat 其实就是把 TiUP 当做了一个应用分发工具了,类似于 homebrew 等,还是蛮有意思的,我们可以给 TiUP 添加自己的 source,下载对应的应用了。这个还是挺实用的,因为我们很多同学给 TiDB 写了不少的运维工具,后面完全可以通过 TiUP 来整合到一块了。

「MoreCat」项目详情

作为产品组评委,对项目的评分标准是什么?

唐刘:我的标准还是比较务实的,一般我给高分的项目通常情况下都是我认为能够合进 TiDB 产品主线中的,或者是未来我们一定会去做的项目。这就像我们产研内部也非常看重在做的东西一定要能落地,一定要给客户带来价值。第二点,我看中的 idea 需要让我眼前一亮,这并不是说你的创意一定要天马行空,而是这个东西是用很巧妙的方式解决了一个很现实的问题。比如这次比赛中我喜欢的 TiFlash Collocated Optimization、TiFancy 以及 「Canopus」队伍的 TiDB 计算微服务,他们的原理都很简单,但是恰恰能很巧妙地解决一些很现实的问题。第三点,因为我所在的是产品组,还是要看项目的技术难度,在短时间内能够以 Hardcore 的方式做出来一个项目真的是非常不容易的一件事。

「TiDB 计算微服务」项目详情

孙晓光:我的标准和唐刘差不多。稍微补充一点就是,从我的视角来看,我更希望看到这个问题的解法是能解决一类问题的更大的杠杆。可能这个创新的想法以前就有了,但是你能把它很好地落地,让更多人的工作效率提升,我就会非常喜欢。

本届 Hackathon 还有什么遗憾?

唐刘:我其实很希望能看到一些在云上的创意,但是这次 Hackathon 中还比较少。除了「Canopus」队伍的 TiDB 计算微服务和「更实用,更易用」队伍的 TiDB holding hands with S3 。其实我们在云上可做的东西非常多,比如基于 S3 怎么去构建新的存储引擎?怎么做成一个弹性的系统?或者怎么把 scalability 遇到的一些问题在云的弹性能力基础上做的更好,这些都是我后面蛮期待的。

孙晓光:外部的同学可能很难感受到 TiDB Cloud 的架构,之后我们还需要逐步输出,鼓励更多社区开发者参与进来。

唐刘:相比于去年的 Hackathon,今年的 Hackathon 产品组这边一些项目的完成度不算太高,这个也跟赛制有关系,去年报名之后,就可以进行项目的开发了,但今年就是两天的时间,时间上面比较紧张。加上产品组很多项目都要涉及到对 TiDB 内核的改动,还是非常的有挑战性的,所以明年是不是考虑给产品内核这边更多的时间,是我们需要讨论的。

但从另一方面,两天的开发就能爆发出来如此的战斗力,而且有如此都得成果,还是我没预料到的,TiDB Hackathon 再一次体现出来了开放的力量,也再一次让我更加坚信了,持续打造一个活跃,开放的社区是多么有意义和价值的事情,我们会持续的做下去。

本次视频回顾链接