就(jiu)在(zai)昨天(2020年8月(yue)3日(ri)),濤思數據團隊正式宣布(bu),物聯(lian)網(wang)(wang)大(da)數據平(ping)臺TDengine集群(qun)(qun)版開源(yuan)(yuan)。此次開源(yuan)(yuan),我(wo)們(men)在(zai)GitHub上(shang)傳了23.9萬行(xing)源(yuan)(yuan)代(dai)碼,1198個源(yuan)(yuan)文件,包含我(wo)自(zi)己疫情期間寫的一(yi)(yi)萬余(yu)行(xing)C代(dai)碼,終于又了卻(que)我(wo)一(yi)(yi)個心愿,不用再糾結。我(wo)們(men)一(yi)(yi)個18人(ren)的團隊,通過三年的努力,為(wei)全(quan)球物聯(lian)網(wang)(wang)、工業(ye)互聯(lian)網(wang)(wang)、車聯(lian)網(wang)(wang)行(xing)業(ye)奉獻(xian)了一(yi)(yi)個開源(yuan)(yuan)的、具有超(chao)強性能(neng)和(he)分布(bu)式集群(qun)(qun)功(gong)能(neng)的專業(ye)大(da)數據平(ping)臺。
TDengine在去年(nian)7月(yue)開(kai)源(yuan)單機(ji)版之后,獲得了(le)極大(da)的反響,下載量(liang)已經超(chao)(chao)過(guo)百(bai)(bai)萬,每天clone代碼的超(chao)(chao)過(guo)一百(bai)(bai),正式(shi)上(shang)線的系統(tong)已有(you)數百(bai)(bai)個(ge)。除了(le)中國用戶之外,還有(you)來自美國、德(de)國、法國、意大(da)利、西班牙等全(quan)球各地(di)的開(kai)發者。而這一年(nian)這些開(kai)發者們(men)給我(wo)們(men)最大(da)的反饋是“TDengine性(xing)能超(chao)(chao)強,確實比Hadoop快的太多太多,安裝(zhuang)部署(shu)也很簡單,但我(wo)們(men)需(xu)要(yao)(yao)集群,我(wo)們(men)需(xu)要(yao)(yao)高(gao)可靠,我(wo)們(men)需(xu)要(yao)(yao)有(you)應對大(da)數據量(liang)的處理(li)方(fang)案”。

