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