六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

TDengine 助力智慧燃?xì)?,支撐?shù)百萬智能終端的接入管理

哈工歐圣達(dá) 陳全來

2022-03-07 /

小 T 導(dǎo)讀:在歐圣達(dá)的物聯(lián)網(wǎng)智能設(shè)備平臺(tái)項(xiàng)目中,需支持?jǐn)?shù)百萬以上物聯(lián)網(wǎng)表具和智能終端的接入管理,支持分布式部署且具備良好擴(kuò)展性。在規(guī)則引擎場景下,TDengine Database 提供了很好的查詢和存儲(chǔ)性能,成為本項(xiàng)目實(shí)現(xiàn)實(shí)時(shí)告警和監(jiān)控服務(wù)的重要一環(huán)。本篇文章分享了歐圣達(dá)在數(shù)據(jù)庫調(diào)研和搭建階段的思考和經(jīng)驗(yàn),供參考。

公司簡介

哈工歐圣達(dá)是深圳市歐圣達(dá)科技有限公司和哈工大機(jī)器人集團(tuán)的合資公司,總公司深圳市歐圣達(dá)科技有限公司成立于 2010 年 5 月,總部位于深圳,下設(shè)合肥研發(fā)中心、華東分公司(合肥)和西南分公司(成都)。公司始終致力于燃?xì)狻⒐岬裙彩聵I(yè)領(lǐng)域的智慧化解決方案研發(fā)和應(yīng)用推廣,擁有超過 10 余項(xiàng)自主知識(shí)產(chǎn)權(quán)的、基于 5G/NB-IoT 和大數(shù)據(jù)的“一體化平臺(tái)+智能安全終端”智慧燃?xì)饨鉀Q方案,作為核心成員參與制定并發(fā)布 2019、2020 年 5G 智慧燃?xì)庑袠I(yè)標(biāo)準(zhǔn)。

scene

某燃?xì)夤緮M建設(shè)一套物聯(lián)網(wǎng)智能設(shè)備平臺(tái)來滿足各類物聯(lián)網(wǎng)設(shè)備接入以及數(shù)據(jù)的采集、存儲(chǔ)、分析、展示等各類需求,項(xiàng)目需包括數(shù)據(jù)采集模塊、數(shù)據(jù)分析模塊、監(jiān)控告警模塊、預(yù)付費(fèi)實(shí)時(shí)結(jié)算模塊、API 接口模塊、大屏\地圖顯示模塊、后臺(tái)管理模塊、手機(jī) App 功能模塊。

該平臺(tái)的搭建目的是為了取代各燃?xì)獗韽S原有的數(shù)據(jù)接收服務(wù)器,實(shí)現(xiàn)對(duì)各表廠物聯(lián)網(wǎng)表具(含 FSK、GFSK、LoRa、GPRS、4G、5G、NB-IoT 等技術(shù)標(biāo)準(zhǔn))讀數(shù)、壓力、溫度、監(jiān)控報(bào)警、氣價(jià)調(diào)整、系統(tǒng)參數(shù)設(shè)置等遠(yuǎn)傳控制和管理。系統(tǒng)需支持?jǐn)?shù)百萬以上物聯(lián)網(wǎng)表具和智能終端的接入管理, 1 秒內(nèi)瞬時(shí)并發(fā)連接數(shù)不低于 5 萬,系統(tǒng)支持分布式部署,且具備良好的擴(kuò)展性,能夠根據(jù)業(yè)務(wù)需要,靈活的擴(kuò)展系統(tǒng)性能和接入能力。

一、選型調(diào)研

以上是典型的時(shí)序物聯(lián)網(wǎng)場景,因此我們調(diào)研了國外的主流時(shí)序數(shù)據(jù)庫 InfluxDB,但考慮到國家基礎(chǔ)設(shè)施建設(shè)安全,我們最終把目光投向了國產(chǎn)開源數(shù)據(jù)庫 TDengine。我們結(jié)合業(yè)務(wù)數(shù)據(jù)量對(duì) TDengine 進(jìn)行了數(shù)百萬設(shè)備的壓測,滿足本項(xiàng)目的數(shù)據(jù)存儲(chǔ)和性能要求。具體測試結(jié)果如下:

測試結(jié)果

