您好,登錄后才能下訂單哦!
本篇文章為大家展示了以Serverless為核心的云端能力如何打造分布式大氣監(jiān)測(cè)系統(tǒng),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
下面將對(duì)數(shù)據(jù)上云后的相關(guān)流程,進(jìn)行說(shuō)明。
由于項(xiàng)目平臺(tái)持續(xù)建設(shè)中,當(dāng)前已開源信息為二期版本,所以本篇內(nèi)容均基于此版本能力進(jìn)行說(shuō)明。此版本架構(gòu)進(jìn)一步優(yōu)化了數(shù)據(jù)鑒權(quán)及數(shù)據(jù)庫(kù)保護(hù)。
分為兩個(gè)部分:
架構(gòu)組成:技術(shù)角度,拆解設(shè)計(jì)邏輯
模塊實(shí)現(xiàn):功能角度,講解實(shí)現(xiàn)邏輯
【注1】二期版本首頁(yè)效果
【注2】在建三期版本首頁(yè)效果
【注3】在建三期版本中,加入了 日志服務(wù) 、對(duì)象存儲(chǔ)、小程序功能。提供靈活的日志存儲(chǔ)與高速檢索能力、 低成本的數(shù)據(jù)庫(kù)備份+恢復(fù)+遷移同步能力、移動(dòng)端交互及其它能力。
注:淺藍(lán)色標(biāo)明的是相對(duì)一期的架構(gòu)變更重點(diǎn)。
終端:部署在監(jiān)測(cè)點(diǎn)的設(shè)備。相關(guān)設(shè)計(jì)在本系列前文中已說(shuō)明。
云端:部署在云上的平臺(tái)。相關(guān)設(shè)計(jì)將在本文說(shuō)明。
以平臺(tái)設(shè)計(jì)的基本組成部分,進(jìn)行的邏輯拆分。并依架構(gòu)層的設(shè)計(jì)需求,配套選型的具體產(chǎn)品。
具體功能與選型說(shuō)明:
監(jiān)測(cè)節(jié)點(diǎn):由軟硬兩部分組成?;隍v訊物聯(lián)網(wǎng)終端操作系統(tǒng) TencentOS tiny開發(fā)固件,將 兼容騰訊云的硬件設(shè)備 與 騰訊云IoT explorer進(jìn)行了協(xié)議級(jí)的對(duì)接。
本地網(wǎng)關(guān):此部分以通信協(xié)議轉(zhuǎn)換為主,不解析具體數(shù)據(jù),僅需按前文指引配置即可。
物聯(lián)網(wǎng)接入層:基于騰訊云IoT explorer產(chǎn)品,提供了解密、接入、轉(zhuǎn)發(fā)的相關(guān)功能。在獲取數(shù)據(jù)后,進(jìn)行了基于http協(xié)議的轉(zhuǎn)推動(dòng)作,傳遞給下游 API 網(wǎng)關(guān)。
中間件層:基于API 網(wǎng)關(guān)提供了銜接及負(fù)載均衡等能力,基于鑒權(quán)、流控等能力,銜接云函數(shù),提供可靠的數(shù)據(jù)輸入輸出服務(wù)。
邏輯層:基于云函數(shù),實(shí)現(xiàn)了接收數(shù)據(jù)入庫(kù)(數(shù)據(jù)固化)、定時(shí)統(tǒng)計(jì)匯總(數(shù)據(jù)分析)、輸出應(yīng)用數(shù)據(jù)(數(shù)據(jù)輸出,支撐展示)的能力。
存儲(chǔ)層:基于云數(shù)據(jù)庫(kù) TencentDB for MySQL,進(jìn)行監(jiān)測(cè)數(shù)據(jù)、匯總數(shù)據(jù)、平臺(tái)配置的存儲(chǔ)。
展示層:基于騰訊云圖,提供了地圖展示、數(shù)據(jù)展示、折線圖展示等能力。并配置提供聯(lián)動(dòng)處理,提高了響應(yīng)速度,減少了資源文件的重復(fù)傳輸。
整體系統(tǒng),以數(shù)據(jù)為核心,進(jìn)行了相關(guān)設(shè)計(jì),所以本部分有兩個(gè)組成部分:
數(shù)據(jù)結(jié)構(gòu):講解各環(huán)節(jié)的核心數(shù)據(jù)結(jié)構(gòu)與關(guān)聯(lián)模式。
模塊說(shuō)明:講解各功能模塊的實(shí)現(xiàn)與對(duì)應(yīng)源碼。
以API網(wǎng)關(guān)推送進(jìn)來(lái),由云函數(shù)在環(huán)境變量 event 中提取到的原始數(shù)據(jù)。
其中主要的部分:
非'body' 部分,為api網(wǎng)關(guān)相關(guān)信息
'body' = IoT explorer 原始數(shù)據(jù)
'body' = 終端節(jié)點(diǎn)上報(bào)的原始數(shù)據(jù),經(jīng)base64編碼
{ "body": "{\"payload\":\"eyJtZXRob2QiOiJyZXBvcnQiLCJjbGllbnRUb2tlbiI6IjIwMjAtMDgtMThUMTE6MTc6NDkuNDAzWiIsInBhcmFtcyI6eyJQTTFfQ0YxIjo1LCJQTTJkNV9DRjEiOjYsIlBNMTBfQ0YxIjo3LCJQTTEiOjUsIlBNMmQ1Ijo2LCJQTTEwIjo3LCJwYXJ0aWNsZXNfMGQzIjo3OTIsInBhcnRpY2xlc18wZDUiOjI1NCwicGFydGljbGVzXzEiOjE1LCJwYXJ0aWNsZXNfMmQ1IjozLCJwYXJ0aWNsZXNfNSI6MywicGFydGljbGVzXzEwIjowLCJ2ZXJzaW9uIjoxNTEsIkVycm9yIjowfX0=\", \"seq\":18639, \"timestamp\":1597749469,\"topic\":\"$thing/up/property/?????/?????\", \"devicename\":\"?????\", \"productid\":\"?????\"}", "headerParameters": {}, "headers": { "accept-encoding": "gzip", "content-length": "511", "content-type": "application/json", "endpoint-timeout": "15", "host": "service-???-???.gz.apigw.tencentcs.com", "user-agent": "Go-http-client/1.1", "x-anonymous-consumer": "true", "x-api-requestid": "???03a993936ae191f44651???", "x-b3-traceid": "???03a993936ae191f44651???", "x-qualifier": "$LATEST" }, "httpMethod": "POST", "path": "/??????", "pathParameters": {}, "queryString": {}, "queryStringParameters": {}, "requestContext": { "httpMethod": "POST", "identity": {}, "path": "/??????", "serviceId": "service-?????", "sourceIp": "?.?.?.?", "stage": "release" } }
'body' 解base64編碼后:
{ "clientToken": "2020-08-18T11:17:49.403Z", "method": "report", "params": { "Error": 0, "PM1": 5, "PM10": 7, "PM10_CF1": 7, "PM1_CF1": 5, "PM2d5": 6, "PM2d5_CF1": 6, "particles_0d3": 792, "particles_0d5": 254, "particles_1": 15, "particles_10": 0, "particles_2d5": 3, "particles_5": 3, "version": 151 } }
數(shù)據(jù)庫(kù)詳細(xì)格式,請(qǐng)參考 github-sql
各表用途:
config:系統(tǒng)配置表
space:地點(diǎn)表。記錄節(jié)點(diǎn)部署地點(diǎn)。
client:節(jié)點(diǎn)表。記錄節(jié)點(diǎn)信息及最新關(guān)鍵信息,關(guān)聯(lián)space表。
base_data:日志表。記錄每次上報(bào)的信息,關(guān)聯(lián)space、client表。
aggregate_data:匯總信息表。記錄按小時(shí)、天等時(shí)段匯總的數(shù)據(jù)信息。
temp_base_data:臨時(shí)日志表。上報(bào)設(shè)備名如不在節(jié)點(diǎn)表內(nèi),則存入此表,主要用于調(diào)測(cè)。
模塊功能:接收IoT explorer推送數(shù)據(jù),匹配并轉(zhuǎn)換后,入數(shù)據(jù)庫(kù)
使用產(chǎn)品:API 網(wǎng)關(guān)、無(wú)服務(wù)器云函數(shù)
關(guān)聯(lián)源碼:github-upload
部署方式:請(qǐng)參考相關(guān)文章 在線甲醛監(jiān)測(cè) “4.2.2 無(wú)服務(wù)器云函數(shù)/4.2.3 云API網(wǎng)關(guān)” 章節(jié)
模塊功能:按3分鐘觸發(fā),更新終端信息,用于快速查詢與展示
使用產(chǎn)品:云函數(shù)
關(guān)聯(lián)源碼:github-client_active_new
部署方式:請(qǐng)參考相關(guān)文章 在線甲醛監(jiān)測(cè) “4.2.2 無(wú)服務(wù)器云函數(shù)/4.2.3 云API網(wǎng)關(guān)” 章節(jié),但改為“定時(shí)觸發(fā)”模式
模塊功能:按小時(shí)及天觸發(fā),統(tǒng)計(jì)監(jiān)測(cè)數(shù)據(jù),用于快速查詢與展示
使用產(chǎn)品:云函數(shù)
關(guān)聯(lián)源碼:github-aggregate
部署方式:請(qǐng)參考相關(guān)文章 在線甲醛監(jiān)測(cè) “4.2.2 無(wú)服務(wù)器云函數(shù)/4.2.3 云API網(wǎng)關(guān)” 章節(jié),但改為“定時(shí)觸發(fā)”模式
模塊功能:通過(guò)API網(wǎng)關(guān)提供數(shù)據(jù)查詢能力,響應(yīng)云圖調(diào)用,提供終端匯總信息表
使用產(chǎn)品:API 網(wǎng)關(guān)、云函數(shù)
關(guān)聯(lián)源碼:github-client_info
部署方式:請(qǐng)參考相關(guān)文章 在線甲醛監(jiān)測(cè) “4.2.2 無(wú)服務(wù)器云函數(shù)/4.2.3 云API網(wǎng)關(guān)” 章節(jié)
模塊功能:通過(guò)API網(wǎng)關(guān)提供數(shù)據(jù)查詢能力,響應(yīng)云圖調(diào)用,提供終端單點(diǎn)信息表
使用產(chǎn)品:API 網(wǎng)關(guān)、云函數(shù)
關(guān)聯(lián)源碼:github-client_data
部署方式:請(qǐng)參考相關(guān)文章 在線甲醛監(jiān)測(cè) “4.2.2 無(wú)服務(wù)器云函數(shù)/4.2.3 云API網(wǎng)關(guān)” 章節(jié)
模塊功能:提供WEB端展示能力,含地圖繪點(diǎn)、列表展示、折線展示等
使用產(chǎn)品:騰訊云圖
關(guān)聯(lián)源碼:無(wú),當(dāng)前為手工配置
部署方式:請(qǐng)參考相關(guān)文章 在線甲醛監(jiān)測(cè) “4.2.4 騰訊云圖” 章節(jié),但數(shù)據(jù)源選擇時(shí),改為使用“API”。其中“首頁(yè)”地圖使用“數(shù)據(jù)接口-終端匯總信息表”接口、“單點(diǎn)數(shù)據(jù)頁(yè)”使用“數(shù)據(jù)接口-終端單點(diǎn)信息表”接口。具體調(diào)用的接口URL,請(qǐng)對(duì)應(yīng)API網(wǎng)關(guān)提供的服務(wù)鏈接。
上圖表數(shù)為每節(jié)點(diǎn)每15秒上報(bào)一次的計(jì)算結(jié)果。
硬件部分由于廠商與采購(gòu)量的差異,價(jià)格不同。此處以云服務(wù)成本計(jì)算,如果10000節(jié)點(diǎn)規(guī)模,每節(jié)點(diǎn)每分鐘上報(bào)一次,單節(jié)點(diǎn)云服務(wù)年成本:
二期架構(gòu) 3.335元 (數(shù)據(jù)庫(kù)/年+云圖/年)/10000+(API網(wǎng)關(guān)+云函數(shù))/4=(468+48)/10000+(9+2.1)/4
三期架構(gòu) 1.09元 (消息隊(duì)列/年+數(shù)據(jù)庫(kù)/年*2+云圖/年)/10000+(云函數(shù)+日志服務(wù)+對(duì)象存儲(chǔ))/4=(3228+468*2+48)/10000+(2.1+2.24+0.02)/4
二期無(wú)對(duì)象存儲(chǔ)及日志服務(wù)模塊,但在當(dāng)前在建三期中已使用數(shù)月,故有實(shí)際數(shù)據(jù)可列入統(tǒng)計(jì)。
完成三期建設(shè),計(jì)劃內(nèi)容涉及:
交互優(yōu)化(done): 啟用space表,展示地點(diǎn)。
交互建設(shè)(doing): 增加小程序能力,提供移動(dòng)端查詢能力,及告警推送能力。
容災(zāi)優(yōu)化1(done): 增加對(duì)象存儲(chǔ),提供低成本數(shù)據(jù)備份、恢復(fù)、異步遷移同步能力。
容災(zāi)優(yōu)化2(todo): 增加消息隊(duì)列 CKafka,應(yīng)對(duì)網(wǎng)絡(luò)異常、數(shù)據(jù)庫(kù)異常情況下的數(shù)據(jù)堆積與丟失風(fēng)險(xiǎn)。
容災(zāi)優(yōu)化3(doing): 增加日志服務(wù),用于數(shù)據(jù)對(duì)賬,應(yīng)對(duì)多環(huán)節(jié)數(shù)據(jù)處理中,可能出現(xiàn)的數(shù)據(jù)丟失或錯(cuò)亂情況。
注:淺藍(lán)色說(shuō)明的是相對(duì)二期的架構(gòu)變更重點(diǎn)。
上述內(nèi)容就是以Serverless為核心的云端能力如何打造分布式大氣監(jiān)測(cè)系統(tǒng),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。