无码人妻精品一区二区三18禁,影音先锋男人AV橹橹色,污污污污污污www网站免费,日韩成人av无码一区二区三区,欧美性受xxxx狂喷水

徹底開源、十倍性能的背后:TDengine 核心技術首度公開

小T

2020-11-12 /

2020年11月7日(ri)(ri)(ri),TDengine技(ji)術(shu)開(kai)放(fang)日(ri)(ri)(ri)(北京站)在中關村舉辦。開(kai)源一年零四(si)個月,14k Star,3.6k Fork,日(ri)(ri)(ri)增100+的(de)(de)開(kai)源用(yong)戶(hu)數……除了(le)(le)(le)(le)這些(xie)亮(liang)眼的(de)(de)數字外,本次技(ji)術(shu)開(kai)放(fang)日(ri)(ri)(ri)上,TDengine核(he)心作(zuo)者團(tuan)隊,還(huan)亮(liang)出了(le)(le)(le)(le)殺手锏,首度公開(kai)了(le)(le)(le)(le)TDengine Database徹(che)底開(kai)源、十倍性能(neng)(neng)的(de)(de)背后核(he)心技(ji)術(shu)和(he)(he)設計思想。特(te)此回(hui)顧,希望能(neng)(neng)幫助更多開(kai)發人員和(he)(he)物聯網從(cong)業者深入了(le)(le)(le)(le)解TDengine的(de)(de)優勢(shi)與技(ji)術(shu)理念(nian)。回(hui)顧視頻和(he)(he)演講PPT的(de)(de)獲取方(fang)式見文末(mo)。

當萬(wan)物(wu)(wu)互(hu)聯(lian)(lian)的(de)(de)理(li)想一(yi)步步走向現實(shi),物(wu)(wu)聯(lian)(lian)網產業(ye)(ye)(ye)也(ye)開始面(mian)對一(yi)系列前所未有的(de)(de)挑戰。其中,缺乏(fa)針(zhen)對海量設備數(shu)據的(de)(de)處(chu)理(li)工(gong)具是(shi)眾多從業(ye)(ye)(ye)者面(mian)臨的(de)(de)關(guan)鍵問(wen)題:互(hu)聯(lian)(lian)網流行(xing)的(de)(de)大數(shu)據解決方案在(zai)物(wu)(wu)聯(lian)(lian)網領域往(wang)往(wang)顯得“水土不(bu)服”,在(zai)性(xing)能(neng)、成本、復(fu)雜性(xing)、靈(ling)活性(xing)等(deng)方面(mian)都很難滿足行(xing)業(ye)(ye)(ye)期望。由(you)于(yu)物(wu)(wu)聯(lian)(lian)網大數(shu)據具備許多獨(du)有的(de)(de)特性(xing),物(wu)(wu)聯(lian)(lian)網產業(ye)(ye)(ye)亟需(xu)一(yi)種(zhong)專為自身設計優化的(de)(de)大數(shu)據平(ping)臺(tai)技術,解決不(bu)斷增長(chang)的(de)(de)海量數(shu)據處(chu)理(li)需(xu)求。

面對這一市場空(kong)白,濤思數(shu)據開發了自主可控的高(gao)性能(neng)、可伸(shen)縮、高(gao)可靠、零管理的物(wu)聯(lian)網大(da)數(shu)據平臺TDengine,可廣泛運用于物(wu)聯(lian)網、車聯(lian)網、工業互聯(lian)網、IT運維等領域。通過一系列技術創新,TDengine取得(de)了比通用大(da)數(shu)據平臺高(gao)出10倍以上的性能(neng)與(yu)更(geng)低的總體成本(ben),解決了困擾(rao)物(wu)聯(lian)網企(qi)業的一大(da)難題。開源(yuan)以來(lai),TDengine在(zai)GitHub已(yi)收(shou)獲14k Star和(he)(he)3.6k fork,得(de)到了廣泛的關注(zhu)和(he)(he)好評(ping),成為中(zhong)國開源(yuan)軟件(jian)的榜樣力量。

十倍性能的背后:TDengine的核心技術解析

