小 T 導讀:在(zai)(zai)安全解決方案 SuperCloud 中(zhong),億咖(ka)通面臨(lin)著磁盤占用(yong)量大(da)、車輛(liang)最新狀(zhuang)態(tai)實時查(cha)詢難以實現兩(liang)個核心問題。最終,他(ta)們選擇(ze)了(le)讓(rang) TDengine Database 承擔數(shu)(shu)據中(zhong)臺的重要角(jiao)色,負責車輛(liang)實時數(shu)(shu)據的寫(xie)入(ru)、存儲以及(ji)實時查(cha)詢。本文講述(shu)了(le)研發(fa)團隊(dui)在(zai)(zai)前期使(shi)用(yong) Apache HBase 時遇到(dao)的具體難點、為什么沒有堅持選擇(ze) OpenTSDB,以及(ji)選擇(ze) TDengine 的過(guo)程和成效。
企業簡介
億咖通科(ke)技是一(yi)家汽(qi)車智(zhi)(zhi)能化(hua)科(ke)技公司(si),在武(wu)漢(han)、杭州、上海、蘇州、馬(ma)來西亞(ya)吉隆坡(po)、英國(guo)倫(lun)敦(dun)等國(guo)內外多地設立有分(fen)支機構和研(yan)發中心,致力(li)于持續打造行業(ye)領先(xian)的(de)智(zhi)(zhi)能網聯生態開放平(ping)臺,全(quan)面為車企(qi)賦能,創造更智(zhi)(zhi)能、更安全(quan)的(de)出行體驗。
項目介紹
為(wei)實(shi)現高(gao)水準的自(zi)動(dong)(dong)(dong)駕(jia)駛(shi)能力,億咖通(tong)科技(ji)(ji)(ECARX)打造(zao)了一(yi)整套安全解決方(fang)案 SuperCloud,該(gai)方(fang)案旨(zhi)在利用(yong)人工智(zhi)能技(ji)(ji)術以及攝像(xiang)頭(tou)、雷達、聲(sheng)納等多(duo)(duo)種傳感器技(ji)(ji)術來保證駕(jia)乘者的安全。自(zi)動(dong)(dong)(dong)駕(jia)駛(shi)的核心(xin)數據(ju)(ju)(ju)就是設(she)備的影子數據(ju)(ju)(ju)和狀態數據(ju)(ju)(ju),對(dui)設(she)備進行精(jing)(jing)準的數據(ju)(ju)(ju)控制和采集,再結合高(gao)精(jing)(jing)地(di)圖的數據(ju)(ju)(ju),是完成自(zi)動(dong)(dong)(dong)駕(jia)駛(shi)的兩個重(zhong)要環節。值得一(yi)提的是,億咖通(tong)也是目前(qian)國內為(wei)數不多(duo)(duo)的擁有高(gao)精(jing)(jing)地(di)圖資質的企業。
在 SuperCloud 項目當中(zhong),TDengine Database 承擔著數據中(zhong)臺(tai)的重要(yao)角色,負責(ze)車(che)輛實時數據的寫入、存(cun)儲以及(ji)實時查(cha)詢(xun)。
選型經過
在此之前,我們(men)使(shi)用(yong)的(de)(de)存儲(chu)架構是(shi) Kafka + Flink + HBase,但隨著業務的(de)(de)發展,逐漸發現 HBase 的(de)(de) Key-Value 存儲(chu)模(mo)型(xing)并不(bu)適合我們(men)的(de)(de)場(chang)景,究(jiu)其原因,是(shi)因為(wei)落地到數據(ju)庫(ku)的(de)(de)都是(shi)結構化(hua)的(de)(de)數據(ju),Key-Value 存儲(chu)模(mo)型(xing)會(hui)導致磁(ci)盤占用(yong)量特(te)別大,并且性(xing)能上也(ye)無法實現車輛最新狀態的(de)(de)實時查(cha)詢,這(zhe)也(ye)是(shi)亟待解決的(de)(de)兩個核(he)心問(wen)題(ti)。
經(jing)過調研(yan),我們(men)發現時序數據庫才是正確的選(xuan)擇(ze)方向,而且(qie)核(he)心數據也符合(he)時序數據的種(zhong)種(zhong)特點,因此,我們(men)決(jue)定在 InfluxDB、TDengine 和(he) OpenTSDB 之間進行產品選(xuan)型(xing)。
事實上,一開始我們選擇的是 OpenTSDB,因為它基于 HBase,所以我們很方便上手。但成也蕭何敗也蕭何,也正因為要依賴 HBase,OpenTSDB 并沒有解決 HBase 遺留的性能、壓縮率等問題。而 InfluxDB 由于單機性能并不夠卓越,而且集群功能沒有開源,所以也沒有被采納。最終經過各種維度的對比后,我們毅然選擇了國產、開源、支持 SQL 的時序數據庫 TDengine。
TDengine 非常符合我(wo)(wo)(wo)們(men)現在的(de)(de)業務場景,尤其(qi)是(shi)超級(ji)表的(de)(de)概念,甚至可以說是(shi)為我(wo)(wo)(wo)們(men)量身定做的(de)(de)。我(wo)(wo)(wo)們(men)為每輛(liang)車(che)(che)都分配了一(yi)個(ge)子表,用(yong)(yong)以接收(shou) IHU 設備(bei)產生的(de)(de)數據。(注:IHU 是(shi)億咖通投(tou)入研發的(de)(de)第(di)一(yi)代整車(che)(che)計(ji)算平臺產品,于(yu) 2017 年第(di)二(er)季度投(tou)放市場使用(yong)(yong),是(shi)一(yi)款采用(yong)(yong)車(che)(che)載(zai)專用(yong)(yong)處理器、基于(yu)車(che)(che)身總線系統和(he)第(di)三方應(ying)用(yong)(yong)服務打(da)造而(er)成的(de)(de)多媒(mei)體(ti)娛(yu)(yu)樂(le)系統,能(neng)實現包括地(di)圖導航、多媒(mei)體(ti)娛(yu)(yu)樂(le)、車(che)(che)輛(liang)信息等一(yi)系列信息娛(yu)(yu)樂(le)功能(neng)及車(che)(che)聯網服務。)
優化后的(de)(de)新架構(gou)(gou)為:Kafka + Flink + TDengine。Flink 上游的(de)(de)數(shu)據可分為 2 類(lei)(lei),一類(lei)(lei)是(shi)用 json 存(cun)儲(chu)的(de)(de)結構(gou)(gou)化數(shu)據,還有一類(lei)(lei)是(shi)如(ru)(ru)圖(tu)片、視頻一類(lei)(lei)的(de)(de)非結構(gou)(gou)化數(shu)據。上游如(ru)(ru)果(guo)是(shi)結構(gou)(gou)化的(de)(de) json 數(shu)據,則通過(guo)如(ru)(ru)下鏈(lian)路(lu)寫入 TDengine:Kafka—>Flink—>TDengine,如(ru)(ru)果(guo)是(shi)非結構(gou)(gou)化的(de)(de)數(shu)據,則會直接存(cun)儲(chu)到 S3 上,然后把這些視頻圖(tu)片的(de)(de)文件路(lu)徑通過(guo)如(ru)(ru)下鏈(lian)路(lu)寫入 TDengine:S3—->Kafka —-> Flink—>TDengine。
搭建與效果
我們(men)以單副本模式落地了一個三節點的集群,機器配置為 8C + 16G + 500G 機械硬盤,備份用其他方(fang)式完成。當(dang)前環境下有 3 張(zhang)超級表、276571 張(zhang)表。



