作者 | 焦海(hai)波,星諾信息研發總(zong)監
小 T 導讀:江蘇(su)星諾信(xin)息(xi)(xi)是一(yi)家(jia)基(ji)于(yu)智(zhi)(zhi)能(neng)(neng)(neng)車(che)載定(ding)位(wei)終端提供車(che)輛定(ding)位(wei)、車(che)隊(dui)(dui)(dui)管(guan)(guan)理服(fu)(fu)務的(de)物(wu)聯網科技(ji)公司,在行(xing)業(ye)(ye)中有著(zhu)十(shi)多年的(de)服(fu)(fu)務和運營(ying)(ying)經(jing)驗(yan),軟硬件開發經(jing)驗(yan)豐富。好管(guan)(guan)車(che),是星諾信(xin)息(xi)(xi)最新(xin)研發的(de)一(yi)套基(ji)于(yu)大數據(ju)人工智(zhi)(zhi)能(neng)(neng)(neng) + 云服(fu)(fu)務的(de)車(che)隊(dui)(dui)(dui)管(guan)(guan)理SaaS工具。好管(guan)(guan)車(che)致力(li)于(yu)打造(zao)一(yi)個智(zhi)(zhi)能(neng)(neng)(neng)化管(guan)(guan)車(che)工具,基(ji)于(yu)獨有的(de)精準硬件設備(bei)+智(zhi)(zhi)能(neng)(neng)(neng)大數據(ju)算法平臺,提供給政企車(che)隊(dui)(dui)(dui)及物(wu)流企業(ye)(ye)客戶一(yi)套綜合(he)管(guan)(guan)理與服(fu)(fu)務解(jie)決方案,覆蓋車(che)輛精準里(li)程、定(ding)位(wei)回放、能(neng)(neng)(neng)耗管(guan)(guan)理、行(xing)程合(he)并、賬(zhang)單結(jie)算、安(an)全(quan)監控、智(zhi)(zhi)能(neng)(neng)(neng)裝備(bei)和統計分析等車(che)隊(dui)(dui)(dui)運營(ying)(ying)全(quan)流程,賦(fu)能(neng)(neng)(neng)車(che)隊(dui)(dui)(dui)及物(wu)流企業(ye)(ye)、提升行(xing)業(ye)(ye)整(zheng)體效率。
選擇TDengine Database的幾個考慮
2018年(nian)12月份(fen)在InfoQ舉辦(ban)的(de)(de)(de)全球架(jia)構師(shi)峰會上(shang)有幸結識了TDengine的(de)(de)(de)創始(shi)人陶建(jian)輝先(xian)生,當時(shi)陶建(jian)輝先(xian)生演(yan)講的(de)(de)(de)主題是(shi)《快速搭建(jian)一(yi)超(chao)高性能的(de)(de)(de)時(shi)序空間大(da)數據處理平臺》,作為(wei)正(zheng)處于(yu)初期研發階段(duan)的(de)(de)(de)好(hao)管(guan)車(che)系統來(lai)說,TDengine Database里(li)很多先(xian)進(jin)的(de)(de)(de)概念和(he)(he)(he)(he)設計思路都(dou)非常符合一(yi)個(ge)(ge)車(che)聯(lian)網項(xiang)目(mu)(mu)的(de)(de)(de)需求,不論是(shi)從業務(wu)場景(jing)還是(shi)從車(che)聯(lian)網相(xiang)關數據特點(dian)出發,當時(shi)就感覺(jue)和(he)(he)(he)(he)我們的(de)(de)(de)好(hao)管(guan)車(che)項(xiang)目(mu)(mu)非常的(de)(de)(de)契合,并且還有一(yi)個(ge)(ge)很重(zhong)要(yao)的(de)(de)(de)原因,在新項(xiang)目(mu)(mu)研發初期TDengine對(dui)于(yu)系統開發成本和(he)(he)(he)(he)運維成本都(dou)能做到一(yi)部分的(de)(de)(de)降(jiang)低,畢竟對(dui)于(yu)一(yi)個(ge)(ge)初創項(xiang)目(mu)(mu)來(lai)說,驗證和(he)(he)(he)(he)實驗產品是(shi)最主要(yao)的(de)(de)(de)目(mu)(mu)標,能快則快,在數據庫和(he)(he)(he)(he)未來(lai)后期的(de)(de)(de)大(da)數據處理平臺這塊(kuai)能有一(yi)個(ge)(ge)比較堅實的(de)(de)(de)基礎(chu)肯(ken)定是(shi)最好(hao)的(de)(de)(de)選擇。
之(zhi)后(hou)便開(kai)始(shi)與(yu)濤思(si)數(shu)據深(shen)入溝通合作,在1個月內開(kai)始(shi)了私有部署版本測試(shi),經過初期本地部署版本的(de)調試(shi)和對(dui)接之(zhi)后(hou),在2019年3月初我們開(kai)始(shi)了云服務版本的(de)打通與(yu)測試(shi)。
摒棄繁雜,擁抱致簡
在(zai)(zai)這個(ge)階段我們當然也(ye)嘗試(shi)過其他類型的(de)(de)數據庫解決方案,因為研發(fa)團隊精力人力有(you)限我們幾(ji)乎沒有(you)去考慮自己搭建(jian)一(yi)(yi)套大數據處理平臺,畢竟要充分整(zheng)合Kafka、HBase、Hadoop、Spark這一(yi)(yi)系列開(kai)源框(kuang)架(jia)不僅(jin)意味(wei)要花費(fei)大量(liang)人力,還需要更(geng)多(duo)(duo)的(de)(de)時間去調試(shi)開(kai)源框(kuang)架(jia)本身的(de)(de)問題,融(rong)合及聯調不同框(kuang)架(jia),還存在(zai)(zai)著很多(duo)(duo)數據一(yi)(yi)致性(xing)的(de)(de)問題,同時也(ye)意味(wei)著后期運(yun)維(wei)成本的(de)(de)大幅度增加(jia),穩定性(xing)也(ye)是(shi)個(ge)不小的(de)(de)未(wei)知數。
之后(hou)我們也(ye)嘗試了云(yun)(yun)(yun)服務(wu),比(bi)如阿里云(yun)(yun)(yun)的(de)(de)(de)(de)(de)幾個(ge)(ge)解決(jue)方(fang)案(an),表格存(cun)儲、時(shi)序時(shi)空數(shu)據庫TSDB版(ban)和InfluxDB版(ban),但因為當(dang)時(shi)本身阿里云(yun)(yun)(yun)所提(ti)供的(de)(de)(de)(de)(de)時(shi)序數(shu)據庫方(fang)面的(de)(de)(de)(de)(de)服務(wu)也(ye)是(shi)(shi)一個(ge)(ge)初期(qi)版(ban)本和方(fang)案(an),在(zai)很多方(fang)面其實(shi)還不是(shi)(shi)很成熟,甚至(zhi)很多服務(wu)都(dou)是(shi)(shi)處(chu)于(yu)一個(ge)(ge)內測和公(gong)測的(de)(de)(de)(de)(de)階段(duan),加上(shang)在(zai)接入和實(shi)際使用上(shang)的(de)(de)(de)(de)(de)一些問題,比(bi)如沒有剛開(kai)始沒有類SQL的(de)(de)(de)(de)(de)操作及查詢語言,數(shu)據聚合(he)函數(shu)方(fang)面的(de)(de)(de)(de)(de)欠缺,最終都(dou)不是(shi)(shi)最合(he)適的(de)(de)(de)(de)(de)選(xuan)擇。還有一點,類似的(de)(de)(de)(de)(de)云(yun)(yun)(yun)服務(wu)器在(zai)整體產品不是(shi)(shi)那么成熟的(de)(de)(de)(de)(de)情(qing)況下,云(yun)(yun)(yun)服務(wu)廠商能提(ti)供的(de)(de)(de)(de)(de)實(shi)際相關支(zhi)持(chi)也(ye)不那么方(fang)便,畢竟(jing)通過工單打(da)字溝通交流還是(shi)(shi)存(cun)在(zai)一定(ding)障礙(ai)的(de)(de)(de)(de)(de)。
最終我們還是堅持了一開始的選擇,選擇了TDengine的云服務版本,利用阿里(li)云的(de)高速通道服務(wu),打(da)通了(le)TDengine和我(wo)們阿里(li)云ECS的(de)連接,利用其(qi)高速、高效的(de)存儲和便捷的(de)查詢支持接入好管車平臺。
場景契合,數據增值
在(zai)對TDengine進行一定的(de)(de)研究后,我們意識到TDengine是(shi)一個專門面對時序結構化數(shu)據(ju)(ju)(ju)存儲(chu)分析的(de)(de)大數(shu)據(ju)(ju)(ju)處理軟件。對于(yu)車聯(lian)網的(de)(de)數(shu)據(ju)(ju)(ju),絕大部分是(shi)TBox定位終端上報的(de)(de)數(shu)據(ju)(ju)(ju)。這些數(shu)據(ju)(ju)(ju)包括GPS坐標、油耗、里程數(shu)、加速(su)度(du)、起停(ting)信息等,是(shi)完全(quan)結構化的(de)(de)時序數(shu)據(ju)(ju)(ju)流(liu),非常適合寫入(ru)TDengine。星諾好管車的(de)(de)系(xi)統搭建思路如(ru)下:

