作者 | 爾悅
采訪嘉賓(bin) | 廖浩均
小 T 導讀:作為創(chuang)始團隊成員之(zhi)一(yi)(yi),廖(liao)(liao)浩(hao)(hao)均在(zai) 2017 年就正(zheng)式加入(ru)(ru)了(le)濤(tao)思(si)數(shu)據(ju),彼(bi)時整個團隊才(cai)不過寥(liao)寥(liao)五個人,TDengine 也才(cai)誕生不久(jiu)。作為一(yi)(yi)位畢業(ye)于中科院計算所的計算機應用技術專業(ye)博(bo)士,廖(liao)(liao)浩(hao)(hao)均為什么會決定從(cong)一(yi)(yi)家穩(wen)定的上市(shi)企業(ye)轉移(yi)陣地(di)到一(yi)(yi)家數(shu)據(ju)庫初創(chuang)公(gong)司?在(zai)進入(ru)(ru)濤(tao)思(si)數(shu)據(ju)之(zhi)后,他又見證(zheng)和參(can)與(yu)了(le) TDengine 的哪些(xie)改變(bian)與(yu)進步?立足當下展(zhan)望(wang)未來,攜手 TDengine,他會如何走好接下來的路(lu)?在(zai)對廖(liao)(liao)浩(hao)(hao)均的采訪記錄中,這些(xie)問(wen)題的答案(an)也已經躍然(ran)紙上。
創始人“三顧茅廬”,博士“大佬”做出最終抉擇
作為(wei)一(yi)個學(xue)霸,廖(liao)浩均的學(xue)業(ye)(ye)生涯是比較順暢的,從北京(jing)師范(fan)大學(xue)信(xin)息管(guan)理與信(xin)息系統專(zhuan)業(ye)(ye)畢業(ye)(ye)后,他(ta)非常順利地(di)就考(kao)取了(le)中科院(yuan)計算(suan)所(中科院(yuan)研究生院(yuan))計算(suan)機應用技術專(zhuan)業(ye)(ye)的碩(shuo)士(shi),接著一(yi)路綠燈開掛式地(di)走完(wan)了(le)博士(shi)學(xue)位。在畢業(ye)(ye)之際,因為(wei)自覺并不(bu)太擅長科研領域的工(gong)(gong)作內容,他(ta)毅(yi)然而然決定進入工(gong)(gong)業(ye)(ye)界就業(ye)(ye)。
但一向雷厲風行的廖浩(hao)均(jun)卻在接受到(dao)濤思(si)數據(ju)遞出的橄(gan)欖枝時猶豫再三,在 Jeff(濤思(si)數據(ju)創始人陶建(jian)輝) 的“三顧茅廬”后才終(zhong)于下定決心。
在正式加入濤思前(qian),廖(liao)(liao)浩均在一家相對穩定的上市企業(ye)中(zhong)工作,按部就班(ban)的工作中(zhong)沒(mei)有多少驚喜也沒(mei)有太多的波瀾,久而(er)久之他便生出了換份工作的想法,而(er)恰逢(feng)其(qi)時,通過(guo)讀書時期實驗室(shi)師兄(xiong)的引薦(jian),他結識了正在進行人生中(zhong)第三次(ci)創業(ye)的 Jeff。提起來和 Jeff 的初次(ci)見(jian)面和溝通,廖(liao)(liao)浩均仍然記憶(yi)猶新。
“在和 Jeff 電話簡單聊過后,我打算去望京科技園實地拜訪,當時覺得時序數據庫(Time-Series Database)這個方向(xiang)還(huan)是很有意思的,Jeff 也是一個相當充滿激情的人。但(dan)兩(liang)次(ci)交流后我(wo)(wo)(wo)仍然(ran)無法下(xia)定決心(xin)加入(ru),主要來源于我(wo)(wo)(wo)對自己(ji)的顧慮,雖然(ran)我(wo)(wo)(wo)之前(qian)做(zuo)過數據(ju)庫的相關工作,但(dan)是已經有一段時間沒有接觸數據(ju)庫技(ji)術了(le),我(wo)(wo)(wo)有些擔心(xin)自己(ji)無法勝任。”
帶(dai)著這種謙虛的態度(du),廖(liao)浩均(jun)決(jue)定要和 TDengine 這款產品(pin)再彼(bi)此多了解一(yi)些。在隨后(hou)幾次與 Jeff 更深(shen)度(du)的溝(gou)通下,他(ta)逐漸為這位年近 50 卻仍舊奮斗在代碼創(chuang)作第一(yi)線上的創(chuang)始人(ren)的熱情和堅(jian)持(chi)折(zhe)服,也為 TDengine 這款時(shi)序數據(ju)庫所深(shen)深(shen)吸(xi)引,同時(shi)也看(kan)到了物聯網、時(shi)序數據(ju)庫領域廣闊的市場機遇,他(ta)決(jue)定挑戰一(yi)下自(zi)己(ji),抓(zhua)住這次轉(zhuan)換賽道的機會。
“在與 Jeff 的面對面交流中,我更加深入地了解了 TDengine,也看到了 Jeff 的技術能力——做分布式通訊的專家開始跨界搞數據庫,而且居然使用不帶插件的 vim 編程。此外,我發現當時的濤思數據雖然‘廟小’,但容納的‘大神’卻并不少,不僅有剛畢業的新銳海歸,還有工業數據庫領域的資深專家。總的來說,打動我加入濤思數據的原因有三點:Jeff 是一個很厲害的專家,他的工程能力和產品認知的敏銳性在我認識的人中無出其右;時序數據這個方向也很有前景;我自己應該能夠勝任這個挑戰。”
Jeff 的(de)“窮追猛(meng)打”下,廖浩均心中(zhong)沉寂已久(jiu)的(de)技術熱情又開始蠢(chun)蠢(chun)欲動(dong)了(le),最(zui)終他(ta)決心 All In 時序數據庫(ku),而這個選擇的(de)正確性也在后(hou)面幾(ji)年時間里(li)得到了(le)印證(zheng)。
“其(qi)實,在(zai)(zai)(zai)加(jia)入(ru)濤思之前(qian),我并(bing)不是很了解時序(xu)(xu)數(shu)(shu)據(ju)(ju)庫(ku)這(zhe)個(ge)細分領(ling)域中(zhong)的(de)產(chan)(chan)品。在(zai)(zai)(zai)2017年,時序(xu)(xu)數(shu)(shu)據(ju)(ju)庫(ku)這(zhe)個(ge)概念對國內的(de)諸(zhu)多(duo)用(yong)戶來(lai)說(shuo)還是太(tai)前(qian)沿,但是萬物互聯(lian)和(he)物聯(lian)網的(de)迅猛發展(zhan)確實都能切身體會(hui)(hui)到(dao)。一般來(lai)說(shuo),此前(qian)只有(you)(you)公交車(che)、出租車(che)等(deng)機動車(che)上安裝有(you)(you)用(yong)于上傳(chuan)車(che)輛狀(zhuang)態和(he)位置(zhi)數(shu)(shu)據(ju)(ju)的(de)專門設(she)備(bei),后(hou)來(lai)在(zai)(zai)(zai)智能穿戴(dai)設(she)備(bei)、2017 年最火爆風(feng)口‘共享單(dan)車(che)’、自(zi)動駕駛等(deng)方向上都會(hui)(hui)產(chan)(chan)生(sheng)大量的(de)時序(xu)(xu)數(shu)(shu)據(ju)(ju)……毫無疑問,這(zhe)些(xie)場(chang)景都在(zai)(zai)(zai)激(ji)發著時序(xu)(xu)數(shu)(shu)據(ju)(ju)應用(yong)和(he)管理的(de)需求(qiu)。按照這(zhe)個(ge)趨(qu)勢發展(zhan)下去,時序(xu)(xu)數(shu)(shu)據(ju)(ju)庫(ku)的(de)發展(zhan)勢不可擋,在(zai)(zai)(zai)我看來(lai),這(zhe)種直觀(guan)的(de)感受和(he)體驗最有(you)(you)說(shuo)服力。”
一個被申請了專利的設計思路,將時間壓縮提升近 50 倍
在(zai)加(jia)入濤思數據(ju)后,廖浩(hao)均(jun)主要(yao)負(fu)責查(cha)詢處理相(xiang)關的工(gong)作(zuo)(zuo),在(zai)讀書時他就(jiu)接觸過大(da)量空間數據(ju)相(xiang)關的工(gong)作(zuo)(zuo),研究(jiu)領域主要(yao)集中在(zai)空間數據(ju)索引和查(cha)詢算法兩大(da)方向上,因此在(zai)處理工(gong)作(zuo)(zuo)時也(ye)相(xiang)對比較(jiao)得(de)心(xin)應手。“我在(zai)入職兩三天后就(jiu)上手了工(gong)作(zuo)(zuo),做的第一(yi)件事就(jiu)是增加(jia) TDengine 的聚合查(cha)詢功能(neng)。”
廖浩均的一個直觀感受是,在一個全新的設計理念下開展設計以及進行工程開發,沒有其他的任何可借鑒的實踐經驗,真的非常考驗技術人的思考能力和創造性。例(li)如 TDengine 中的(de)多表(biao)架構設計,其最開始(shi)的(de)形(xing)態是采(cai)用每個表(biao)順(shun)序查(cha)詢迭代來(lai)完成,后(hou)來(lai)發現這種方法(fa)效率太差(cha),百(bai)萬級別的(de)表(biao)查(cha)詢耗時都會達到小時級別。
“在某天下班前,我打算在服務器上跑一下剛完成的查詢代碼,結果等了快 10 分鐘還沒有出結果,后來發現查詢跑了 1 個多小時以后進程掛起,最后結果也沒出來。當時就頭大了,這種查詢效率根本沒法使用,可是怎么改卻沒有現成的思路,只能自己嘗試。后來憋了好幾天,迸發出的靈感也幫助我打造出了全新的處理邏輯,后面我將思路與 Jeff 簡單交流了一下,得到認可后就開始動手調整代碼。調整后初步測試結果,就將時間壓縮到分鐘級別,提升近 50 多倍。隨著后續又進行了一系列工程優化方法,調整完成以后直接將時間壓縮到秒級。這是我印象中特別深刻的(de)一件事。”
在 TDengine 的發展史中,正是這個設計讓多表交互式查詢處理成為了可能,為 TDengine 能夠高效進行查詢處理服務成功奠基。之后這(zhe)個設計思路申請(qing)了 PCT 全球專利保護(hu),也(ye)成為(wei)廖浩均職業生(sheng)涯中的又一個閃光點。
眾(zhong)所周知,TDengine 還(huan)有(you)一(yi)個(ge)(ge)核心技術創新點叫超(chao)級表(biao),但其(qi)實(shi)在超(chao)級表(biao)的模(mo)型問(wen)世之前,其(qi)已經有(you)一(yi)套流程和邏(luo)輯了,在超(chao)級表(biao)模(mo)型確(que)定(ding)后,廖浩(hao)均等人又開始針對 TDengine 的寫入、查詢、數據存儲等多個(ge)(ge)方面進行調(diao)整和適配(pei)。
“由于 TDengine 是(shi)一款(kuan)具有一定探(tan)索性(xing)的產品,其(qi)功能(neng)的邊(bian)界(jie)和(he)(he)定義并不是(shi)非(fei)(fei)常清楚明晰,因而在架(jia)構(gou)設(she)計(ji)上(shang)也(ye)很難(nan)面(mian)面(mian)俱(ju)到,并確保足夠的余量(liang)和(he)(he)擴展性(xing)設(she)計(ji)。如果前期沒有做好(hao)設(she)計(ji),后面(mian)增加(jia)功能(neng)的時候會(hui)面(mian)臨非(fei)(fei)常大的困難(nan)。架(jia)構(gou)設(she)計(ji)考(kao)慮得不完善,需要重(zhong)構(gou),但是(shi)又不可(ke)能(neng)大規(gui)模(mo)調整框架(jia)設(she)計(ji)。只能(neng)采用小步快跑的方式,不停進行代碼和(he)(he)設(she)計(ji)架(jia)構(gou)的小規(gui)模(mo)重(zhong)構(gou)和(he)(he)優(you)化(hua)工作,還要避免(mian)重(zhong)構(gou)工作引(yin)入新的 Bug。”
在廖浩均的印象中,針對 TDengine 進行開發和調試 Bug 時,為了定位處理代碼中的邏輯錯誤,就需要閱讀和分析大量的日志,在這一工作中,通過日志分析定位代碼中的邏輯錯誤問題是一個非常重要的能力。 “我們最長時間的一次日志分析斷斷續續花了 1 天半的時間,是分析一個服務器、客戶端之間的查詢日志,通過日志信息分析還原了 3 個線程之間的、對于一個內存區的使用+線程調度問題處理中出現的 race condition。由于架構設計的原因,需要使用的處理方式和處理技巧相對復雜,后來 Jeff 為 TDengine 增加了對象生命周期管理的模塊,才避免了后續繼續在這個問題上掉坑。在增加和完善消息交互的流程追蹤機制基礎上,從幾十 GB 的日志中撈出來所需的兩三行確定性關鍵日志成為了常規操作,同時十幾、二十分鐘就能快速定位出問題,給出錯誤原因并將錯誤場景還原。”
TDengine 從 0.x 到 3.0,他既是見證者也是建設者
作為濤思(si)數(shu)據的“元老”之(zhi)一,回顧(gu) TDengine 的一路成長,廖浩均倍感榮(rong)耀(yao)和(he)欣慰。
“一(yi)些朋友可能不太清(qing)楚 TDengine 是(shi)怎么孵(fu)化出超級表概念(nian)的(de)(de)(de),其實(shi)這一(yi)概念(nian)是(shi) Jeff 在與網宿科(ke)技(ji)交(jiao)流過程中碰撞(zhuang)出來的(de)(de)(de),當時的(de)(de)(de)數據庫領域(yu)中并沒有(you)這樣一(yi)種(zhong)設(she)(she)計,能夠(gou)解決需要創(chuang)建很多表的(de)(de)(de)場景(jing)(TDengine 的(de)(de)(de)獨特(te)設(she)(she)計要求(qiu)每個設(she)(she)備有(you)一(yi)個寫(xie)(xie)入(ru)表),表的(de)(de)(de)模式一(yi)致,具(ju)體功能上(shang)既需要能夠(gou)單獨寫(xie)(xie)入(ru)、又需要實(shi)現通過一(yi)條 SQL 語句就(jiu)能夠(gou)查詢(xun)全部相同模式的(de)(de)(de)表。有(you)趣的(de)(de)(de)是(shi),超級表的(de)(de)(de)設(she)(she)計和(he)整體邏輯是(shi) Jeff 提出來的(de)(de)(de),但名字卻(que)是(shi)我取的(de)(de)(de)。”
超級表(biao)的問世無疑給 TDengine 注入(ru)了滿(man)滿(man)生機和活(huo)力,也讓 TDengine 在后(hou)續的市場競爭中成功脫穎而出。
據廖浩均回憶,在剛剛加入時(shi)(shi),TDengine 的(de)架(jia)構還(huan)非常簡單,也沒有太復雜的(de)處理(li)邏輯(ji),只能(neng)進(jin)行簡單的(de)投(tou)影查詢(xun)。“當時(shi)(shi)整個系統的(de)基(ji)礎架(jia)構以及核心組件,包括通訊模(mo)塊、消息(xi)隊列、事件驅動執行模(mo)塊、SQL 解析(xi)、查詢(xun)執行框(kuang)架(jia)、Driver,這些基(ji)本上都是 Jeff 自(zi)己在幾個月時(shi)(shi)間(jian)(jian)內完(wan)成的(de),由于人手(shou)和時(shi)(shi)間(jian)(jian)的(de)原因,這套服務端查詢(xun)處理(li)框(kuang)架(jia)從(cong) 0.x 版本一直延(yan)用到 1.x 版本,在 2.0 版本中才進(jin)行了(le)較大規模(mo)的(de)邏輯(ji)優化和重構。”
回顧 TDengine 從(cong) 0.x 到 2.x 的(de)發(fa)展(zhan),廖浩均(jun)感慨頗多。“得益于 Jeff 對時序數(shu)據(ju)(ju)庫這一細分領域的(de)前瞻性和洞(dong)察力,濤思在(zai)較早的(de)階段就進入(ru)其中,占領了一定的(de)產(chan)品和市(shi)場先機(ji),但這距離我(wo)們想要把TDengine 打造成物聯網(wang)行(xing)業(ye)首選(xuan)時序數(shu)據(ju)(ju)庫乃至全球(qiu)化產(chan)品的(de)目標還相距甚遠,所以(yi)從(cong) 0.x 到 2.x,TDengine 也在(zai)不斷進行(xing)技(ji)術創新(xin)和深耕。”
TDengine 0.x 的(de)版本基(ji)本上奠(dian)定了(le)后續的(de)技術(shu)基(ji)礎,包括管理(li)(li)節點、數據(ju)節點、虛(xu)擬(ni)節點的(de)設計(ji)(ji)和(he)(he)功能(neng)(neng)(neng)邊界、代(dai)碼(ma)實現(xian),消息通訊體系,分布(bu)式框架和(he)(he)元(yuan)數據(ju)管理(li)(li)架構(gou)等(deng)關(guan)鍵內容(rong),具(ju)備了(le)基(ji)本的(de) SQL 操作能(neng)(neng)(neng)力(li)和(he)(he)超級表模型,較完備的(de)高性(xing)能(neng)(neng)(neng)數據(ju)寫入流(liu)程和(he)(he)緩存中數據(ju)組織機制(zhi)、以及 WAL 設計(ji)(ji),具(ju)有優異(yi)(yi)讀寫性(xing)能(neng)(neng)(neng)的(de)文件組設計(ji)(ji),數據(ju)生(sheng)命周期管理(li)(li)機制(zhi),以及日志模塊和(he)(he)參數管理(li)(li)模塊,還包括同步異(yi)(yi)步支持的(de) Driver 等(deng)。
在隨(sui)后的(de)(de) 1.x 版(ban)本(ben)中,TDengine 結合用戶的(de)(de)需求,加入了(le)預計算功能(neng)(neng)、增(zeng)加了(le)亂序(xu)數據寫(xie)入能(neng)(neng)力,在 SQL 語法(fa)上進行增(zeng)強,修復(fu)了(le)系統整體上存在的(de)(de)大量問(wen)題并完善(shan)各模(mo)塊的(de)(de)功能(neng)(neng),同時從 1.4 版(ban)本(ben)開(kai)始進行開(kai)源,將核心代碼(ma)公開(kai)于 GitHub 上,在 GitHub 全球(qiu)趨勢排行榜(bang)上多次霸(ba)榜(bang),這一舉(ju)動也為 TDengine 帶來了(le)更多技(ji)術關注。
“敢于(yu)開(kai)源代表著我們不懼外(wai)界的(de)(de)(de)技(ji)術質疑,同時(shi)開(kai)源也有助于(yu)我們更加(jia)直接快(kuai)速(su)地獲得(de)用(yong)(yong)戶對(dui)于(yu)產品(pin)的(de)(de)(de)反饋(kui),加(jia)快(kuai)產品(pin)演進(jin)(jin)和研(yan)發速(su)度(du)。隨著開(kai)源力度(du)的(de)(de)(de)加(jia)大(da)、引擎研(yan)發團(tuan)隊(dui)技(ji)術人員的(de)(de)(de)增(zeng)加(jia)以及團(tuan)隊(dui)自身經驗的(de)(de)(de)積累,2.x 版(ban)本(ben)(ben)中我們進(jin)(jin)行(xing)了更優異的(de)(de)(de)模塊化和重構工作,對(dui)幾乎全部的(de)(de)(de)功(gong)能組件進(jin)(jin)行(xing)梳理和重構。雖然在(zai)用(yong)(yong)戶層面(mian)能看(kan)到的(de)(de)(de)功(gong)能增(zeng)強和改善并不多(duo),但(dan)是從產品(pin)角度(du)來(lai)說,2.0 真的(de)(de)(de)是 1.x 版(ban)本(ben)(ben)的(de)(de)(de)一(yi)次脫胎(tai)換骨式的(de)(de)(de)升級。”
如今,距離 2.0 版本發布已經過了兩年時間,為了讓用戶在使用體驗上更加順滑,如廖浩均一般的濤思技術人也在加班加點地對 TDengine 進行新一輪的優化和迭代。在他們的努力和一眾用戶的支持下,2022 年下半年,3.0 版本也將如期而至,屆時 TDengine 將迎來進一步升級和蛻變。
展望未來,攜手 TDengine 繼續前進
回(hui)顧加入濤思數據的(de)這些年,廖浩均表示最(zui)大(da)的(de)收(shou)獲就是結識(shi)了一(yi)群很優秀的(de)同事(shi),大(da)家為著共同的(de)目標而努力(li),是一(yi)件讓人(ren)很激動很興(xing)奮的(de)事(shi)情。而他(ta)本人(ren)也(ye)在這個(ge)過(guo)(guo)程中受益匪淺,通(tong)過(guo)(guo)參(can)與一(yi)套基礎軟(ruan)件系(xi)統(tong)從 0 到 1 的(de)開發,不(bu)僅重塑(su)了個(ge)人(ren)的(de)知識(shi)體(ti)系(xi),對(dui)于(yu)數據庫系(xi)統(tong)的(de)理解達到了一(yi)個(ge)新的(de)層次,也(ye)極大(da)提(ti)升了數據庫相關的(de)工程能力(li)。
談及自身的下一步發展,他希望還能繼續深耕在時序數據庫領域,一是源于興趣,二是源于前景。“物聯網時序數據領域還處于快速發展的階段,未來一定會有較大的發展空間,對于我自己來說,投身于這樣一個不斷發展的領域,也能鞭策著我不斷學習和進步。只有脫離舒適區,做有挑戰性的工作,才能讓能力提升這件事保持可持續性。如果你也對此感興趣,那開源社區是一個非常好的學習渠道,通過優秀的開源項目,能夠學習到非常多的經驗,歡迎你成為 TDengine 的貢獻者。”
而談及(ji) TDengine 的(de)未來,他(ta)希望經過時(shi)間的(de)洗禮,TDengine 能(neng)(neng)夠發展(zhan)成(cheng)為(wei)一個具(ju)備開箱即用、高(gao)(gao)性能(neng)(neng)時(shi)序(xu)數(shu)據處理(li)能(neng)(neng)力(li)的(de)重要軟件產品,涵(han)蓋時(shi)序(xu)數(shu)據日常(chang)應用中(zhong)的(de)重要場景所涉獵的(de)功(gong)能(neng)(neng),具(ju)備優秀的(de)伸縮能(neng)(neng)力(li)、容(rong)錯能(neng)(neng)力(li)、異(yi)構(gou)環境部(bu)署能(neng)(neng)力(li)以(yi)及(ji)面向用戶的(de)功(gong)能(neng)(neng)擴展(zhan)。在(zai)數(shu)據中(zhong)心和(he)邊緣(yuan)側具(ju)備同樣的(de)便捷性、易用性的(de)使用體驗,進一步為(wei)用戶提供高(gao)(gao)性能(neng)(neng)、高(gao)(gao)效能(neng)(neng)、高(gao)(gao)可(ke)靠性、低成(cheng)本(ben)的(de)時(shi)序(xu)數(shu)據處理(li)功(gong)能(neng)(neng)。



