其(qi)實(shi),TDengine的(de)(de)(de)(de)(de)設(she)(she)計從一(yi)開(kai)(kai)始就(jiu)是集群的(de)(de)(de)(de)(de),是基(ji)于硬(ying)件、軟件系統(tong)不(bu)可靠(kao),一(yi)定會(hui)有故障的(de)(de)(de)(de)(de)假(jia)設(she)(she)進行(xing)設(she)(she)計的(de)(de)(de)(de)(de),是基(ji)于任何(he)單臺計算機(ji)(ji)都無足夠能力處理海量(liang)數據(ju)的(de)(de)(de)(de)(de)假(jia)設(she)(she)進行(xing)設(she)(she)計的(de)(de)(de)(de)(de)。只是作為(wei)(wei)一(yi)家商業(ye)公司,我們需(xu)要(yao)(yao)考慮如何(he)盈利(li),業(ye)內其(qi)他類(lei)似產品都是只開(kai)(kai)源(yuan)單機(ji)(ji)版,將集群功(gong)能納入企業(ye)版,需(xu)要(yao)(yao)付(fu)費才能使用。因此在一(yi)年(nian)前宣布(bu)開(kai)(kai)源(yuan)時,遵(zun)照慣例,我們也只開(kai)(kai)源(yuan)了(le)單機(ji)(ji)版。但一(yi)直以(yi)來,我都在思考:開(kai)(kai)源(yuan),就(jiu)應(ying)(ying)該把(ba)最(zui)核心的(de)(de)(de)(de)(de)代碼開(kai)(kai)源(yuan),就(jiu)應(ying)(ying)該把(ba)市場剛需(xu)的(de)(de)(de)(de)(de)那部分代碼開(kai)(kai)源(yuan),就(jiu)應(ying)(ying)該將自己(ji)最(zui)美、最(zui)有吸引力的(de)(de)(de)(de)(de)地方展現(xian)出來,否則開(kai)(kai)發者為(wei)(wei)什么要(yao)(yao)用你的(de)(de)(de)(de)(de)?核心痛點問(wen)題不(bu)解決,那可替代方案就(jiu)很多,產品本身的(de)(de)(de)(de)(de)推(tui)廣就(jiu)會(hui)大(da)打折扣(kou),開(kai)(kai)源(yuan)的(de)(de)(de)(de)(de)價值就(jiu)大(da)為(wei)(wei)下降(jiang)。
單機版(ban)開(kai)源(yuan)后(hou)的(de)市場(chang)的(de)反饋更是(shi)(shi)(shi)堅定了(le)我(wo)的(de)想法:集群是(shi)(shi)(shi)剛(gang)需,是(shi)(shi)(shi)真正的(de)痛點。我(wo)動(dong)了(le)集群版(ban)開(kai)源(yuan)的(de)心思。但是(shi)(shi)(shi),集群作(zuo)為(wei)剛(gang)需也一(yi)直(zhi)是(shi)(shi)(shi)我(wo)們銷(xiao)售的(de)一(yi)個亮點,如果開(kai)源(yuan),我(wo)們怎么贏利?這(zhe)一(yi)問題令我(wo)糾結(jie)了(le)很久,而團隊小伙伴、尤其是(shi)(shi)(shi)銷(xiao)售團隊,也在我(wo)提(ti)(ti)出要在業內率先將集群版(ban)開(kai)源(yuan)時,直(zhi)接(jie)提(ti)(ti)出質疑(yi)和反對。
2019年底(di),我徹底(di)想(xiang)明(ming)白了,一(yi)(yi)定(ding)要將(jiang)集群的(de)(de)代碼開(kai)(kai)源(yuan)。基于以下幾點,1:對于大數據平臺,沒有集群,就(jiu)相當(dang)于一(yi)(yi)個玩(wan)具,一(yi)(yi)個演示而(er)已(yi),誰也不會當(dang)真(zhen);2:開(kai)(kai)源(yuan)是基礎軟件行業(ye)大勢所趨,誰先(xian)真(zhen)正擁抱開(kai)(kai)源(yuan),而(er)不是假開(kai)(kai)源(yuan),誰就(jiu)搶占(zhan)先(xian)機;3:只(zhi)要全球超(chao)過30%以上的(de)(de)物(wu)聯網平臺都在使(shi)用TDengine,只(zhi)要能給用戶創造真(zhen)正的(de)(de)價值,公司(si)一(yi)(yi)定(ding)能找到生存的(de)(de)途(tu)徑(jing),一(yi)(yi)定(ding)能成(cheng)功。
除開源集群版的(de)(de)呼聲之外,我們(men)還收到(dao)了無數開發者給我們(men)的(de)(de)反饋:BUG、性能問(wen)題、功能問(wen)題等等,GitHub上TDengine的(de)(de)issue已經超過(guo)2800個。看到(dao)這么多issue,一方(fang)面(mian)為(wei)自(zi)己臉紅,因(yin)為(wei)自(zi)己都沒(mei)想到(dao)居然有這么多問(wen)題,但(dan)另外一方(fang)面(mian),又很開心,因(yin)為(wei)這說明(ming)很多開發者在(zai)真正用(yong)我們(men)的(de)(de)產(chan)品,喜愛(ai)我們(men)的(de)(de)產(chan)品,我們(men)找對了市場,我們(men)的(de)(de)產(chan)品是(shi)有價(jia)值的(de)(de)。
這樣(yang),2019年底(di),除了(le)集(ji)群版開源外,我(wo)們(men)還決定對TDengine的(de)一(yi)些(xie)模(mo)塊,包括存儲引(yin)擎、計算(suan)引(yin)擎以(yi)及集(ji)群模(mo)塊等進(jin)行(xing)重(zhong)(zhong)構。這兩(liang)大(da)決定都需要大(da)量(liang)工作,因此(ci),除創業之(zhi)初的(de)幾位大(da)將,勝(sheng)亮、小廖、洪澤之(zhi)外,團隊新鮮血液(ye)博(bo)民(min)、李琿、怡豪等同學也加入(ru)進(jin)來參與核心代(dai)碼的(de)研發。而且(qie)為保(bao)證質(zhi)量(liang),大(da)幅提升產品穩定性,我(wo)們(men)引(yin)入(ru)了(le)研發大(da)牛樹(shu)多、肖平,讓他們(men)搭(da)建CI/CD, 負責自動化測(ce)試,寫下五(wu)萬(wan)多行(xing)Python程序(xu),近千個測(ce)試例(li)。我(wo)自己這個68年生(sheng)的(de)程序(xu)員,雖已大(da)齡,但(dan)像以(yi)往(wang)一(yi)樣(yang),又(you)沖到了(le)第(di)一(yi)線,重(zhong)(zhong)構了(le)RPC、WAL以(yi)及SYNC模(mo)塊,新寫的(de)C代(dai)碼超過一(yi)萬(wan)行(xing),GitHub遞交的(de)PR超過155個。