相比現有的通(tong)用(yong)數據庫技術(shu),TDengine Database可(ke)以每秒(miao)處理數百(bai)萬請求,性能提(ti)升10倍(bei)以上。本(ben)次活(huo)動開(kai)場,濤思數據創始人陶建輝為與會(hui)者深度解析了TDengine達(da)到如此(ci)高性能背后所(suo)做的技術(shu)創新。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫

TDengine不單單是一個時序數據庫(Time-Series Database),還包含(han)緩存(cun)、數據訂閱、流式計算(suan)等一系列功能,可以為工業互聯網(wang)(wang)、物聯網(wang)(wang)等場(chang)景提供一站式的全棧數據處理解決方(fang)案。——陶建輝

就(jiu)本(ben)質(zhi)而言,TDengine的(de)(de)(de)設(she)計(ji)目標是一個面向物聯(lian)網的(de)(de)(de)大數據平臺,使用戶無需集成Kafka、Spark、Redis等(deng)額(e)外的(de)(de)(de)解決方(fang)案,從而降低(di)開發和(he)維護成本(ben)。另一方(fang)面,TDengine的(de)(de)(de)輕量化特(te)性(xing)(完整安裝包2MB左右)也(ye)可以(yi)在邊(bian)緣側代替SQlite,并提供了(le)后(hou)者不(bu)具備的(de)(de)(de)數據保(bao)留策略、流(liu)式計(ji)算(suan)、采樣等(deng)功能(neng)。TDengine還可以(yi)對接Kafka、組態軟件、Python等(deng)語言和(he)技術應用,實際使用中非常靈活。

TDengine之所(suo)以能夠實現極(ji)高的性能,是因為產品充分利(li)用了物(wu)聯網大數(shu)據(ju)(ju)的十大特性:1)時(shi)序(xu);2)結(jie)構化(hua)(hua);3)采集點數(shu)據(ju)(ju)源唯一性;4)數(shu)據(ju)(ju)較少(shao)更新/刪除;5)數(shu)據(ju)(ju)多按日(ri)期刪除;6)寫操(cao)(cao)作為主(zhu),讀(du)操(cao)(cao)作為輔;7)數(shu)據(ju)(ju)流量(liang)平穩;8)數(shu)據(ju)(ju)包含統計/聚合等(deng)實時(shi)計算操(cao)(cao)作;9)數(shu)據(ju)(ju)多按指定(ding)時(shi)間段和區域查找;10)數(shu)據(ju)(ju)量(liang)較大。TDengine從(cong)設計之初就針對(dui)上述特性專(zhuan)門優化(hua)(hua),為物(wu)聯網場景量(liang)身定(ding)制。另(ling)一方(fang)面,TDengine的代碼庫(ku)完(wan)全(quan)自主(zhu)編寫,不(bu)包含任何(he)第三方(fang)庫(ku),因而(er)可以在優化(hua)(hua)層(ceng)面做到極(ji)致。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫

物(wu)聯網傳感器采集(ji)的(de)(de)數(shu)(shu)據都是符合時間順序的(de)(de),針對這一(yi)特性,TDengine創新地(di)改變(bian)了數(shu)(shu)據模型,引入(ru)“一(yi)個采集(ji)點一(yi)張表”的(de)(de)模式和分塊連(lian)續(xu)存儲(chu),從(cong)而簡化了單點的(de)(de)數(shu)(shu)據添加(jia)操作,加(jia)快(kuai)了數(shu)(shu)據的(de)(de)插入(ru)和查詢速度。

在(zai)(zai)寫入流(liu)程方面,TDengine將(jiang)每個(ge)傳感器當作一個(ge)消息隊(dui)列(lie),在(zai)(zai)內(nei)存中先進先出,保證新采集的數(shu)(shu)據都在(zai)(zai)內(nei)存中。數(shu)(shu)據庫則按(an)時間段分區,可以(yi)快速定(ding)位讀取(qu)歷(li)史數(shu)(shu)據。這樣的模型還利于多級存儲,通過時間段區分數(shu)(shu)據熱度來降(jiang)低(di)存儲成(cheng)本。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫

