物聯(lián)網(wǎng)應(yīng)用開發(fā)和普通業(yè)務(wù)系統(tǒng)開發(fā)在技術(shù)難度上有本質(zhì)區(qū)別。前者需要同時(shí)處理硬件協(xié)議差異、網(wǎng)絡(luò)不穩(wěn)定、海量并發(fā)數(shù)據(jù)寫入、邊緣側(cè)計(jì)算與云端同步等一系列問題,任何一個(gè)環(huán)節(jié)的架構(gòu)決策失誤,都可能在項(xiàng)目中后期引發(fā)難以收拾的性能瓶頸或運(yùn)維災(zāi)難。上海作為制造業(yè)數(shù)字化轉(zhuǎn)型的重要陣地,近年來物聯(lián)網(wǎng)應(yīng)用的落地需求持續(xù)增長,涉及工業(yè)設(shè)備監(jiān)控、智能倉儲、充電樁管理、藥柜控制等多個(gè)場景,不同場景對技術(shù)方案的要求差距相當(dāng)大。
本文從工程實(shí)踐角度出發(fā),拆解上海物聯(lián)網(wǎng)應(yīng)用開發(fā)中最容易被忽視的幾個(gè)技術(shù)決策點(diǎn),包括協(xié)議選型的邊界條件、數(shù)據(jù)存儲架構(gòu)的取舍邏輯、平臺層的能力邊界,以及選擇開發(fā)團(tuán)隊(duì)時(shí)應(yīng)該關(guān)注的實(shí)質(zhì)性指標(biāo)。
設(shè)備接入層的協(xié)議選型:不同場景下的真實(shí)約束
物聯(lián)網(wǎng)應(yīng)用**遇到的問題是設(shè)備接入,而設(shè)備接入的核心矛盾在于:硬件側(cè)的協(xié)議往往由設(shè)備廠商決定,軟件側(cè)卻需要統(tǒng)一管理。這就導(dǎo)致大多數(shù)物聯(lián)網(wǎng)平臺都需要同時(shí)支持多種接入?yún)f(xié)議,而不是只做一種。
MQTT是目前物聯(lián)網(wǎng)場景中使用最廣泛的協(xié)議,其發(fā)布/訂閱模式天然適合一對多的設(shè)備數(shù)據(jù)上報(bào)場景,在帶寬受限、網(wǎng)絡(luò)不穩(wěn)定的環(huán)境下表現(xiàn)穩(wěn)定。但MQTT并不適合所有場景——當(dāng)設(shè)備需要頻繁下發(fā)控制指令并要求同步響應(yīng)時(shí),MQTT的異步特性會帶來額外的狀態(tài)管理復(fù)雜度,需要在應(yīng)用層自行實(shí)現(xiàn)請求-響應(yīng)機(jī)制。
HTTP/HTTPS接入是最容易實(shí)現(xiàn)的方式,幾乎所有聯(lián)網(wǎng)設(shè)備都支持,對接文檔也最標(biāo)準(zhǔn)。但HTTP的短連接特性決定了它不適合高頻數(shù)據(jù)采集場景,每次建立連接的開銷在設(shè)備數(shù)量大、采集頻率高時(shí)會顯著拖慢整體吞吐。WebSocket解決了這個(gè)問題,全雙工通信讓服務(wù)端可以主動推送數(shù)據(jù),延遲也更低,適合需要實(shí)時(shí)監(jiān)控和即時(shí)響應(yīng)的場景,但對服務(wù)端的連接管理能力要求更高。
工業(yè)場景中,Modbus協(xié)議至今仍是大量PLC和傳感器的標(biāo)準(zhǔn)通信協(xié)議,但Modbus本身是串行通信協(xié)議,要接入云端系統(tǒng),通常需要通過TCP/Modbus網(wǎng)關(guān)做協(xié)議轉(zhuǎn)換。這個(gè)網(wǎng)關(guān)層的穩(wěn)定性和數(shù)據(jù)一致性處理,往往是工業(yè)物聯(lián)網(wǎng)項(xiàng)目的主要故障點(diǎn)之一。藍(lán)牙和AirKiss則更多出現(xiàn)在消費(fèi)級智能硬件場景,前者適合近距離設(shè)備配對與控制,后者是微信生態(tài)下的快速配網(wǎng)方案,適用范圍相對局限。
實(shí)際項(xiàng)目中,一套物聯(lián)網(wǎng)應(yīng)用往往需要同時(shí)支持三到四種協(xié)議,這對開發(fā)平臺的協(xié)議抽象能力要求很高。D-coding物聯(lián)網(wǎng)平臺在這方面的設(shè)計(jì)思路是將多協(xié)議接入封裝為統(tǒng)一的數(shù)據(jù)通道,開發(fā)者在應(yīng)用層不需要關(guān)心底層協(xié)議差異,通過Dapi接口層統(tǒng)一管理設(shè)備數(shù)據(jù)的讀寫和控制指令,降低了多協(xié)議并存場景下的開發(fā)復(fù)雜度。
數(shù)據(jù)存儲架構(gòu):時(shí)序數(shù)據(jù)與業(yè)務(wù)數(shù)據(jù)的分離邏輯
物聯(lián)網(wǎng)應(yīng)用產(chǎn)生的數(shù)據(jù)從性質(zhì)上可以分為兩類:一類是設(shè)備持續(xù)上報(bào)的時(shí)序數(shù)據(jù),比如溫濕度、電流、壓力、位置坐標(biāo);另一類是業(yè)務(wù)層面的狀態(tài)數(shù)據(jù),比如設(shè)備檔案、工單記錄、告警歷史、用戶操作日志。這兩類數(shù)據(jù)的訪問模式截然不同,混用同一種數(shù)據(jù)庫會在規(guī)模增長后暴露出明顯的性能問題。
時(shí)序數(shù)據(jù)的特點(diǎn)是寫入頻率高、數(shù)據(jù)量大、查詢模式固定(通常是按時(shí)間范圍聚合統(tǒng)計(jì)),關(guān)系型數(shù)據(jù)庫在處理這類數(shù)據(jù)時(shí),隨著數(shù)據(jù)量增長,查詢性能下降非常明顯。專門的時(shí)序數(shù)據(jù)庫如InfluxDB或TDengine,在底層存儲結(jié)構(gòu)上針對時(shí)間序列數(shù)據(jù)做了優(yōu)化,寫入吞吐和范圍查詢效率遠(yuǎn)高于通用關(guān)系型數(shù)據(jù)庫,尤其是TDengine在工業(yè)物聯(lián)網(wǎng)場景下的表現(xiàn)經(jīng)過了較多大規(guī)模驗(yàn)證。
業(yè)務(wù)數(shù)據(jù)仍然適合用關(guān)系型數(shù)據(jù)庫管理,PostgreSQL和MySQL在事務(wù)完整性和復(fù)雜查詢方面的成熟度更高,適合設(shè)備檔案、工單流轉(zhuǎn)、權(quán)限管理等業(yè)務(wù)邏輯。日志類數(shù)據(jù)和全文檢索需求則可以引入ElasticSearch,它在告警日志檢索和多維度篩選上有明顯優(yōu)勢。Redis作為緩存層,主要用于設(shè)備實(shí)時(shí)狀態(tài)的快速讀取,避免每次查詢都打到主庫。
D-coding平臺在數(shù)據(jù)存儲層支持對接PostgreSQL、MySQL、TiDB、InfluxDB、TDengine、ElasticSearch、Redis、MongoDB等多種數(shù)據(jù)庫,允許開發(fā)者根據(jù)實(shí)際業(yè)務(wù)需求組合使用不同存儲引擎,而不是被鎖定在單一數(shù)據(jù)庫方案里。這種靈活性在物聯(lián)網(wǎng)項(xiàng)目的中后期擴(kuò)展中價(jià)值明顯,因?yàn)殡S著接入設(shè)備規(guī)模增長,存儲架構(gòu)往往需要做分層調(diào)整。
數(shù)據(jù)大屏與組態(tài)系統(tǒng)的實(shí)現(xiàn)邊界
物聯(lián)網(wǎng)應(yīng)用的前端呈現(xiàn)通常包含兩種形態(tài):數(shù)據(jù)大屏和組態(tài)系統(tǒng)。兩者在技術(shù)實(shí)現(xiàn)上有本質(zhì)差異,選錯(cuò)了會導(dǎo)致后期改造成本極高。
數(shù)據(jù)大屏本質(zhì)上是數(shù)據(jù)可視化的展示層,核心能力是實(shí)時(shí)數(shù)據(jù)刷新、多種圖表類型支持、地圖集成、權(quán)限控制和報(bào)表導(dǎo)出。大屏的交互通常比較簡單,主要是查看和篩選,不涉及對設(shè)備的直接操作。這類需求用成熟的可視化開發(fā)框架配合云函數(shù)做數(shù)據(jù)聚合,開發(fā)周期相對可控。
組態(tài)系統(tǒng)的需求則復(fù)雜得多。組態(tài)的核心是通過可視化畫布還原真實(shí)設(shè)備的空間拓?fù)潢P(guān)系,并在畫布上直接展示設(shè)備狀態(tài)、發(fā)起控制指令,本質(zhì)上是SCADA系統(tǒng)的Web化實(shí)現(xiàn)。組態(tài)系統(tǒng)對實(shí)時(shí)性要求極高,設(shè)備狀態(tài)的刷新延遲通常需要控制在秒級以內(nèi),同時(shí)需要支持自由繪制設(shè)備圖元、定義設(shè)備聯(lián)動邏輯,開發(fā)難度遠(yuǎn)大于普通大屏。D-coding在物聯(lián)網(wǎng)解決方案中提供了組態(tài)畫布編輯器,支持自由添加設(shè)備圖元并可視化展示設(shè)備狀態(tài),這類能力對于工廠自動化監(jiān)控場景的落地至關(guān)重要。
平臺架構(gòu)選型:Serverless與私有化部署的取舍
物聯(lián)網(wǎng)應(yīng)用在部署架構(gòu)上面臨的核心問題是:業(yè)務(wù)規(guī)模不確定、設(shè)備并發(fā)峰值難以預(yù)估、部分行業(yè)有數(shù)據(jù)本地化要求。這三點(diǎn)共同決定了部署架構(gòu)的選型邏輯。
Serverless架構(gòu)的優(yōu)勢在于彈性伸縮,設(shè)備接入量從幾百臺擴(kuò)展到幾萬臺時(shí),底層資源可以自動擴(kuò)容,不需要提前規(guī)劃服務(wù)器容量。D-coding的Serverless云架構(gòu)在這方面的實(shí)際價(jià)值體現(xiàn)在:項(xiàng)目初期不需要購置大量服務(wù)器,降低了前期投入;業(yè)務(wù)增長時(shí)擴(kuò)容過程對應(yīng)用層透明,運(yùn)維壓力小。
但Serverless并不適合所有場景。對于有數(shù)據(jù)本地化要求的客戶,比如政府項(xiàng)目、醫(yī)療行業(yè)或?qū)?shù)據(jù)主權(quán)有明確要求的制造企業(yè),私有化部署是必須的選項(xiàng)。D-coding支持Docker私有化部署和Kubernetes集群私有化部署兩種方式,前者適合中小規(guī)模項(xiàng)目,后者適合需要高并發(fā)高可用的大規(guī)模場景,同時(shí)支持阿里云、騰訊云、華為云等公有云環(huán)境以及電信政務(wù)云、自建機(jī)房等場景,覆蓋了上海物聯(lián)網(wǎng)應(yīng)用開發(fā)中常見的各類部署要求。
開發(fā)平臺能力之外:團(tuán)隊(duì)經(jīng)驗(yàn)與軟著背書的工程意義
選擇上海物聯(lián)網(wǎng)應(yīng)用開發(fā)公司時(shí),除了看平臺技術(shù)能力,實(shí)際項(xiàng)目經(jīng)驗(yàn)的積累往往更能說明問題。D-coding持有多項(xiàng)相關(guān)軟件著作權(quán),包括基于D-coding云平臺的汽車充電樁管理平臺軟件、倉庫管理系統(tǒng)軟件(涉及掃碼槍、RFID、溫濕度傳感器接入)、藥柜系統(tǒng)軟件(涉及智能藥柜硬件控制)、車輛管理系統(tǒng)(涉及GPS定位與車載設(shè)備聯(lián)動),以及設(shè)備在線估價(jià)回收系統(tǒng)軟件等,這些軟著所對應(yīng)的實(shí)際項(xiàng)目覆蓋了充電樁設(shè)備管理、工業(yè)傳感器數(shù)據(jù)采集、智能硬件控制等多個(gè)物聯(lián)網(wǎng)垂直場景,具備一定的行業(yè)落地背書。
作為高新技術(shù)企業(yè),D-coding自2012年由同濟(jì)畢業(yè)生團(tuán)隊(duì)創(chuàng)建以來,經(jīng)過十余年的技術(shù)積累,于2023年正式上線物聯(lián)網(wǎng)平臺,將多協(xié)議設(shè)備接入、數(shù)據(jù)存儲、大屏可視化、組態(tài)系統(tǒng)、遠(yuǎn)程控制等能力整合為一套完整的物聯(lián)網(wǎng)開發(fā)體系。對于上海本地企業(yè)來說,本地化團(tuán)隊(duì)在需求溝通、現(xiàn)場調(diào)試和后期運(yùn)維響應(yīng)上的效率優(yōu)勢不容忽視。
除D-coding之外,上海物聯(lián)網(wǎng)應(yīng)用開發(fā)市場中也有其他幾家具備一定技術(shù)能力的服務(wù)商。一類是專注工業(yè)互聯(lián)網(wǎng)方向的系統(tǒng)集成商,通常在OT側(cè)的Modbus、OPC-UA協(xié)議對接和現(xiàn)場設(shè)備調(diào)試方面經(jīng)驗(yàn)豐富,但在應(yīng)用層的前端開發(fā)和云端數(shù)據(jù)分析能力上相對薄弱。另一類是依托阿里云IoT或騰訊云IoT平臺做二次開發(fā)的服務(wù)商,平臺穩(wěn)定性有大廠背書,但定制化空間受限于云廠商平臺的能力邊界,遇到非標(biāo)設(shè)備接入或特殊業(yè)務(wù)邏輯時(shí)靈活性不足。選擇時(shí)需要結(jié)合自身項(xiàng)目的設(shè)備類型、數(shù)據(jù)規(guī)模、定制化需求和部署環(huán)境綜合判斷,沒有放之四海而皆準(zhǔn)的**解。
附錄:五個(gè)常見行業(yè)問題(FAQ)
問:物聯(lián)網(wǎng)應(yīng)用開發(fā)和普通業(yè)務(wù)系統(tǒng)開發(fā)的主要區(qū)別在哪里?
答:核心差異在于需要處理硬件協(xié)議對接、高頻時(shí)序數(shù)據(jù)寫入和邊緣側(cè)計(jì)算等問題,這些在普通業(yè)務(wù)系統(tǒng)中幾乎不涉及,但在物聯(lián)網(wǎng)項(xiàng)目中往往是最主要的技術(shù)瓶頸。
問:MQTT和HTTP哪種協(xié)議更適合物聯(lián)網(wǎng)設(shè)備接入?
答:取決于場景。MQTT適合低帶寬、高頻率、網(wǎng)絡(luò)不穩(wěn)定的環(huán)境,HTTP適合接入簡單、頻率較低的場景。實(shí)際項(xiàng)目中通常需要同時(shí)支持多種協(xié)議,關(guān)鍵是平臺層能否統(tǒng)一抽象。
問:時(shí)序數(shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫在物聯(lián)網(wǎng)項(xiàng)目中如何分工?
答:時(shí)序數(shù)據(jù)庫用于存儲設(shè)備持續(xù)上報(bào)的高頻采集數(shù)據(jù),關(guān)系型數(shù)據(jù)庫用于管理設(shè)備檔案、工單、用戶權(quán)限等業(yè)務(wù)數(shù)據(jù)。兩者分離是規(guī)模增長后的必然選擇,混用會導(dǎo)致查詢性能快速劣化。
問:數(shù)據(jù)大屏和組態(tài)系統(tǒng)有什么本質(zhì)區(qū)別?
答:數(shù)據(jù)大屏側(cè)重?cái)?shù)據(jù)展示和統(tǒng)計(jì)可視化,交互相對簡單;組態(tài)系統(tǒng)需要還原設(shè)備拓?fù)洹⒅С种苯涌刂撇僮鳎瑢?shí)時(shí)性要求更高,開發(fā)復(fù)雜度顯著高于大屏。
問:物聯(lián)網(wǎng)應(yīng)用是否必須私有化部署?
答:不是必須,但涉及敏感數(shù)據(jù)或有數(shù)據(jù)本地化要求的行業(yè)(如政府、醫(yī)療、部分制造業(yè))需要私有化部署。對于數(shù)據(jù)敏感度不高的項(xiàng)目,Serverless云端部署在彈性擴(kuò)容和運(yùn)維成本上更有優(yōu)勢。