超級表表結構如下:

由于我(wo)們(men)的(de) json 較大,所以選擇(ze)使(shi)用 protobuf 進(jin)行(xing)壓(ya)縮后再(zai)寫入(ru) TDengine,這(zhe)樣只需要(yao) 1500 字節的(de)長度就(jiu)可(ke)以容納(na)該類 json,取出進(jin)行(xing)反(fan)序列(lie)化后以供(gong)使(shi)用。

當前最大的一張超級表已經存有 300 多億條數據,每行 2362 字節。粗略估算,項目運行至今,總數據量大概有 68T 左右,但實際的磁盤占用量只有 1.4T,以前 20 天就能寫滿 15T 的磁盤,但現在基本已經不再需要考慮磁盤的問題了。資源使用率相比以前節省了近百倍。

此外,困擾(rao)我(wo)們(men)許久的數(shu)據實時(shi)查詢問(wen)題也有望(wang)得(de)到解決,TDengine 的 last 函(han)數(shu)可以實現(xian)毫秒級(ji)(ji)返回設備最(zui)新狀態。由于我(wo)們(men)當前(qian)使用(yong)的版本還(huan)是比較老舊的 2.0.18,這(zhe)(zhe)(zhe)一版還(huan)沒有針(zhen)對 last 函(han)數(shu)的緩存,TDengine 的工作(zuo)人(ren)員表示(shi)后續會有針(zhen)對這(zhe)(zhe)(zhe)個(ge)函(han)數(shu)專門的優化,等日后版本升級(ji)(ji)后再(zai)做體驗。 最(zui)常用(yong)的查詢車(che)輛實時(shi)位置(zhi)的 SQL 是這(zhe)(zhe)(zhe)樣的,全(quan)部都是毫秒級(ji)(ji)別返回結果(guo):

寫在最后
總(zong)體(ti)而言(yan),TDengine Database 的(de)(de)(de)獨特(te)設計(ji)幫助(zhu)我(wo)(wo)(wo)們(men)(men)解決(jue)了(le)傳統架構磁盤(pan)存(cun)儲占用過(guo)高,以及性能(neng)上(shang)(shang)(shang)不能(neng)支(zhi)持車輛狀態實(shi)時查詢(xun)這兩(liang)大痛點(dian),在實(shi)現(xian)降(jiang)本增效方面名副其實(shi)。不止(zhi)如(ru)此,我(wo)(wo)(wo)們(men)(men)后(hou)(hou)續要實(shi)現(xian)的(de)(de)(de)設備統計(ji)需求也在應用 TDengine 之后(hou)(hou)得到了(le)解決(jue)。在 TDengine 的(de)(de)(de)官方社區中,所提出(chu)的(de)(de)(de)問(wen)題也都可以得到支(zhi)持人員的(de)(de)(de)快(kuai)速反饋(kui),事無巨細,這幫我(wo)(wo)(wo)們(men)(men)極大降(jiang)低了(le)項目落地的(de)(de)(de)難(nan)度(du)。 TDengine 的(de)(de)(de)應用,不僅完(wan)全解決(jue)了(le)我(wo)(wo)(wo)們(men)(men)當前業(ye)務上(shang)(shang)(shang)存(cun)在的(de)(de)(de)痛點(dian),也匹(pi)配(pei)上(shang)(shang)(shang)了(le)后(hou)(hou)續業(ye)務發展的(de)(de)(de)需求。隨著業(ye)務的(de)(de)(de)快(kuai)速發展,我(wo)(wo)(wo)們(men)(men)希(xi)望和濤(tao)思數據后(hou)(hou)續可以在更多維度(du)上(shang)(shang)(shang)通力合作,共同(tong)打(da)造(zao)自動(dong)駕駛(shi)的(de)(de)(de)行業(ye)技術典范。


























