通过WASM实现优雅高效的TiDBUDF技术探索

网友投稿 609 2024-01-26

本次大赛上, or 0=0 or 团队非常优雅高效地基于 WASM 实现了 TiDB 的用户自定义函数(UDF,User Defined Function)引擎,获得评委老师的一致高分,一举夺得本届大赛冠军,揽获 10 万元比赛奖金。

通过WASM实现优雅高效的TiDBUDF技术探索

为了给其他开发者们未来基于 TiDB 开发自己的应用和项目带来一些启示,我们在赛后采访了 or 0=0 or 团队与评委张东晖老师,邀请他们分享自己的 Hackathon 经验Hacker 精神的完美诠释。

如果不是技术极客的话,第一次见到 or 0=0 or 团队名(包含引号)肯定会比较懵实际上,这个队名源自于 or 0=0 or 队员们一个恶搞的想法:想看看都 2021 年了,当这个名字被录入到各个系统时能不能搞点事情出来~。

这个极富极客精神的团队有着 4 名队员,分别是庄天翼、朱贺天、王维真、施闻轩他们分别是 TiKV 的 Committer、Reviewer、Active Contributor、Tech Leader,平常都是网友关系,通过参与 TiKV 或 TiDB 社区开发彼此相识。

大赛评委之一的 TiDB 产品顾问张东晖老师对 or 0=0 or 的印象极深,给出了近乎满分的高分:“ or 0=0 or 在 Demo Show 的过程中给我留下两个特别深的印象:一是队名本身就是 Hacker 精神的一种体现。

同时,这个名字也点到了该项目最大的价值——安全,我认为这也是最难的地方;另一个是 Demo 的设计很漂亮,他们用讲故事的技巧,从一个最简单的事情到一个很惊人的性能,将观众一步步带到最高峰”作为参与过三届 TiDB Hackathon 的老队员,施闻轩认为 Hackathon 可以将平时一些不是特别成熟,甚至是不太靠谱的的设计和实践想法拿出来实现。

如果放在平时,这些想法可能比较难以推进,但在 Hackathon 上可以自己组队拉人,通过代码证明它的价值,这也是 Hackathon 活动最有意思的地方对于新人,闻轩建议创意其实可以不仅仅限于 TiDB、TiKV 内核产品,如调试工具、开发工具、可视化工具、与大数据方案的整合等周边生态工具,可以给大家发挥更广阔的想象空间。

在最近两届 Hackathon 上,我们已经可以看到有越来越多高质量的周边生态项目出现,本届大赛中就涌现出不少基于 Flink 的项目24 小时极限开发交付的完美 UDFUDF 作为一款用户自定义函数引擎,可以让用户编写复杂的自定义函数执行逻辑,并在数据库上直接进行计算。

这个能力可以使用户在 TiDB 平台上实现更多扩展,对一个平台产品而言,这是一个非常重要的事情此前由于安全性等挑战, TiDB 一直没有推出 UDF 而安全问题其实是一个特别困难的事情,可能投入研发一两年都搞不定。

令人惊讶的是, or 0=0 or 的 4 名队员在短短 24 小时之内,就将 UDF 这个项目做到了近乎落地产品的程度,包括整个下推、环境的准备、界面的接口设计都想得非常清楚,可以说已经是一个相当完美的项目。

以前 TiDB 不支持某些函数(如 bcrypt),通过 UDF 实现后,不需要将原始数据从 TiDB 捞回客户端计算通过数据库本地分布式计算,可以显著提升性能,并无缝兼容 JOIN 等数据库功能同时,通过 UDF 还可以请求云服务上的计算资源直接计算,例如执行云端人脸识别,执行 Serverless 负载实现无限伸缩等。

闻轩在采访中透露, or 0=0 or 之所以选择 UDF 这个方向一方面是看到各种标准化测试都有 UDF 需求,但 TiDB 一直没有做,这被看作是一件非常困难的事情;另一方面,在 TiDB Cloud 的产品路线图上本就有一些对 UDF 的需求。