我的(de)(de)(de)搭(da)檔(dang),另(ling)外一(yi)位(wei)(wei)(wei)50歲的(de)(de)(de)程(cheng)序(xu)員,20多年前(qian)(qian)就(jiu)是(shi)NASDAQ上市(shi)公(gong)司CTO,曾(ceng)任亞馬遜、思科(ke)全球高級(ji)副總裁,此時也挽起(qi)袖子,寫起(qi)程(cheng)序(xu)。而(er)(er)且(qie)從零(ling)開始學Python,寫下(xia)了專(zhuan)門做并發、做系(xi)統破壞性測試的(de)(de)(de)crash_gen.py (2800行(xing))。這個程(cheng)序(xu)讓每(mei)位(wei)(wei)(wei)研發同學都(dou)膽戰心驚,因為(wei)是(shi)專(zhuan)門找茬(cha)的(de)(de)(de),暴露的(de)(de)(de)問(wen)題往(wang)往(wang)毫(hao)無頭緒,卻一(yi)定是(shi)程(cheng)序(xu)問(wen)題。最開始30步都(dou)無法跑過,現在終(zhong)于(yu)(yu)能(neng)無限的(de)(de)(de)跑下(xia)去了。而(er)(er)這位(wei)(wei)(wei)搭(da)檔(dang),在我一(yi)年多前(qian)(qian)最初游說他加(jia)盟(meng)時其實興趣不大,不過,我和他談到今后世界上90%的(de)(de)(de)數(shu)據(ju)都(dou)是(shi)時序(xu)空間的(de)(de)(de)數(shu)據(ju),而(er)(er)如果大家都(dou)在用TDengine來進行(xing)存(cun)儲、查詢,即使我們公(gong)司不贏利,那(nei)也是(shi)一(yi)件人生(sheng)最值得自豪(hao)的(de)(de)(de)事情,是(shi)可以在人類信息技術史上留下(xia)痕跡的(de)(de)(de)事情。他終(zhong)于(yu)(yu)義無反顧的(de)(de)(de)加(jia)入,和大家一(yi)起(qi),細細打磨(mo)產品(pin),目標只有一(yi)個,就(jiu)是(shi)做一(yi)款有品(pin)位(wei)(wei)(wei)、能(neng)占領(ling)全球市(shi)場的(de)(de)(de)產品(pin)。
今年的(de)(de)新冠疫情給全球經濟(ji)重創(chuang),我們這個(ge)小小的(de)(de)團隊(dui)卻恰恰在此(ci)時靜下心來(lai),重構(gou)(gou)代碼,8個(ge)月的(de)(de)時間,犧牲了(le)所有的(de)(de)周末,我們終(zhong)于(yu)推出了(le)2.0集(ji)群(qun)版。雖沒見過(guo)凌晨四(si)點(dian)的(de)(de)洛杉磯(ji),但我們經常(chang)見凌晨四(si)點(dian)的(de)(de)GitHub。如果(guo)去年開(kai)源的(de)(de)版本(ben)能打(da)60分(fen),那我給2.0版本(ben)打(da)80分(fen)。不僅因為開(kai)源了(le)集(ji)群(qun),代碼重構(gou)(gou)后,邏輯更(geng)加清晰、模塊(kuai)劃分(fen)更(geng)加合理,便于(yu)維護、擴展。更(geng)重要的(de)(de)是(shi),我們開(kai)源了(le)測試(shi)框架以(yi)及近千個(ge)測試(shi)例,而且將完整的(de)(de)設(she)計(ji)文檔分(fen)享出來(lai)。我自(zi)己編寫的(de)(de)整體(ti)架構(gou)(gou)設(she)計(ji)、數據復制模塊(kuai)設(she)計(ji)等(deng)等(deng)文檔,都已經在官網上公開(kai),供大家瀏覽指正。
做(zuo)(zuo)一(yi)個60分(fen)(fen)的(de)(de)(de)產品(pin)不(bu)難,有個不(bu)錯的(de)(de)(de)主意,能動手(shou)寫點程序,立馬(ma)就能做(zuo)(zuo)出(chu)(chu)來。但要(yao)(yao)做(zuo)(zuo)到80分(fen)(fen),就要(yao)(yao)付出(chu)(chu)更(geng)多(duo)(duo)的(de)(de)(de)努力(li)。而(er)(er)我的(de)(de)(de)目標是做(zuo)(zuo)一(yi)個能打99分(fen)(fen)的(de)(de)(de)產品(pin),因為(wei)做(zuo)(zuo)到99分(fen)(fen)時,就天下無敵,而(er)(er)且技術生涯才會畫一(yi)完美的(de)(de)(de)句號。不(bu)過,從80分(fen)(fen)到99分(fen)(fen),比從60分(fen)(fen)到80分(fen)(fen),要(yao)(yao)多(duo)(duo)付出(chu)(chu)超(chao)10倍的(de)(de)(de)努力(li)。幸運的(de)(de)(de)是,我們(men)已(yi)經有了一(yi)支很不(bu)錯的(de)(de)(de)產品(pin)隊伍,而(er)(er)且有GGV、紅杉、明(ming)勢資(zi)本等(deng)機構(gou)超(chao)過2000萬美元的(de)(de)(de)投資(zi),相信只要(yao)(yao)能堅持靜心做(zuo)(zuo)產品(pin),專注下去,我們(men)一(yi)定能做(zuo)(zuo)到99分(fen)(fen)。
我總(zong)感慨自(zi)己幸(xing)運(yun),在(zai)90年代初去(qu)美國留(liu)學工作,趕(gan)上美國互聯(lian)網行(xing)業(ye)(ye)大爆發,正(zheng)(zheng)(zheng)值中國經濟騰飛之時,我又回到北京(jing)創業(ye)(ye)。如今,在(zai)接(jie)近退(tui)休的(de)(de)年齡,居然(ran)又發現了一(yi)個(ge)嶄新的(de)(de)機會,而且是一(yi)個(ge)特別適合(he)程(cheng)序員老(lao)司機的(de)(de)機會——做(zuo)底層軟件的(de)(de)開發。不僅(jin)做(zuo)整體架構(gou)的(de)(de)設計,還要(yao)動手寫(xie)代碼、debug、寫(xie)文檔,天天和團(tuan)隊80后、90后同學們一(yi)起(qi)戰斗,樂(le)此不疲(pi)。每每想到這里(li),我都(dou)會慶幸(xing)自(zi)己3年前(qian)的(de)(de)選擇(ze)(ze),也慶幸(xing)自(zi)己選擇(ze)(ze)了開源(yuan)的(de)(de)道路。如果沒有這個(ge)選擇(ze)(ze),我和太(tai)太(tai)應該正(zheng)(zheng)(zheng)在(zai)世(shi)(shi)界各地旅行(xing),品嘗美食,陪她流連于美術館(guan)博物館(guan),過(guo)著人(ren)(ren)人(ren)(ren)羨慕的(de)(de)日子,但(dan)我想,那(nei)才是真正(zheng)(zheng)(zheng)的(de)(de)隨時光老(lao)去(qu),因為世(shi)(shi)界已經不需要(yao)我的(de)(de)存在(zai)。
集群版都開源(yuan)了,也許(xu)付費用(yong)(yong)戶(hu)真的(de)(de)會(hui)(hui)(hui)變少,但那就(jiu)隨他去吧。我(wo)(wo)(wo)(wo)絕(jue)不會(hui)(hui)(hui)像(xiang)有些廠商一(yi)樣,先開源(yuan),然后(hou)閉源(yuan)。只(zhi)(zhi)要(yao)有人(ren)用(yong)(yong),而且用(yong)(yong)的(de)(de)人(ren)多,就(jiu)是(shi)對(dui)我(wo)(wo)(wo)(wo)、對(dui)我(wo)(wo)(wo)(wo)們團隊(dui)最(zui)大的(de)(de)獎勵。哪怕是(shi)大家開噴,指(zhi)出各(ge)種問題,我(wo)(wo)(wo)(wo)也會(hui)(hui)(hui)特別開心,因(yin)為只(zhi)(zhi)要(yao)有問題,我(wo)(wo)(wo)(wo)們就(jiu)會(hui)(hui)(hui)好好地去改進,用(yong)(yong)心地去做(zuo)。即使真有一(yi)天,我(wo)(wo)(wo)(wo)們連一(yi)個(ge)18人(ren)團隊(dui)都無法養活,我(wo)(wo)(wo)(wo)也會(hui)(hui)(hui)繼續(xu)做(zuo)下去,會(hui)(hui)(hui)每天把(ba)產品(pin)細(xi)細(xi)地打磨(mo),直到我(wo)(wo)(wo)(wo)無法動(dong)彈的(de)(de)一(yi)天,因(yin)為這是(shi)我(wo)(wo)(wo)(wo)最(zui)大的(de)(de)樂趣,我(wo)(wo)(wo)(wo)把(ba)TDengine當(dang)作(zuo)我(wo)(wo)(wo)(wo)人(ren)生(sheng)最(zui)后(hou)一(yi)幅(fu)作(zuo)品(pin),而且是(shi)一(yi)幅(fu)可(ke)以讓我(wo)(wo)(wo)(wo)持續(xu)打磨(mo)到老的(de)(de)作(zuo)品(pin)。
一(yi)年前(qian)開源時,我(wo)曾說過:“錢(qian)再多(duo),也難讓(rang)人在歷史(shi)上留下痕跡,但一(yi)幅好的作品(pin)卻可以傳承,讓(rang)后人好好的品(pin)味。愿我(wo)領頭開發的TDengine成為(wei)傳世之(zhi)作,Leave a dent in the world!”, 今天再將這(zhe)(zhe)一(yi)段“初心”寫一(yi)遍(bian),希望這(zhe)(zhe)次集群(qun)版的開源,能夠讓(rang)TDengine離傳世之(zhi)作更近一(yi)步。



