為(wei)了解決新模型帶來的數(shu)據(ju)表(biao)(biao)數(shu)量過于(yu)(yu)龐大的問題,TDengine還引入了“超(chao)(chao)級(ji)表(biao)(biao)”的理念,用超(chao)(chao)級(ji)表(biao)(biao)來描述(shu)數(shu)據(ju)的各個類型,為(wei)數(shu)據(ju)表(biao)(biao)加(jia)上了帶有靜態屬性的標簽,便于(yu)(yu)眾多(duo)采(cai)集(ji)點的高速數(shu)據(ju)聚(ju)合查(cha)詢(xun)。超(chao)(chao)級(ji)表(biao)(biao)將(jiang)時序數(shu)據(ju)和(he)(he)(he)標簽數(shu)據(ju)分(fen)離存儲,可以(yi)大幅節約(yue)存儲空(kong)間,實(shi)現(xian)(xian)全內存高速存儲和(he)(he)(he)查(cha)詢(xun)。由于(yu)(yu)標簽可以(yi)事(shi)后(hou)增(zeng)刪改查(cha),因此很(hen)適合處理歷(li)史數(shu)據(ju)和(he)(he)(he)多(duo)維分(fen)析。TDengine的數(shu)據(ju)訂閱(yue)(yue)功能支持表(biao)(biao)/超(chao)(chao)級(ji)表(biao)(biao)訂閱(yue)(yue),后(hou)者還可以(yi)實(shi)現(xian)(xian)條件過濾。最(zui)后(hou),TDengine還通過數(shu)據(ju)訂閱(yue)(yue)支持邊(bian)云協(xie)同,可實(shi)現(xian)(xian)多(duo)級(ji)結構。

在(zai)(zai)后續開發計劃(hua)中,TDengine還將在(zai)(zai)數(shu)(shu)據(ju)采集側提(ti)(ti)供(gong)(gong)更(geng)多連接器,在(zai)(zai)數(shu)(shu)據(ju)分析側無(wu)縫(feng)對接各種可(ke)視化(hua)/BI工(gong)具,并提(ti)(ti)供(gong)(gong)事件驅動(dong)的流式計算功能。TDengine還將持續為各行業(ye)提(ti)(ti)供(gong)(gong)特有(you)的分析函數(shu)(shu),例如電力行業(ye)的截(jie)面數(shu)(shu)據(ju)、化(hua)工(gong)行業(ye)的特殊函數(shu)(shu)等,為更(geng)多應用場景(jing)提(ti)(ti)供(gong)(gong)高(gao)度優化(hua)的解決方案。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫

TDengine 2.0 的集群設計思想與工作機制

2020年(nian)8月發(fa)布的(de)TDengine 2.0是一次重大(da)更新,引入了(le)大(da)量全新特性。陶老師的(de)分享之后,濤思(si)數(shu)據聯合創始人關勝亮介紹了(le)TDengine 2.0集(ji)群的(de)設計思(si)想與工作機(ji)制。

TDengine 2.0的(de)關鍵特性是(shi)(shi)采用了(le)FQDN(完全限定域(yu)名)來(lai)區分物(wu)理和(he)數(shu)據(ju)(ju)節(jie)點(dian)。物(wu)理節(jie)點(dian)是(shi)(shi)獨(du)立的(de)計算機(ji),而(er)數(shu)據(ju)(ju)節(jie)點(dian)是(shi)(shi)前者上的(de)實例,包含許多虛(xu)擬節(jie)點(dian)。通過多個虛(xu)擬節(jie)點(dian),TDengine可以將計算資源和(he)數(shu)據(ju)(ju)分片在(zai)很多異構機(ji)器上。此(ci)外,特定虛(xu)擬節(jie)點(dian)還會充當管理節(jie)點(dian)。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫

在上述結構中,心(xin)跳負(fu)責維持(chi)管(guan)理狀態(tai),客戶(hu)端需要查詢/寫入時則(ze)從(cong)管(guan)理節點(dian)獲取虛擬節點(dian)的路由(you)信(xin)息,然后(hou)找到對(dui)應(ying)的數(shu)據節點(dian)獲得服務(wu)。不同節點(dian)之間的數(shu)據采(cai)用(yong)主從(cong)復制模式,通訊(xun)則(ze)采(cai)用(yong)TCP/UDP混合模式。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫

由于(yu)數據(ju)(ju)節(jie)(jie)點實現了虛擬化,就可以(yi)將節(jie)(jie)點數據(ju)(ju)根據(ju)(ju)需(xu)要分(fen)散在不同(tong)物理機(ji)器上,以(yi)防(fang)止數據(ju)(ju)過熱、傾斜并(bing)提(ti)(ti)升可靠(kao)性(xing)(xing)等等。當數據(ju)(ju)在不同(tong)節(jie)(jie)點有多個副本時(shi),通過主從選(xuan)(xuan)舉(ju)的(de)方式選(xuan)(xuan)出主節(jie)(jie)點。在不同(tong)節(jie)(jie)點之間的(de)數據(ju)(ju)復制(zhi)默認為異步(bu),以(yi)顯著提(ti)(ti)升復制(zhi)速度。但(dan)平(ping)臺也針對安全性(xing)(xing)需(xu)求較(jiao)高的(de)場景提(ti)(ti)供了同(tong)步(bu)復制(zhi)選(xuan)(xuan)項。出現數據(ju)(ju)不同(tong)步(bu)的(de)問題時(shi),平(ping)臺還提(ti)(ti)供了數據(ju)(ju)恢復的(de)機(ji)制(zhi)。

TDengine的(de)數據分(fen)片(pian)是(shi)(shi)基于虛(xu)擬(ni)節(jie)(jie)點(dian)(dian)(Vnode)的(de),每(mei)個表(biao)(biao)只(zhi)進(jin)入一個虛(xu)擬(ni)節(jie)(jie)點(dian)(dian),每(mei)個虛(xu)擬(ni)節(jie)(jie)點(dian)(dian)則(ze)(ze)包含多(duo)個表(biao)(biao)。新建(jian)虛(xu)擬(ni)節(jie)(jie)點(dian)(dian)時,系統會自動選擇(ze)負載(zai)較低的(de)物理(li)機器創(chuang)建(jian)節(jie)(jie)點(dian)(dian)。每(mei)個虛(xu)擬(ni)節(jie)(jie)點(dian)(dian)大(da)約維持(chi)(chi)在(zai)一萬表(biao)(biao)左右(you)以實現最佳性(xing)能。管(guan)理(li)節(jie)(jie)點(dian)(dian)則(ze)(ze)根(gen)(gen)據各(ge)虛(xu)擬(ni)節(jie)(jie)點(dian)(dian)的(de)負載(zai)狀況進(jin)行(xing)實時打(da)分(fen),并根(gen)(gen)據打(da)分(fen)情況實施負載(zai)均(jun)衡。由于分(fen)片(pian)策(ce)略是(shi)(shi)在(zai)表(biao)(biao)建(jian)立時確定的(de),因(yin)此可(ke)能存(cun)在(zai)多(duo)個熱點(dian)(dian)表(biao)(biao)同時進(jin)入單個虛(xu)擬(ni)節(jie)(jie)點(dian)(dian)的(de)情況,造成節(jie)(jie)點(dian)(dian)過(guo)熱,這(zhe)是(shi)(shi)目前存(cun)在(zai)的(de)設計缺陷。不過(guo)由于數據表(biao)(biao)數量較多(duo),因(yin)此這(zhe)種情況出現的(de)幾率較少。在(zai)數據負載(zai)均(jun)衡調整時,通過(guo)副本動態(tai)增加和減(jian)少可(ke)以持(chi)(chi)續提(ti)供服務,防止中斷。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫

健壯(zhuang)性層面,引擎(qing)會嚴格保(bao)(bao)證異步(bu)或掉線節點不(bu)能提供(gong)服務,并會在數(shu)據(ju)同步(bu)和(he)查詢時校驗每(mei)個(ge)數(shu)據(ju)塊,保(bao)(bao)證數(shu)據(ju)完整性。