星諾(nuo)好管車(che)SaaS服務(wu)(wu)平(ping)臺基于(yu)終端上(shang)報(bao)(bao)(bao)的車(che)輛運行(xing)(xing)狀(zhuang)(zhuang)態(tai)(tai)數據(ju)(ju),進(jin)行(xing)(xing)一系列實(shi)(shi)時及離線數據(ju)(ju)分析(xi)(xi),針(zhen)對每(mei)個TBox上(shang)報(bao)(bao)(bao)的數據(ju)(ju),經過負載均(jun)衡平(ping)均(jun)分配到后(hou)(hou)端實(shi)(shi)時解析(xi)(xi)服務(wu)(wu)器,數據(ju)(ju)經過初步解析(xi)(xi)后(hou)(hou)直接通過TDengine提(ti)供的接口寫入數據(ju)(ju)庫,TDengine中我(wo)們建立了(le)一個超級表(biao)(biao)來存(cun)(cun)儲基礎GPS數據(ju)(ju),并為每(mei)輛車(che)建立一個子(zi)表(biao)(biao),gpsinfo的tag用(yong)來存(cun)(cun)放車(che)輛子(zi)表(biao)(biao)的靜態(tai)(tai)信(xin)(xin)息,比如(ru)(ru)車(che)輛編號、車(che)牌(pai)號、所(suo)屬(shu)用(yong)戶(hu)、所(suo)屬(shu)分組,這些(xie)不常變更的信(xin)(xin)息,子(zi)表(biao)(biao)則用(yong)于(yu)存(cun)(cun)放車(che)輛的即時狀(zhuang)(zhuang)態(tai)(tai)信(xin)(xin)息,包括行(xing)(xing)駛和停駛信(xin)(xin)息,例如(ru)(ru)速度(du)、方向、經緯度(du)、報(bao)(bao)(bao)警狀(zhuang)(zhuang)態(tai)(tai)碼、信(xin)(xin)號強度(du)等十幾種。
關(guan)于(yu)數(shu)據的(de)(de)實時分(fen)析(xi)(xi),除了(le)(le)針(zhen)對(dui)(dui)上報(bao)數(shu)據的(de)(de)即時分(fen)析(xi)(xi),另外對(dui)(dui)于(yu)車輛(liang)異常狀態(tai)的(de)(de)報(bao)警數(shu)據,考慮到(dao)核心解(jie)析(xi)(xi)應(ying)用(yong)的(de)(de)穩定性,我(wo)們利用(yong)了(le)(le)TDengine的(de)(de)消息,將數(shu)據庫(ku)收到(dao)并插入的(de)(de)新記錄以消息隊列的(de)(de)形式(shi)發(fa)出通知(zhi),由后(hou)端的(de)(de)幾臺報(bao)警信息解(jie)析(xi)(xi)服務(wu)(wu)器(qi)專門負(fu)責訂閱接(jie)收通知(zhi)進(jin)(jin)行(xing)進(jin)(jin)一步的(de)(de)業務(wu)(wu)報(bao)警分(fen)析(xi)(xi)處(chu)理。針(zhen)對(dui)(dui)后(hou)期的(de)(de)歷(li)史數(shu)據分(fen)析(xi)(xi),則定期執行(xing)計劃任務(wu)(wu),按時間或車輛(liang)行(xing)程規律進(jin)(jin)行(xing)日常的(de)(de)數(shu)據統計分(fen)析(xi)(xi)。
使用體驗
TDengine Database使(shi)用標(biao)準的(de),與MySQL相似。在項目上(shang)手成本幾乎為(wei)零。針對(dui)其特點,我們對(dui)每個數據(ju)(ju)采集點單獨建表,通過超級表維護公(gong)共數據(ju)(ju)字段,及其提供的(de)聚合選擇等(deng)多種(zhong)查(cha)詢函數,使(shi)得在多維度數據(ju)(ju)整合查(cha)詢方面非常便利。根據(ju)(ju)TDengine和(he)我公(gong)司(si)業務,主要實現車輛信(xin)息的(de)采集處理。
1、創(chuang)建車(che)(che)輛(liang)(liang)(liang)信息(xi)(xi)超級(ji)(ji)表 gpsinfo, 通過超級(ji)(ji)表提取車(che)(che)輛(liang)(liang)(liang)信息(xi)(xi)公共字段[gps_time 、lngitude 。。] ,及車(che)(che)輛(liang)(liang)(liang)對應標簽(qian),車(che)(che)輛(liang)(liang)(liang)編號 vid 等信息(xi)(xi),區分子表信息(xi)(xi)
--- 車輛信息表
create table gpsinfo (
gps_time TIMESTAMP,
lngitude DOUBLE,
latitude DOUBLE,
altitude INT,
...
)
tags
(
vid BINARY(9),
pno_64 BINARY(40)
);
-- 根據其對表的數量沒有限制,對所有車輛進行單獨建表
create table db_gps_info.vid(..) tags(...)
2、業務(wu)使用,通過超級(ji)表(biao)的查詢(xun)來,聚合數據(ju)實現(xian)相應(ying)業務(wu)。
// 查詢一段時間內, 終端狀態信息
select first(gps_time) from gpsinfo
where tbname in (vid) and gps_time >= "xxxx-xx-xx xx:xx:xx" and gps_time <= "xxxx-xx-xx xx:xx:xx"
group by vid
遇到的問題及解決方案
補發數據的亂序寫入
在實際場景中(zhong),由(you)(you)于TBox使(shi)用(yong)(yong)4G網絡發送(song)采集(ji)的(de)(de)數(shu)據(ju)(ju),經常(chang)出現車(che)輛進入(ru)信號差的(de)(de)區域(yu),TBox沒有信號而無(wu)法(fa)實時(shi)(shi)上報數(shu)據(ju)(ju),只(zhi)能先(xian)緩(huan)存(cun)在終端本地(di)緩(huan)存(cun)中(zhong)。等到網絡信號恢(hui)復后(hou),TBox終端會先(xian)上報最新狀態,然(ran)后(hou)補(bu)(bu)發緩(huan)存(cun)的(de)(de)數(shu)據(ju)(ju)。最開始我(wo)們發現補(bu)(bu)發的(de)(de)歷(li)史(shi)數(shu)據(ju)(ju)很多無(wu)法(fa)直接insert到TDengine,這(zhe)(zhe)是(shi)由(you)(you)于補(bu)(bu)發的(de)(de)數(shu)據(ju)(ju)時(shi)(shi)間戳往往已經不(bu)是(shi)表中(zhong)最大的(de)(de)時(shi)(shi)間戳,此時(shi)(shi)TDengine不(bu)允許insert這(zhe)(zhe)些(xie)記錄。改(gai)用(yong)(yong)import后(hou),解決了(le)補(bu)(bu)發歷(li)史(shi)數(shu)據(ju)(ju)的(de)(de)寫入(ru)問題。
未來的展望
未(wei)來針對數(shu)據庫中存儲的(de)數(shu)據我們(men)將更多(duo)的(de)嘗試(shi)利用TDengine Database的(de)實(shi)時流(liu)(liu)式(shi)計(ji)(ji)算特性(xing),針對單輛車或同一客戶下的(de)多(duo)輛車的(de)數(shu)據流(liu)(liu)進行(xing)實(shi)時聚合、統(tong)計(ji)(ji)等計(ji)(ji)算,并將計(ji)(ji)算出的(de)衍(yan)生數(shu)據作為新的(de)分(fen)析結果保存進TDengine,以便后期進一步(bu)的(de)操(cao)作、統(tong)計(ji)(ji)和(he)展示。


