從測試結(jié)果來看,TDengine 的整體硬件消耗資源比較低,且能滿足數(shù)百萬設(shè)備的并發(fā)寫入。此外相比 MongoDB,其壓縮率可以提升至 1/10 – 1/20,也為我們節(jié)約了大量存儲(chǔ)成本。最有吸引力的一點(diǎn)是 TDengine 具有完善的開源社區(qū)生態(tài),不僅支持集群版部署,更有完善的中國服務(wù)團(tuán)隊(duì)及多元化的服務(wù)模式,可以做到實(shí)時(shí)響應(yīng)。

二、業(yè)務(wù)架構(gòu)部署

在具體搭建上,我們將不同廠家、不同型號(hào)設(shè)備定義為產(chǎn)品,不同產(chǎn)品的通信機(jī)制、上報(bào)數(shù)據(jù)項(xiàng)、指令內(nèi)容、上報(bào)頻次都是不同的,我們使用 TDengine 對(duì)不同產(chǎn)品創(chuàng)建對(duì)應(yīng)的超級(jí)表,使用設(shè)備 ID 創(chuàng)建子表。

  • 技術(shù)架構(gòu)圖如下圖所示:
技術(shù)架構(gòu)圖 TDengine Database

具體路徑上,傳感器數(shù)據(jù)經(jīng)過 MQ 緩存、結(jié)構(gòu)化解析后進(jìn)入到 TDengine,供后續(xù)業(yè)務(wù)進(jìn)行查詢使用。規(guī)則引擎根據(jù)已有的規(guī)則參數(shù),進(jìn)行傳感器數(shù)據(jù)訂閱,實(shí)時(shí)判斷傳感器是否觸發(fā)了報(bào)警規(guī)則,從而實(shí)現(xiàn)項(xiàng)目的實(shí)時(shí)監(jiān)控和報(bào)警需求。同時(shí),規(guī)則引擎還會(huì)根據(jù)傳感器數(shù)據(jù),觸發(fā)對(duì)應(yīng)的指令操作(如恢復(fù)服務(wù)、暫停服務(wù)指令),通過 MQ 異步傳達(dá)給傳感器。TDengine 在規(guī)則引擎場景下,提供了很好的查詢性能,是實(shí)現(xiàn)實(shí)時(shí)告警和監(jiān)控服務(wù)的重要一環(huán)。

  • 建模思路

在本項(xiàng)目中,每種設(shè)備的協(xié)議及上報(bào)數(shù)據(jù)參數(shù)都是不同的,我們將公共屬性(如所屬公司、所屬分公司、所屬廠家、是否預(yù)付費(fèi)等)作為超級(jí)表 tags,將共有參數(shù)(如閥門狀態(tài)、最新讀數(shù)、抄表時(shí)間、溫度、壓力、電量、信號(hào)強(qiáng)度等)作為普通列,通信時(shí)間戳+時(shí)間漂移作為 TDengine 主鍵,其他非共有參數(shù)(如一些設(shè)備會(huì)上報(bào)瞬時(shí)工況流量、一些會(huì)上報(bào)抄表模塊電池電量等)作為子表字段。以本項(xiàng)目的其中一張表作為示例,結(jié)構(gòu)如下:

show create stable device_meter_record\G;
create table device_meter_record (receive_time TIMESTAMP,meter_readnum DOUBLE,meter_balance INT,meter_volume DOUBLE,meter_time TIMESTAMP,meter_temperature DOUBLE,meter_pressure DOUBLE,meter_instantflow DOUBLE,cust_num BINARY(50),cust_name BINARY(255),company_id BINARY(32),subcompany_id BINARY(32),readingteam_id BINARY(32),subreadingteam_id BINARY(32),area_id BINARY(32),community_id BINARY(32),building_id BINARY(32),user_type BINARY(20),is_holiday BOOL,supplier_id BINARY(32),supplier_device_code BINARY(20),platform_balance INT,platform_last_reading DOUBLE,platform_last_balance INT,platform_price BINARY(15)) TAGS (device_id BINARY(32),device_no BINARY(32),sno BINARY(32),model_id BINARY(32),type_id BINARY(100))

  • 效果展示

最終我們采用了 3 節(jié)點(diǎn) 8 核 16 G 滿足整體業(yè)務(wù)需求,系統(tǒng)可以根據(jù)時(shí)間段范圍、針對(duì)單個(gè)設(shè)備進(jìn)行數(shù)據(jù)上報(bào)的查詢功能,且支持按照小時(shí)用量、日用量、月用量、年用量四個(gè)維度進(jìn)行統(tǒng)計(jì)分析。目前單個(gè)超級(jí)表的壓縮率為 2.5%。