如虎添翼:TDengine的存儲和壓縮算法詳解

存儲和壓(ya)縮技(ji)術是數(shu)據科(ke)學中的關鍵環節,優秀(xiu)的大(da)數(shu)據平(ping)臺必(bi)須搭(da)配優秀(xiu)的存儲算法。關勝(sheng)亮分享(xiang)結束后,濤思數(shu)據聯合創始(shi)人(ren)程洪澤(ze)講解了TDengine的存儲和壓(ya)縮算法技(ji)術細節。

如(ru)前所(suo)述,TDengine主要針對(dui)時序數(shu)(shu)(shu)據(ju)進(jin)行(xing)優化(hua)設計。有的(de)(de)時序數(shu)(shu)(shu)據(ju)會(hui)長時間(jian)固定(ding),有的(de)(de)會(hui)存在(zai)變化(hua)趨勢(shi),還有的(de)(de)會(hui)有一(yi)定(ding)波動范圍;此外,各種數(shu)(shu)(shu)據(ju)都可(ke)能會(hui)產生跳變異常。針對(dui)這些特性,TDengine采用(yong)單采集(ji)點單張表、數(shu)(shu)(shu)據(ju)連續存儲和BRIN索引(yin)方法。由于數(shu)(shu)(shu)據(ju)分片的(de)(de)基(ji)礎(chu)是虛(xu)(xu)擬(ni)節點,因此很容易利用(yong)虛(xu)(xu)擬(ni)節點實現多核并發加速。同(tong)一(yi)個虛(xu)(xu)擬(ni)節點內的(de)(de)數(shu)(shu)(shu)據(ju)按(an)時間(jian)分區,同(tong)一(yi)時間(jian)段(duan)(duan)數(shu)(shu)(shu)據(ju)存放在(zai)同(tong)一(yi)文件(jian)內,這樣(yang)可(ke)以(yi)更好地適應按(an)時間(jian)段(duan)(duan)查(cha)詢和刪除(chu)的(de)(de)操作。

TDengine針對(dui)時(shi)序數(shu)據的特點(dian),專門研(yan)發了(le)TSDB存儲和查詢引(yin)擎。TSDB存放了(le)虛擬節點(dian)中(zhong)表的META信(xin)息(xi)以(yi)(yi)及(ji)時(shi)序數(shu)據(采集信(xin)息(xi)),后(hou)者以(yi)(yi)行和列兩種結(jie)構存儲。META包(bao)括(kuo)表/超級表的SCHEMA、子表TAG值、TAG SCHEMA和子表/超級表的從屬關系。META操作先在內存中(zhong)進行,最(zui)后(hou)序列化并寫入硬盤(pan)。

META數(shu)據根據子表的第一(yi)個TAG值建立一(yi)個內存索引,而虛擬(ni)節點只對TAG的第一(yi)個值索引,因此速度最快。META數(shu)據寫入內存時會同(tong)時生成序列化記錄(lu),以append only形(xing)式存儲(chu)到內存buffer。內存數(shu)據達(da)到一(yi)定(ding)量后(hou)觸(chu)發(fa)落盤(pan)(pan),更新的序列化META數(shu)據以append only形(xing)式寫入硬盤(pan)(pan)META文件。

TSDB內(nei)存(cun)中(zhong)的(de)時序(xu)數(shu)據(ju)為(wei)行存(cun)儲(chu),因而支持以append only形式添加buffer,從(cong)而充分利用內(nei)存(cun)資(zi)源,有利于壓縮。落盤時,時序(xu)數(shu)據(ju)會轉(zhuan)化(hua)為(wei)列存(cun)儲(chu),維護(hu)BRIN索(suo)引(yin),引(yin)入LAST文件(jian)和(he)SUB-BLOCK機制處理文件(jian)碎(sui)片化(hua)。

