通過 WASM 實現優雅高效的 TiDB UDF

近日,由 TiDB 社區主辦,專屬於全球開發者與技術愛好者的頂級挑戰賽事——TiDB Hackathon 2020 比賽圓滿落幕。今年是 TiDB Hackathon 第四次舉辦,參賽隊伍規模創歷屆之最,共有 45 支來自全球各地的隊伍報名,首次實現全球聯動。經過 2 天時間的極限挑戰, 大賽湧現出不少令人激動的項目。爲了讓更多朋友瞭解這些參賽團隊背後的故事, 我們將開啓 TiDB Hackathon 2020 優秀項目分享系列,本篇文章將介紹 ' or 0=0 or ' 團隊賽前幕後的精彩故事。

**本次大賽上, ' or 0=0 or ' 團隊非常優雅高效地基於 WASM 實現了 TiDB 的用戶自定義函數(UDF,User Defined Function)引擎,獲得評委老師的一致高分,一舉奪得本屆大賽冠軍,攬獲 10 萬元比賽獎金。**爲了給其他開發者們未來基於 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 小時極限開發交付的完美 UDF

**UDF 作爲一款用戶自定義函數引擎,可以讓用戶編寫複雜的自定義函數執行邏輯,並在數據庫上直接進行計算。**這個能力可以使用戶在 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 的方案。這在學術界目前還沒有解法,森海飛霞可能填補了學術界的空白,探索出一條證明確實可行的新方向。

關於該項目的訪談內容也將在近期推出,敬請期待!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章