2.5%的壓縮率 TDengine Database
用量統(tǒng)計(jì)圖 TDengine Database
數(shù)據(jù)上限 TDengine Database

三、經(jīng)驗(yàn)分享與未來規(guī)劃

在我們使用 TDengine 的過程中,也遇到了一些小問題,在本文中總結(jié)出了一些經(jīng)驗(yàn),分享如下:

  • 查詢結(jié)果字段名的特殊寫法

TDengine 的此前版本的設(shè)計(jì)當(dāng)中,在查詢返回的字段名時(shí)使用的是特殊寫法:例如SELECT last_row(ts) FROM stb GROUP BY tbname,這樣的設(shè)計(jì)會(huì)導(dǎo)致 MyBatis 等 ORM 框架在映射時(shí)無法直接對(duì)上。這種情況下只需要將 keepColumnName 設(shè)置為 1,就可以避免。

  • 及時(shí)更新版本

在前期使用過程中,我們?cè)?jīng)遇到過 DROP TABLE 就崩潰的 BUG。和官方溝通后發(fā)現(xiàn),已經(jīng)在很早的版本上修復(fù)了,建議各位遇到 TDengine 的新版本也及時(shí)更新。

  • USING 語法

在使用 INSERT INTO table USING stable TAGS() 的語法時(shí),一直以為這里會(huì)對(duì) tag 進(jìn)行重新賦值。到了使用的時(shí)候才發(fā)現(xiàn),原來 table 已經(jīng)存在的情況下,是不會(huì)對(duì) tag 發(fā)生修改的。細(xì)思一下絕對(duì)的也是合理的,因?yàn)楫吘苟嘁淮涡薷木蜁?huì)多一次性能消耗,如果跟著 insert 來修改,就會(huì)多了 1 : 1 的修改操作。

  • 調(diào)整分片策略

在前期寫入過程中,發(fā)現(xiàn) CPU 占用只能到 1 核,CPU 資源上不去。和官方溝通后發(fā)現(xiàn),原來默認(rèn)的分片策略,在小規(guī)模設(shè)備上只會(huì)創(chuàng)建幾個(gè) Vnode,因此并不能很好地把全部核數(shù)利用起來。官方告知可以通過這兩個(gè)參數(shù)來調(diào)整分片策略: tableIncStepPerVnode 50minTablesPerVnode 50 前者決定的是何時(shí)采用下一個(gè) Vnode 來存放新的 table,后者決定的是何時(shí)創(chuàng)建下一個(gè) Vnode 來存放新的 table。

  • 寫入內(nèi)存 blocks 很重要

在寫入過程中,官方的巡檢發(fā)現(xiàn)數(shù)據(jù)寫入的“碎片化”很嚴(yán)重。經(jīng)過排查發(fā)現(xiàn),分配給寫入過程的內(nèi)存太?。╞lock 默認(rèn) 6,意味著 1 個(gè) Vnode 只有 96 MB 用于寫入)。由于 TDengine 在寫入原理上是依賴于內(nèi)存來做局部排序的,因此內(nèi)存小了就會(huì)頻頻觸發(fā)落盤,從而導(dǎo)致數(shù)據(jù)的落盤區(qū)塊的平均條數(shù)很小,需要頻繁 IO 來讀取數(shù)據(jù)。基于此,各位盡量設(shè)置較大的 block 來避免這個(gè)問題。

  • 未來規(guī)劃

物聯(lián)網(wǎng)、車聯(lián)網(wǎng)等涉及時(shí)序數(shù)據(jù)存儲(chǔ)、分析的場景,使用 TDengine Database 可以大大降低系統(tǒng)架構(gòu)復(fù)雜度,在提升性能和開發(fā)效率的同時(shí)還能夠降低學(xué)習(xí)和運(yùn)維成本。之后我們也會(huì)結(jié)合業(yè)務(wù)需求在項(xiàng)目中充分發(fā)揮 TDengine 的優(yōu)勢,利用其來長期存儲(chǔ)設(shè)備上報(bào)的有效讀數(shù)數(shù)據(jù),以及進(jìn)行計(jì)費(fèi)、抄表、用量統(tǒng)計(jì)分析。