TSDB啟動時(shi)(shi)會事先分配一個(ge)BUFFER POOL作為寫(xie)(xie)入(ru)緩(huan)(huan)沖(chong)(chong)(chong),緩(huan)(huan)沖(chong)(chong)(chong)區塊(kuai)(kuai)大(da)小和個(ge)數(shu)(shu)可配,區塊(kuai)(kuai)個(ge)數(shu)(shu)可修改(gai)。META數(shu)(shu)據和采(cai)集數(shu)(shu)據從緩(huan)(huan)沖(chong)(chong)(chong)塊(kuai)(kuai)申請(qing)寫(xie)(xie)入(ru)空(kong)間,寫(xie)(xie)入(ru)引擎向BUFFER POOL申請(qing)緩(huan)(huan)沖(chong)(chong)(chong)區塊(kuai)(kuai),寫(xie)(xie)滿的(de)緩(huan)(huan)沖(chong)(chong)(chong)區塊(kuai)(kuai)占(zhan)總緩(huan)(huan)沖(chong)(chong)(chong)區塊(kuai)(kuai)的(de)三分之一時(shi)(shi)觸發落(luo)盤操作。落(luo)盤時(shi)(shi),緩(huan)(huan)沖(chong)(chong)(chong)區塊(kuai)(kuai)中的(de)數(shu)(shu)據寫(xie)(xie)入(ru)到(dao)META等文件中,落(luo)盤結束后(hou)緩(huan)(huan)沖(chong)(chong)(chong)區塊(kuai)(kuai)歸還給(gei)BUFFER POOL,形(xing)成循(xun)環機制。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫

查詢(xun)時(shi)需要查詢(xun)MEM、iMEM以及對(dui)硬(ying)(ying)盤的(de)文件數(shu)據(ju)進行合(he)并查詢(xun)。時(shi)序數(shu)據(ju)有一定(ding)的(de)亂序情況,如果由(you)LSM來處理(li)會有大量的(de)文件合(he)并。為(wei)了避(bi)免這個問題,TSDB將標(biao)簽數(shu)據(ju)和時(shi)序數(shu)據(ju)分(fen)離存(cun)(cun)儲。但(dan)由(you)于硬(ying)(ying)盤上只對(dui)時(shi)間戳做了索(suo)引,對(dui)非主(zhu)鍵沒有做索(suo)引,因此非主(zhu)鍵的(de)查詢(xun)和過濾效率相對(dui)較(jiao)低;由(you)于硬(ying)(ying)盤是(shi)列存(cun)(cun)儲,為(wei)提升壓縮效率就需要足夠的(de)數(shu)據(ju)量,所以這對(dui)內存(cun)(cun)也(ye)有一定(ding)的(de)要求。

壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo)算法(fa)方面,TDengine對(dui)于不(bu)同(tong)的(de)數據類型采用(yong)不(bu)同(tong)的(de)壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo)算法(fa),有(you)三(san)種(zhong)壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo)設(she)置。首(shou)先是(shi)無壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo);然后是(shi)一級壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo),根(gen)據不(bu)同(tong)的(de)數據類型進(jin)(jin)行壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo);二級壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo)在不(bu)同(tong)的(de)列進(jin)(jin)行壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo)后,用(yong)通用(yong)的(de)壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo)算法(fa)進(jin)(jin)行壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo)。TDengine使用(yong)的(de)壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo)算法(fa)包括DELTA-OF-DELTA、ZIG ZAG Encoding等。相比(bi)很多數據庫來說,TDengine的(de)列存儲和二級壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo)特性(xing)使其對(dui)于時序數據能有(you)很大的(de)壓(ya)(ya)(ya)(ya)(ya)(ya)縮(suo)(suo)效(xiao)率。

相信代碼:開源軟件CI/CD的經驗談

作為(wei)國內開源軟件企業的(de)(de)佼(jiao)佼(jiao)者,濤(tao)思(si)數據很早就形成了(le)(le)基于(yu)GitHub的(de)(de)完整CI/CD流程,在長期(qi)的(de)(de)實踐(jian)中(zhong)積(ji)累了(le)(le)豐(feng)富的(de)(de)經(jing)驗。在本場活動的(de)(de)最后,研發工程師劉溢清向與會者介(jie)紹(shao)了(le)(le)濤(tao)思(si)數據總結(jie)出的(de)(de)CI/CD最佳實踐(jian)。

