
200公里,0.3秒——一個(gè)水務(wù)人的真實(shí)困境與一臺(tái)交換機(jī)的靜默破局
1、凌晨三點(diǎn)的電話
李工接到電話的時(shí)候,是2023年11月17日凌晨三點(diǎn)十一分。
電話那頭是水廠中控室的值班員小孫,聲音發(fā)抖:"李工,三號(hào)泵站的壓力突然掉到0.2了,SCADA上顯示的數(shù)據(jù)是四分鐘前的,我們剛派人去現(xiàn)場(chǎng),發(fā)現(xiàn)閥門已經(jīng)開到位了,但是管網(wǎng)末端的用戶已經(jīng)停水二十分鐘了。"
李工沒說話。他盯著電腦屏幕上那條曲線——壓力傳感器的數(shù)據(jù)點(diǎn)之間,隔著整整240秒的空白。
四分鐘。
在水務(wù)行業(yè),四分鐘意味著什么?
意味著一個(gè)區(qū)域的供水安全已經(jīng)暴露在風(fēng)險(xiǎn)里整整四分鐘,而你的系統(tǒng)"以為"一切正常。
這不是第一次了。過去半年,他的團(tuán)隊(duì)已經(jīng)因?yàn)檫h(yuǎn)程監(jiān)控?cái)?shù)據(jù)延遲,觸發(fā)了三次誤報(bào)、兩次漏報(bào),最嚴(yán)重的一次導(dǎo)致市政管網(wǎng)局部水錘,修了三天,賠了十一萬。
李工在水務(wù)系統(tǒng)干了十九年。他管過的管網(wǎng)加起來超過600公里,從城市水廠到山區(qū)泵站,最遠(yuǎn)的一個(gè)監(jiān)測(cè)點(diǎn)在200公里外的水庫。
他太清楚這條路上的每一個(gè)坑了。
很多人不理解,為什么200公里的距離,數(shù)據(jù)會(huì)慢成這樣。
李工給我畫了一張圖。
從水庫的水位傳感器,到市水務(wù)局的大屏上顯示實(shí)時(shí)水位,數(shù)據(jù)要經(jīng)過這些關(guān)卡:
第一關(guān):傳感器到本地RTU。這一段通常沒問題,幾十米,RS485或者模擬量,毫秒級(jí)。
第二關(guān):RTU到就近的接入交換機(jī)。問題開始出現(xiàn)了。很多偏遠(yuǎn)泵站用的是普通辦公交換機(jī),端口少、帶寬小,數(shù)據(jù)一多就排隊(duì)。
第三關(guān):接入交換機(jī)到匯聚點(diǎn)。這一段才是真正的噩夢(mèng)。200公里的鏈路,中間可能經(jīng)過三到四個(gè)運(yùn)營商的中繼節(jié)點(diǎn),每經(jīng)過一個(gè)節(jié)點(diǎn)就要解包、查表、轉(zhuǎn)發(fā)、封裝。如果中間某個(gè)節(jié)點(diǎn)的設(shè)備是那種"能用就行"的消費(fèi)級(jí)交換機(jī),隊(duì)列一滿,數(shù)據(jù)就開始丟包、重傳、再丟包。
第四關(guān):匯聚點(diǎn)到SCADA服務(wù)器。終于到了。但這時(shí)候你看到的數(shù)據(jù),已經(jīng)是幾分鐘前的"歷史記錄"了。
李工說了一句話,我記到現(xiàn)在:
"我們花了八十萬建的監(jiān)控系統(tǒng),實(shí)際上是一個(gè)延遲四分鐘的'天氣預(yù)報(bào)'。它告訴你四分鐘前下過雨,但你現(xiàn)在已經(jīng)淋濕了。"
他試過很多辦法。
加帶寬?運(yùn)營商說200公里外的基站端口已經(jīng)滿了,擴(kuò)容要等三個(gè)月,費(fèi)用另算。
換協(xié)議?從Modbus TCP換成MQTT,延遲降了一點(diǎn),但到了第三關(guān)還是卡。
加緩存?本地存數(shù)據(jù),定時(shí)上傳。結(jié)果數(shù)據(jù)是"準(zhǔn)"了,但實(shí)時(shí)性沒了——你存的是上一秒的數(shù)據(jù),上傳要兩分鐘,到服務(wù)器又要一分鐘,三分鐘后你看到的還是"過去"。
他甚至想過拉專線。一問價(jià)格,200公里的MPLS專線,月租四萬七。水務(wù)局的預(yù)算批不下來。
李工說,那段時(shí)間他每天早上打開SCADA的第一件事,不是看數(shù)據(jù),而是先看延遲時(shí)間。如果超過60秒,他就知道今天又是"薛定諤的管網(wǎng)"——你不知道它到底出了什么問題,直到有人打電話來。
2024年3月,李工去參加一個(gè)智慧水務(wù)的技術(shù)交流會(huì)。
會(huì)上有個(gè)做工業(yè)網(wǎng)絡(luò)的工程師,聽完他的描述,問了一個(gè)問題:
"李工,你那個(gè)200公里鏈路中間的節(jié)點(diǎn),用的什么交換機(jī)?"
李工愣了一下:"交換機(jī)?就是運(yùn)營商配的那種,能亮就行。"
工程師笑了一下:"那就是問題。"
他說了一段話,大意是這樣的:
遠(yuǎn)程鏈路的延遲,70%不是距離造成的,是中間節(jié)點(diǎn)的設(shè)備造成的。光纖本身的傳輸延遲,200公里也就1毫秒。真正吃掉時(shí)間的,是每一個(gè)中間節(jié)點(diǎn)的交換機(jī)在做包處理時(shí)的排隊(duì)延遲、緩沖延遲和重傳延遲。
一臺(tái)普通的百兆交換芯片,在滿載情況下的轉(zhuǎn)發(fā)延遲可以達(dá)到10-50毫秒。如果中間有四個(gè)節(jié)點(diǎn),光交換機(jī)就貢獻(xiàn)了200毫秒。再加上協(xié)議開銷、隊(duì)列等待、重傳,延遲輕松上秒。
"你不需要換專線,你需要換的是中間那幾臺(tái)交換機(jī)。"
工程師推薦了一種工業(yè)級(jí)的管理型交換機(jī),支持硬件級(jí)QoS、環(huán)網(wǎng)冗余、寬溫?zé)o風(fēng)扇設(shè)計(jì),關(guān)鍵是轉(zhuǎn)發(fā)延遲可以控制在微秒級(jí),而且支持長距離光纖傳輸?shù)膬?yōu)化。
他提了一個(gè)型號(hào),USR-ISG系列。
李工當(dāng)時(shí)沒太在意。他覺得一臺(tái)交換機(jī)能改變什么?200公里的物理距離擺在那里,光速都要跑1毫秒。
但他還是拿了一臺(tái)樣品回去試。
李工的團(tuán)隊(duì)在200公里鏈路的兩個(gè)關(guān)鍵中繼節(jié)點(diǎn),各換了一臺(tái)工業(yè)交換機(jī)。
沒有改拓?fù)?,沒有加帶寬,沒有拉新光纖。就是把原來運(yùn)營商配的那種"能亮就行"的設(shè)備,換成了工業(yè)級(jí)的。
換完之后,李工做了一個(gè)測(cè)試:從水庫的水位傳感器發(fā)一個(gè)數(shù)據(jù)包,到SCADA服務(wù)器顯示,他用秒表掐了時(shí)間。
0.3秒。
他以為自己掐錯(cuò)了,又測(cè)了三次。0.28秒,0.31秒,0.29秒。
四分鐘變成了0.3秒。
他后來分析原因,其實(shí)不復(fù)雜:
原來的交換機(jī)在處理數(shù)據(jù)包的時(shí)候,用的是軟件隊(duì)列,數(shù)據(jù)包進(jìn)來要先放到內(nèi)存里排隊(duì),CPU處理完一個(gè)才拿下一個(gè)。負(fù)載一高,隊(duì)列就堵,延遲就上去了。
工業(yè)交換機(jī)用的是硬件轉(zhuǎn)發(fā)芯片,數(shù)據(jù)包進(jìn)來直接由ASIC處理,不經(jīng)過CPU,不排隊(duì),到了就走。而且支持優(yōu)先級(jí)隊(duì)列,把SCADA的實(shí)時(shí)數(shù)據(jù)標(biāo)記為最高優(yōu)先級(jí),其他的流量(比如視頻監(jiān)控、日常日志)往后排。
還有一點(diǎn)很關(guān)鍵:原來的交換機(jī)不支持環(huán)網(wǎng)冗余,鏈路斷了要重新收斂,最長要30秒。新的交換機(jī)支持ERPS環(huán)網(wǎng)協(xié)議,鏈路切換時(shí)間20毫秒以內(nèi)。
李工說,換完之后最直觀的感受不是數(shù)據(jù)快了,而是——他終于敢相信那個(gè)數(shù)字了。
以前SCADA上顯示的壓力值,他要打個(gè)問號(hào):這是現(xiàn)在的嗎?還是三分鐘前的?
現(xiàn)在他不用打問號(hào)了。0.3秒的延遲,對(duì)人來說就是"實(shí)時(shí)"。
我知道你在想什么。因?yàn)槔罟ぴ趽Q交換機(jī)之前,也想過這些問題。
"200公里的問題,換兩臺(tái)交換機(jī)就能解決?會(huì)不會(huì)太簡單了?"
是的,就是這么簡單。但前提是你要理解問題出在哪里。大多數(shù)人把遠(yuǎn)程延遲歸咎于"距離太遠(yuǎn)",其實(shí)距離只貢獻(xiàn)了不到1%的延遲。真正的瓶頸是中間節(jié)點(diǎn)的設(shè)備。你花四十萬拉專線解決的,可能只是1%的問題,而忽略了99%的問題。
"工業(yè)交換機(jī)是不是很貴?"
單臺(tái)確實(shí)比普通交換機(jī)貴。但你算一下:一條200公里的MPLS專線月租四萬七,一年五十六萬。兩臺(tái)工業(yè)交換機(jī),總價(jià)不到一萬塊,用十年,年均一千塊。你覺得哪個(gè)劃算?
像李工用的USR-ISG這類工業(yè)交換機(jī),支持-40到75℃寬溫、無風(fēng)扇、DIN導(dǎo)軌安裝、IP40防護(hù),本來就是給這種野外中繼站設(shè)計(jì)的。單臺(tái)成本控制得很好,但轉(zhuǎn)發(fā)性能和可靠性對(duì)標(biāo)的是運(yùn)營商級(jí)別。
"我的鏈路中間沒有可換設(shè)備的位置怎么辦?"
這是個(gè)好問題。很多遠(yuǎn)程鏈路的中繼節(jié)點(diǎn)在運(yùn)營商的機(jī)柜里,你進(jìn)不去。這種情況下,你可以在自己的RTU前面加一臺(tái)工業(yè)交換機(jī)做"邊緣聚合",把多路傳感器數(shù)據(jù)先匯總、優(yōu)先級(jí)排序,再上傳。效果一樣,只是多了一跳。關(guān)鍵思路是:在數(shù)據(jù)進(jìn)入"慢車道"之前,先給它開一條"快車道"。
"我的運(yùn)維團(tuán)隊(duì)能管得了嗎?"
李工說這是他最滿意的一點(diǎn)。這批交換機(jī)支持Web界面管理和SNMP監(jiān)控,他的兩個(gè)運(yùn)維人員,一個(gè)管水廠設(shè)備,一個(gè)管網(wǎng)絡(luò),后者只花了半天就學(xué)會(huì)了看端口狀態(tài)、調(diào)QoS策略、查環(huán)網(wǎng)拓?fù)?。不需要專門的網(wǎng)絡(luò)工程師。
換完交換機(jī)三個(gè)月后,李工給我發(fā)了一組數(shù)據(jù):
SCADA數(shù)據(jù)平均延遲:從240秒降到0.3秒
誤報(bào)率:從每月4.7次降到0.1次
漏報(bào)率:從每季度2次降到0次
管網(wǎng)事故響應(yīng)時(shí)間:從平均12分鐘降到30秒以內(nèi)
全年因監(jiān)控延遲導(dǎo)致的經(jīng)濟(jì)損失:從預(yù)估35萬降到不到2萬
他還說了一件小事。
換完之后的第一個(gè)月,有天凌晨兩點(diǎn),四號(hào)泵站的流量突然異常,SCADA在0.3秒內(nèi)就彈出了告警。李工的手機(jī)響了,他打開一看,數(shù)據(jù)已經(jīng)到了,曲線已經(jīng)畫出來了,異常點(diǎn)標(biāo)紅了。
他打了個(gè)電話給值班室,三分鐘后現(xiàn)場(chǎng)確認(rèn)是進(jìn)水閥的電動(dòng)執(zhí)行器卡滯,十分鐘內(nèi)修好了。
如果是以前,這個(gè)故障要等到第二天早上八點(diǎn)巡檢才能發(fā)現(xiàn)。那時(shí)候,下游三個(gè)小區(qū)已經(jīng)低水壓供水六個(gè)小時(shí)了。
李工說,那天晚上他睡得特別好。
不是因?yàn)楣收闲。且驗(yàn)樗馈到y(tǒng)在替他盯著,而且盯得住。
你可能正在經(jīng)歷李工半年前的處境。
你的SCADA上,數(shù)據(jù)永遠(yuǎn)比現(xiàn)實(shí)慢幾分鐘。你的告警永遠(yuǎn)比事故晚一步。你的運(yùn)維團(tuán)隊(duì)每天花兩個(gè)小時(shí)在"這個(gè)數(shù)據(jù)到底是不是實(shí)時(shí)的"這個(gè)問題上扯皮。
你可能已經(jīng)在考慮拉專線了。你可能已經(jīng)在寫預(yù)算申請(qǐng)了。你可能已經(jīng)在和運(yùn)營商談價(jià)格了。
在你簽字之前,我想請(qǐng)你做一件事:
去你的鏈路中間節(jié)點(diǎn)看一眼。
打開那個(gè)機(jī)柜,看看里面的交換機(jī)是什么牌子、什么型號(hào)、什么時(shí)候裝的。
如果上面落了一層灰,如果指示燈有一半是滅的,如果你叫不出它的名字——
那你的問題,可能不是200公里。
是那臺(tái)你從來沒正眼看過的交換機(jī)。
水務(wù)這行,最怕的不是設(shè)備壞了,是數(shù)據(jù)晚了。
設(shè)備壞了你聽得見,數(shù)據(jù)晚了你什么都不知道。
0.3秒和240秒之間的距離,不是光纖的長度。
是你愿不愿意換掉那臺(tái)"能亮就行"的交換機(jī)。
李工換了。他說他終于睡了個(gè)好覺。
你呢?