两方面原因促使 or 0=0 or 选择这个非常具有挑战性的项目,最终,他们选择基于 WASM 来实现 UDF WASM 全称 WebAssembly ,是一个可移植、体积小、加载快并且兼容 Web 的全新格式。

它最核心的能力就是安全,可以在一个平台上运行不可信任的代码,在经过互联网最严酷的安全环境考验后,WASM 已经是一个足够安全的技术此外,WASM 还有一个特点是跨语言、跨平台,可以在浏览器、操作系统、云服务等平台运行,这使得开发者编程变得更容易,不受语言的限制。

对于 or 0=0 or 开发的这款 UDF ,东晖老师认为这个项目实际上是打开了一扇门,它让 TiDB 变成一个平台式的产品,让我们可以看到很多可能性 比如说通过这个项目可以进一步挖掘支持 TiDB 做 Machine Learning ,让 TiDB 支持 trigger 等等。

未来甚至可以将其作为 TiDB 的核心功能,支持广泛的商业场景遗憾24 小时的时间对于任何一个软件开发项目而言都是一种极限挑战,今年加上疫情原因, or 0=0 or 团队队员分散在北京、杭州等全国各地,项目推进全在线上展开,这也成为本届 Hackathon 面临的最大挑战。

前几届比赛,队友们可以一起坐在办公室里,面对面进行沟通讨论而通过远程方式协作是一种全新的体验,如何适应远程环境对所有队员来说都是一种新的考验通过远程协作,4 名队员将要做的功能点进行切分,有的去负责 TiDB 侧的 WASM 怎么跑起来,有的负责 TiKV 侧的 WASM ,还有人研究 MySQL 兼容性,最后还要有人将这些代码合并连接起来。

但在第一天各自分工写了一部分后,第二天在尝试合并的时候却发现怎么都合不起来幸好在答辩前,在大家的通力合作下没有现场翻车在谈及本次比赛有没有遗憾时,闻轩表示由于时间有限确实踩了不少坑比如在规划中,他们本想在 UDF 中实现网络访问,但这个功能只在 TiKV 实现了,在 TiDB 却遇到了麻烦。

由于在 TiDB 侧和 TiKV 侧调用的库不一样,在 TiKV 工作的部分 API 到了 TiDB 侧不能工作,网络访问这个功能最终没能跑起来;第二个遗憾是最初有一个同学安排了一整天时间尝试将 Java 跑在 WASM 上,将 Java 写的程序在这上面跑起来。

但在研究了各种 Java 到 WASM 的方案后,都没有折腾出来,这个尝试也很可惜没有搞定收获尝试并非毫无意义,通过各种尝试,他们已经基本探明可行性方案,只要再稍加时间就可以继续补充这些能力对于 UDF 项目的未来,闻轩也充满期待:“除了我们自身的 24 小时高强度 Hacking 以外,UDF 项目的诞生也离不开辛苦筹备本次活动的 PingCAP 同事们的支持,以及连续十几小时倾听各组答辩的评委们的认可。

Hackathon 已经结束了,对于我们来说,如果未来我们设计实现的 WASM UDF 能合入 TiDB 产品主干分支,并成为一个真正能给用户使用的功能,将是对我们的设计和代码实现的最高认可”在采访的结尾,我们也想搞点事情——请 or 0=0 or 谈一谈本届大赛除自己之外有没有其他最喜欢的队伍,闻轩给出了森海飞霞的名字。

他们做的项目是 dynamic copysets,解决了在比较大规模集群的情况下,如何显著提升整个集群的数据可靠性这个项目本身来源于一篇论文,但在该论文中只提供了一种静态方案,如果要应用于 TiDB 的话,还需要做成一种 dynamic 的方案。

这在学术界目前还没有解法,森海飞霞可能填补了学术界的空白,探索出一条证明确实可行的新方向TiDB Hackathon 2020

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MSF攻击MSSQL:安全对抗中的挑战(msf侵入mssql)
下一篇:的MSSQL数据库的安全管理提升MSSQL数据库安全性的重要步骤(mssql 正在使用)
相关文章