今(jin)天的(de)軟件(jian)產業呈現開(kai)(kai)源(yuan)、全球化和高度協作(zuo)的(de)特征,同一款軟件(jian)可能有(you)很多來自世界各地的(de)開(kai)(kai)發(fa)與貢獻者。從 0.9^5=0.59 這一公式來看(kan),如果開(kai)(kai)發(fa)過(guo)程(cheng)中有(you)5個環節,都只做到90分,那么整個流(liu)(liu)程(cheng)的(de)成績就要下降(jiang)到59分,這是非常顯著的(de)累積效應(ying)(ying)。為了消除不(bu)同開(kai)(kai)發(fa)人(ren)員的(de)個體影響(xiang),軟件(jian)開(kai)(kai)發(fa)流(liu)(liu)程(cheng)應(ying)(ying)該高度信任CI/CD,確保流(liu)(liu)程(cheng)質量不(bu)打(da)折。

在濤思數據,平均(jun)每(mei)天需(xu)要處理8次推送(song)請(qing)求,目(mu)前總(zong)共有858個測試用例,PR總(zong)量達2558。為了解決所有這(zhe)些(xie)測試需(xu)求,濤思數據通(tong)過CI/CD解決了四(si)大問(wen)題:

1. 實時發(fa)現代碼(ma)錯(cuo)誤(wu)并報警,幫助開(kai)發(fa)人員(yuan)快速修正(zheng)錯(cuo)誤(wu);2. 無人工干預,減少人為錯(cuo)誤(wu)的出現幾率;3. 自動生(sheng)成(cheng)代碼(ma)質(zhi)量(liang)報告,幫助開(kai)發(fa)人員(yuan)檢查(cha)動態開(kai)發(fa)質(zhi)量(liang)。靜待代碼(ma)質(zhi)量(liang)則使(shi)用(yong)靜態檢查(cha)工具;4. 自動生(sheng)成(cheng)各模塊(kuai)版本標識。

在濤思數據,開發團(tuan)隊以GitHub為CI/CD的(de)核心平(ping)臺(tai),并使(shi)用(yong)Travis和(he)Appveyor分別負(fu)責Linux和(he)Windows版本的(de)測(ce)試。全量測(ce)試和(he)交付(fu)由Jenkins完(wan)成。COVERALLS主要(yao)保證代碼覆蓋率。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫

團隊現(xian)在每(mei)兩周發(fa)布一(yi)次版本(ben)并(bing)(bing)做更新。開發(fa)流(liu)程主要(yao)分(fen)為兩部分(fen):第(di)一(yi)部分(fen)針對(dui)新特(te)性,新特(te)性合并(bing)(bing)完成后,在第(di)二周周三下午(wu)拉一(yi)個(ge)分(fen)支測試并(bing)(bing)修(xiu)(xiu)復(fu),之后發(fa)布新版本(ben),并(bing)(bing)合并(bing)(bing)到master分(fen)支。當用戶(hu)在M1版本(ben)發(fa)現(xian)問(wen)題時,團隊就要(yao)對(dui)這個(ge)分(fen)支進行(xing)問(wen)題修(xiu)(xiu)復(fu)并(bing)(bing)交付給用戶(hu),同時合并(bing)(bing)到master分(fen)支來保證代碼(ma)的一(yi)致性。

每當提交代碼后,Windows/Linux版本需要分別通(tong)過Appvayor和Travis做(zuo)簡單(dan)的(de)(de)編譯和測試,兩(liang)項通(tong)過以后再由開發人員合(he)并代碼,保證代碼中(zhong)的(de)(de)錯誤可以第一時間(jian)得到修復(fu)。

由(you)于(yu)公司測(ce)試(shi)用例(li)較(jiao)多,因(yin)此引入了Jenkins應對(dui)全量測(ce)試(shi)需求。Jenkins可(ke)以自(zi)由(you)化部署,沒有運行時間和資源限制,大家可(ke)以根據自(zi)己的服(fu)務器來配置。Jenkins跨(kua)平臺(tai)很方便,對(dui)各種OS和指令集平臺(tai)都有很好的支持。它還有豐(feng)富的插件(jian),可(ke)以簡化很多流程。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫

