{
    "componentChunkName": "component---src-templates-blog-blog-detail-tsx",
    "path": "/blog/irresponsible-comments-on-tidb-hackathon-2021-finals",
    "result": {"pageContext":{"blog":{"id":"Blogs_339","title":"“爆到天际线” - TiDB 2021 Hackathon 决赛不负责任点评","tags":["TiDB Hackathon 2021"],"category":{"name":"社区动态"},"summary":"本篇文章将介绍 TiDB Hackathon 2021 特邀评委，PingCAP 研发副总裁唐刘对决赛各项目的点评。","body":"![01.webp](https://img1.www.pingcap.com/prod/01_62a6110b87.webp)\n\nTiDB 2021 Hackathon 终于落下帷幕，最开始我还担心，今年 Hackathon 还有啥东西能出来，结果却大大超出我的预期，很多项目真的能用惊艳来形容，大家都在自嘲，说『内卷得太厉害』。作为评委，全程参与了预赛内核组以及决赛的答辩，还是有很多感触的，之前已经写了一篇[预赛的点评](https://zhuanlan.zhihu.com/p/454946684) ，这次也对决赛做一次不负责任的点评。\n\n决赛这次有 20 个项目，我大概分几个维度做一个统一介绍。\n\n## 性能/功能增强\n\n这次在 TiDB 内核上，做的不少性能提升功能真的很惊艳，因为我预赛点评的主要是内核组的东西，所以在这里简单进行一下汇总。\n\n### 增量 Analytic Table\n\n这个功能通过 Region Cache 统计信息的方式来加速全表的 analyze，在表越大的情况下，收益会越加明显。一方面加速了 analyze 的速度，另外一方面也能缓解 analyze 造成的大量 IO 和 CPU 开销，降低了系统的压力。不过这个实现有一个前提假设，就是大部分业务仍然是热点更新，或者增量写入为主。不过即使出现了大范围的更新，因为统计信息现在直接是放在 region cache 的，实际在 full analyze 的时候，效果也可能会比现在的实现要好。另外，我们后面可能还可以通过 TiFlash 进行 analyze 的操作，这样也会快很多。\n\n### TiExec\n\n这个项目虽然之前不是在内核赛道，但我觉得这玩意足够 hardcore 了。这也是我们在之前 PoC 过程中实际遇到的一个问题，我们发现调整一些内核的配置，或者 Go GC 的调整，性能就能提升。这次就是针对 iTBL-Cache-Miss 的问题进行优化。然后大家将 .text 这个 segment 映射到了 hugepage 上面，降低了 cache miss，提升了性能。本来评委还担心用了 hugepage 性能会不会下降，但实际这里并不是全局打开的 transparent hugepage，而只是单独的将某一段区间的数据 remap 到了 hugepage 上面。\n\n### TPC\n\n这个项目是我觉得最硬核的项目，我自己也给了非常高的分数，不过遗憾的是，可能太过于硬核，很多评委都不知道它在说什么（因为并不是所有评委都非常了解 TiDB 的内部机制），最终只得了三等奖，我个人觉得这个项目其实是能冲击一等奖的。\n\nTPC 这个项目做了非常多的工作，虽然能预感到后续落地的难度，我还是很期待的，毕竟这也在我们的 roadmap 上。我们用了 io uring，不过貌似也遇到了不少的坑，后面也可以选择 AIO，或者单独的异步线程机制都可以。因为用了新的 raft engine（这个会在 TiDB 5.4 GA），也能很方便地做 parallel log write，充分利用多队列 IO 特性，这个在云上也是很关键的，因为 EBS 单线程的写入 IOPS 其实真不高。另外，后面大家还会去掉 KV RocksDB 的 WAL，这样几个线程池就真能合并，只做计算操作，IO 操作都完全变成异步。\n\n### 通过 Lightning 来加速 add index\n\n这个也是我非常喜欢的一个项目，也是我们在实际 PoC 中多次遇到的一个问题。通过 Lighting 直接 ingest SST，能极大地提升 add index 的速度，决赛实际展示的效果也是把性能提升了一个数量级。这个功能也是在我们的 roadmap 上面的，所以后面我还蛮期待的。另外，其实只要解决了 Lighting ingest SST 过程中，另外操作 update 等操作冲突问题，那么我们完全可以让 Lighting 支持 online 导入。另外在云上面，未来我们可以通过 EMR 这些来进行排序，然后将数据先写入到 S3，再让 TiKV 从 S3 拉取，或者直接使用 S3 的数据。\n\n### MVCC 时光机\n\n这个项目对于运维同学来说是在某些时候能救命的功能。TiDB 在数据存储上面，使用的是 MVCC 机制，也就是一条数据，可能会有多个版本，所以即使用户误删除了这一条数据，我们仍然可以在老的版本上面将其恢复。现在的恢复流程就是先用一个老的版本号（这里就是 timestamp）查询到老的数据，然后将其重新插入回去。这个操作对于单条要恢复的数据还是比较简单的，但如果我们是一批数据的恢复，操作就非常麻烦。这个项目通过 SQL 很好地解决了运维的操作问题。更赞的是，该项目引入了多 safepoint 机制，也就是可以给 TiDB 集群定期做一些全局 snapshot，进行快速轻量级的逻辑备份。不过随着要保存的 snapshot 增多，数据的 MVCC 版本也会增多，对于 scan 这种操作可能会有影响，后面如果我们将历史版本移动到另外的地方，这个问题就能缓解了。\n\n### 让 TiDB 在云上智能的说话 \n\n这个项目我也觉得非常赞，甚至我认为不光是在云上面，TiDB 的智能运维收益，在 OP 上面， TiUP 也是可以借鉴的。我们在升级的时候，可以引入更多的策略，譬如只让副本的 leader 切换一次，或者根据 TiKV 当前的热点、流量等来判断是否该节点能升级。这些策略能很好地降低升级过程对用户业务的影响。\n\n### TiDB 冷热数据分层存储\n\n这个项目获得了本次 Hackathon 的一等奖，再跟本次 Hackathon 另外一个类似项目联合，会为后面 TiDB 跟 S3 的整合打下不错的基础，至少这次 Hackathon 验证了可行性。其实原理很简单，将冷的数据放到 S3，然后将算子尽量地下推到 S3，通过 S3 原生的 Select 功能来加速查询。当然，如果数据已经在 S3，我们还可以通过云上面其他的服务，譬如 Athena， 来做更多的查询聚合操作，加速查询。这次大家都是在通过 partition 做文章，毕竟根据时间片来分 partition 是很常用的一种操作，我们内部现在也在通过 LSM 做一些跟 S3 整合的研究，我还是很期待这些都能在今年看到成果。譬如我们的 TiDB Cloud Developer Tier 集群就可以完全用这套机制来先验证。\n\n## 诊断效能\n\n今年 Hackathon 我个人觉得最开心的应该是凯哥，他现在负责 TiDB 可观测性以及诊断易用性提升，今年的几个项目做好了都可以很好地落地，其实有一些都已经在我们的 roadmap 里面了。\n\n### 自动调配置（Matrix）\n\nMatrix 是 PingCAP 同学跟华中科技大学的同学一起弄的一个项目，不得不说，现在的学生真的是很牛。通过这个项目我才知道，原来 TiDB 5.3 已经有 800 多个参数了，所以后面我们真的需要出一些开发原则，譬如如何来增加参数、配置、session variable 等，不然后续调优会更加困难。其实之前 Hackathon 也有不少的自动 tune 的尝试，但这次我觉得很大的一个突破点，是在于该团队可视化了重要参数的影响程度。\n\n### 自动诊断（Collie）\n\n自动诊断(Collie) 团队的队名（我们这么菜评委不会生气吧）还是蛮有意思的，其实你们一点都不菜，而且还帮助优化了 TiUP diag 的功能，这个已经很厉害了。通过这个项目我才知道，原来我们 metrics 指标已经快 8000 个了，说实话，我觉得再发展下去，人已经没法 debug 了……\n\n### log 分析（Naglfar）\n\n日志也是 TiDB 里面一个急需优化的点，我们打了一些无用的日志，这个后面需要清理，但在诊断问题的时候，我们需要对日志进行关联分析，以及观察某一个日志的趋势，提前发现问题。Naglfar 在这块开了一个不错的头。\n\n### 慢 SQL 诊断（TiVP）\n\n当我终于看到可视化的执行计划时，我几乎留下了激动的泪水。毕竟我们之前诊断慢 SQL 实在是太苦了，那么一大屏的执行计划，几乎叫做没法看，而且如果要对比两个执行计划的异同，就更崩溃了。有了可视化，至少分析到底哪里慢的效率会提升很多，而且后面我们完全可以将 SQL advisor 的功能直接整合到 TiVP 上面，让大家直接在线能进行 SQL bind，add/drop index 这些操作。看完这个项目，我立刻问了下 wish 同学，他直接甩给我一张更漂亮的 Visual Plan 的图，原来已经排在了 roadmap 里面，大家拭目以待。\n\n## 生态扩展\n\n今年的生态，可以用百花齐放来形容吧，看到了太多不一样的东西。我其实一直非常喜欢生态相关的项目，如果说 Hackathon 内核相关的项目是增加 TiDB 的技术深度，那我觉得生态这块就是扩大 TiDB 的广度。对一个数据库来说，『广』就意味着市场占有率的提升。\n\n### TiMatch - 语法完备的分布式图数据库\n\n去年 TiGraph 已经让大家惊艳，今年 TiMatch 更让人期待了。这次易用性更好，而且对于老集群也能直接升级使用。因为 TiMatch 只是内部建立了一套 graph index，通过 TiDB 分布式事务机制，跟原先关系表的数据统一更新。语法上面，借鉴了 Oracle graph 的语法，所以已经是关系完备的了，不过我觉得后面的挑战在于性能上面，希望下一届该项目能给大家展示相关的数据。\n\n### TiLaker: 为 TiDB 插上入湖的翅膀\n\n去年 Hackathon 其实有不少跟 Flink 整合的项目，不过今年决赛就看到一个，说实话我还是有点小失望的。但今年 TiLaker 做的还是挺完备的，毕竟有 Flink Committer 的参与，大家给 Flink 实现了一个 CDC Connector，这样能让 Flink 直接读取 TiDB 的增量数据，同步到下游了。借助 Flink 的能力，让 TiDB 更好地跟下游生态进行了打通，后面也希望有不少的应用案例能出来。\n\n### pCloud\n\n这是一个非常有意思的项目。贵司的 CTO 东旭同学直接上场带货，先抛开他个人极大的现场感染力，从实际来看，pCloud 做得真的很不错。东旭只是展示了产品效果，聊了聊商业模式这些，但我其实是知道这个项目的底层实现的，还是很有挑战的。不过这也给了下一届 Hackathon 参赛的同学另一种参考，一个项目，有时大家更容易关注技术本身，但如果我们是做一个产品，或者一个 SaaS 服务，对于用户及商业的理解也是非常关键的。所以即使大家觉得自己对 TiDB 没太多理解，写不了太硬核的程序，也可以从另外的方向来突破。\n\n### Dujiang Weir\n\n这个项目也挺有意思，晓光在 Weir 上面实现了一些 plugin，扩展了 TiDB 的功能。譬如他写了一个 Redis 的 plugin，为 TiDB 提供了缓存支持的能力，不过我现在在想，是不是 TiDB 自己把 plugin 机制做好一点更好？现在我们的 plugin 是用 Go 自带的 plugin 机制，在可扩展性、可维护性上做得不怎么好，如果我们用了 Hashicorp 的 go-plugin，通过 RPC 来交互，虽然性能有损失，但会不会效果更好？这块未来可以跟晓光他们继续探讨下。\n\n### TiClick\n\n这是我最喜欢的一个项目，我个人给了最高的分数，并不是因为 Sai 同学激情的演讲，也不是因为炫酷的 web 界面，而是我看到了 TiDB 如何能能更好地吸引开发者的一个方向。针对开发者学习 TiDB 这个问题，后面我相信大概率就是一个 SaaS 服务，开发者通过浏览器就能直接学习了解 TiDB。这个项目让我看到了落地的可行性，我也希望能快速的落地。不过我也知道，当下最重要的是让 TiDB Cloud 支持 GitHub SSO 登录、支持 OpenAPI，变得对开发者更加友好，这样才能为后面的生态扩展打下基础。\n\n## 总结\n\n当然，这里只是列出来大部分的项目，还有一些项目没在这里详细点评，譬如 **TiTravel，oom.ai，TiMultiple，Bubbles** 等，都是很不错的项目，后面有空再补充下，大家可以自己去了解关注下。\n\n总的来说，这次 Hackathon 做了两天的评委，在体力和脑力上被严重的 burn out，但还是让我非常兴奋，因为我看到了 TiDB 未来无限的可能性，这次 Hackathon 的 slogan 是 Explore the Sky。Sky 离我们并不遥远，譬如我现在就在高空、在飞机上写这篇文章 :-)\n不过这次 Hackathon 还是有点小遗憾的，我个人认为 Hackathon 的一个精髓就是 24 小时的高强度编程，但因为疫情原因，没法实现，希望疫情在今年能有所好转，大家带着睡袋，在 PingCAP 办公室写程序那种经历还是非常有意思的。  \n\n> 延展阅读：点击查看更多 [TiDB Hackathon 2021 优秀项目分享](https://pingcap.com/zh/blog/?tag=TiDB%20Hackathon%202021)","date":"2022-01-13","author":"唐刘","fillInMethod":"writeDirectly","customUrl":"irresponsible-comments-on-tidb-hackathon-2021-finals","file":null,"relatedBlogs":[]}}},
    "staticQueryHashes": ["1327623483","1820662718","3081853212","3430003955","3649515864","4265596160","63159454"]}