今年的 TiDB Hackathon 来的比去年早一些,赶在 1024 前举行。去年我参加 TiDB Hackathon 2021 之后,感觉非常好:组织给力、参赛选手水平高、技术分享氛围好,能学到很多东西。于是今年毫不犹豫,再次报名参加。
我其实一直想搞个移植类的项目,把某个能用但不够好用的项目移植到 TiDB 上,得奖倒在其次,主要是为了将来自己用或者给别人用。但是我也知道,这类作品的技术含量有限,除非做得很好或者很有特点,否则多半连决赛都很难入围。于是我韬光养晦,卧底在群里,等待抱大腿的机会。
然而,赛前创意脑爆会,CTO 黄东旭说了一些跟我很接近的想法——当然,也可能是我听错了,我当时一边搬砖一边开着直播,注意力不集中;后来我又听了一遍,没能找到印象中的那几点。
本来想抱大腿,但是经历上次思否 Hackathon 之后,必须得说,哥们儿飘了,哥们儿觉得自己行了,哥们儿觉得自己也是个角儿了。于是我甩掉了前面已经蹭进去的队伍,拉大旗谋虎皮,邀请赋闲在家的竹子一起,组了自己的队伍,准备携余威再下一城。
正所谓黄粱美梦,终有一醒。很快教训就来了。
0. 开场 brief
由黄东旭(TiDB CTO + CoFounder)演讲。
TiDB 的诞生
- 三个后端基建程序员,厌倦了分库分表的枯燥生活,决定造福大家。
- 一腔热血+盲目自信,开始动手
- Why TiDB?(自吹的部分省略,哈哈
TiDB 的未来
- From OLTP to HTAP
- From SQL to API
- From TiDB to TiDB-as-a-Service
- From Infrastructure to Applications
- From Code to You
TiDB 近景展示
基于云的高速动态 Scale 能力,把 TiDB 从数据库变成 end-point,让用户对底层无感,应该是未来的发展方向。
1. 密集 coding
开幕式结束后,各支队伍开始 coding。今年规定比较严,必须在入围决赛后才能写代码,杜绝有人拿一年的大项目 hackathon 上改个字体就参赛的行为。
我们团队其实有一些前期的调研和摸索,比如我的 NocoDB + TiDB 实例很早就部署了,然后队伍的日常管理也在上面。不过事后来看,我们还是太轻敌了,各方面的。
1. 行级权限控制(Row Level Security / Row Based ACL)
首先我要确定 NocoDB 怎么支持行级权限控制,因为 idea 脑爆会上东旭有提到,所以得重视起来(面向 CTO 编程)。结果比较令人失望,NocoDB 并不直接支持类似 LeanCloud 那种 row based ACL。
用一些比较复杂的方式似乎能够实现。比如:
- 生成主表
- 为用户创建不同的视图
- 用户通过特定表单提交信息
总之这个方向进展不顺利。
2. Vercel Template
我们计划做的第二个东西(也是脑爆会上提到的),是 Vercel Template,即可以让用户在 Vercel 上一键部署实例的东西。
临近中午,竹子找我说可能做不了,于是我赶紧去看。Vercel 本身主要提供静态内容托管,从 GitHub 拉纯前端仓库然后部署。后端服务只提供 serverless functions,支持文件路由映射。next.js 和 nuxt.js 不知道是主动还是被动,都提供了类似的方案去适配。
NocoDB 前端是基于 Vue3+nuxt.js 打造的,所以并不难搞。困难的是服务端。我们面临两个选择:
- 手动把 API map 到文件路由(比如
/api/user
=>/api/user.get.js
) - 直接用入口 js 作为 serverless function
竹子开始尝试了方案(1),觉得可能超出 hackathon 的时间要求。我也觉得方案(1)不太靠谱,于是开始尝试方案(2)。由于依赖的问题、Vercel 的问题,我们一直折腾到凌晨 00:30,最终推翻了方案(2)……由于 serverless functions 的无状态特性,没有优化过的程序完全没法跑。
3. SaaS
最后我们只剩下来原本计划中 Nice to have 的功能:SaaS 平台。这个部分我们本来只想在 PPT 里提一嘴,算是对未来的展望,希望评委老师感兴趣。并没打算做,毕竟 hackathon 里俩人做 SaaS,怎么看也不靠谱,但是现在,这竟然是我们唯一可能的交付物了,真的是……
当然完整交付是不可能的,我们的目标就是让评委相信我们能做出这样的东西来。
其实说白了,这垂死挣扎,就是高考前,语文/英语老师说:“你们作文不会写,就把前面阅读理解打乱顺序抄一遍,不要空着!”,那个意思。
2. 小转机
没想到真的有转机,虽然不大。
竹子 mock 了几个 API,仿真了在 Vercel 上使用 Template 部署应用的过程,录成视频,准备在 demo 的时候播。我一看,咦?反正都是模拟 API,我那儿(测试服)有现成的啊。这样一想,我整理出一个似乎还可以的想法:
- 部署 nocodb-gui
- 使用我的测试服作为 server API
- 完成演示
这样可以演示一些效果,而且很容易带出来我们接下来要做的:基于 NocoDB+TiDB 的 SaaS。哎,昨天真是被 Vercel 部署消耗掉太多体力脑力了,竟然没想到这么直接的解法。
3. 答辩
其实事后想想,上面也称不上什么转机,顶多就算是把阅读题抄了一遍,只是稍微打乱了一下顺序。
答辩时评委问我:你们这个有什么优势呢?有什么是你们做了,但别人难以做到的?扪心自问,其实没有。我甚至没来得及做 Vercel Integration。如果我们事先准备好,让用户能够通过 Vercel Integration 得到独立的 NocoDB Backend API 与 独立的 TiDB 实例,也许算是个完整的产品,但目前这个完成度,也就比交白卷强那么一丢丢。
哎,打回原形,再次寄望于来年吧。
4. 赛事组织点评
TiDB Hackathon 的组织一如既往的给力。首先参赛过程非常舒服,纪念品诚意满满。CTO 的开场 brief 让人动力十足。后勤保障非常给力:包三餐、零食饮料下午茶管够;有些同学从外地来,想在公司打地铺,组委会也尽力帮忙满足。组委会还准备了一些活动,让大家能放松心情,加强交流,可惜我一直在跟 Vercel 搏斗,没空参加。哥们儿好歹也在 Just Dance 有 MegaDancer 的表现。
哦对,美中不足,空调不够给力,只有风没有制冷。猜测是大厦周末不供冷,不能全怪主办方。
这次我还动员了一些同学来参赛,不知道他们战果如何,希望比我好。相信他们也会收获颇丰。
5. 其它收获和感想
- NocoDB 输入体验不行,但其它体验挺好,值得长期使用
- TiDB 的确挺快,developer tier 足够我现在的用量,准备继续白嫖下去
- 学会了 Vercel 生态的知识
- deploy button
- template
- integration
- deploy API
- cli
- 新概念:HTAP
总结
今年的项目方向多半还是对的。降低用户门槛,提升产品可用性,应该是受主办方欢迎的方向。可惜我们选择的执行方式不够得当,可以帮用户薅羊毛,但要能薅到羊毛才行,目前这个方案,其实还有一段路要走。
考虑到厂里年底要突击,姆伊用药助手 0.2 版本还没开始动工,以及其它一些开发需求,我估计会把这个项目放一放,先用着我的 NocoDB + TiDB 实例。等待时机,再动手折腾折腾。
感谢 TiDB,举办这么棒的 Hackathon;感谢组委会,尽心尽力尽责,把活动办得这么好;感谢我老婆,给我放假让我在外面肝了两天代码;感谢竹子,跟我一起辛辛苦苦折腾半天,最后铩羽恶而归。生活还要继续,下周继续努力,大家一起加油。
欢迎吐槽,共同进步