整(zheng)個CI/CD流程(cheng)來看(kan),分為預編譯、編譯工(gong)作、全量(liang)測(ce)(ce)試(shi)和版本發布幾大環節。每(mei)天下(xia)班以后會持續(xu)做全量(liang)測(ce)(ce)試(shi)。COVERALLS檢查代(dai)碼(ma)覆(fu)(fu)蓋率,目(mu)前TDengine的覆(fu)(fu)蓋率是77.43%,還有一些提(ti)升空(kong)間。Valgrind監測(ce)(ce)內存泄露并做代(dai)碼(ma)監測(ce)(ce),Coverity Scan提(ti)供整(zheng)體反(fan)饋。

通過這一套CI/CD體系,濤思數據獲得了(le)明顯的生產(chan)力提升:1. 檢查(cha)代碼(ma)的時間成本下降到了(le)過去的七分(fen)之一。2. case覆蓋率(lv)提升兩(liang)倍。3. 代碼(ma)從提交到發(fa)布(bu)的速度比之前快六倍。

開源與創新的力量:TDengine與社區共贏未來

除了幾位老師的(de)(de)高質量(liang)分享(xiang),本場活(huo)動還特(te)別(bie)設置了兩個頒獎環節。首先是濤思(si)數據(ju)舉辦的(de)(de)Hive MQ插件(jian)開發競賽(sai),大賽(sai)旨(zhi)在獎勵大數據(ju)時代的(de)(de)前(qian)沿探索(suo)者,來自(zi)大連的(de)(de)譚雪峰榮獲(huo)大獎。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫
圖為陶建輝與挑戰賽優勝者譚雪峰

第二個獎項是TDengine的(de)最佳(jia)貢獻獎,頒(ban)發(fa)給(gei)TDengine的(de)兩位社區優秀(xiu)貢獻者,以此感謝開源社區為TDengine的(de)發(fa)展作出的(de)努力和支持。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫
圖為陶建輝與最佳貢獻者代表freemine(GitHub昵稱)

在頒獎環節中陶老(lao)(lao)師介(jie)紹(shao),TDengine的(de)(de)社區貢獻者已有將近50人,做出了很多非凡(fan)的(de)(de)工作(zuo)。作(zuo)為年屆50的(de)(de)老(lao)(lao)一代程序員(yuan),陶老(lao)(lao)師希(xi)望(wang)更多開發者參與開源社區的(de)(de)建設活動,為軟件產業的(de)(de)開放合作(zuo)貢獻自(zi)己的(de)(de)力量,證明自(zi)身的(de)(de)價值。

徹底開源、十倍性能的背后:TDengine 核心技術首度公開 - TDengine Database 時序數據庫

自(zi)2017年成立以(yi)來(lai),通過創新技(ji)術(shu)思想與開(kai)源包(bao)容的(de)理念,濤思數(shu)據(ju)(ju)已經在(zai)物聯網大(da)數(shu)據(ju)(ju)領域打響了自(zi)己的(de)知名(ming)度,獲得(de)了業(ye)內多方的(de)贊(zan)譽和認可。如今,濤思數(shu)據(ju)(ju)得(de)到(dao)了重量級資本的(de)支(zhi)持,正走在(zai)快速擴(kuo)張的(de)發展道(dao)路上。陶(tao)總也代表濤思數(shu)據(ju)(ju)發出號召,希望(wang)更多優秀人才加入濤思數(shu)據(ju)(ju),在(zai)研發、測(ce)試、社區(qu)(qu)運營(ying)、商務(wu)、售前、售后技(ji)術(shu)支(zhi)持等(deng)崗位發光發熱,并攜(xie)手廣(guang)大(da)社區(qu)(qu)貢獻者一起,與濤思數(shu)據(ju)(ju)共(gong)贏精彩未來(lai)。

微信公眾號關注(zhu)“TDengine”,后臺回(hui)復(fu):1107,獲取視頻(pin)和(he)PPT鏈接(jie)。