文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2018.S1.073
0 引言
太陽能是目前最為清潔和安全的可再生資源,是傳統(tǒng)化石能源的最佳能源替代品。但是太陽能的地理分布廣泛,需要較大的采集面積,因此太陽能的利用注定是分布式的結(jié)構(gòu)。光伏發(fā)電將太陽能直接轉(zhuǎn)化為電力資源,對(duì)太陽能的利用率比較高,但是其發(fā)電裝置必然離散地分布在相對(duì)廣范的地理范圍內(nèi)。因此,對(duì)于發(fā)電裝置的管理、監(jiān)測、控制,必然需要通過遠(yuǎn)程通信來實(shí)現(xiàn),并確保數(shù)據(jù)傳輸的安全、穩(wěn)定、高效。
隨著智能電網(wǎng)技術(shù)的發(fā)展,目前對(duì)于光伏發(fā)電終端的數(shù)據(jù)通信手段,基本上采用基于TCP/IP網(wǎng)絡(luò)通信方式。經(jīng)過多年的技術(shù)進(jìn)步和發(fā)展,網(wǎng)路通信組件的模型的發(fā)展大體上經(jīng)歷了BIO(同步阻塞)、NIO(同步非阻塞)、AIO(異步非阻塞)3個(gè)階段。
1 BIO—同步阻塞模型
BIO是基于傳統(tǒng)的基本C/S模型,著重于兩個(gè)進(jìn)程間實(shí)現(xiàn)網(wǎng)絡(luò)通信。其中,服務(wù)端提供基于服務(wù)本地的IP和端口號(hào)的網(wǎng)絡(luò)偵聽服務(wù);客戶端向該偵聽發(fā)起通信連接請(qǐng)求,經(jīng)過3次請(qǐng)求和應(yīng)答握手,在成功后雙方建立基于同步阻塞式的Socket的通信連接。
BIO模型在服務(wù)端的實(shí)現(xiàn)一般需要一個(gè)常駐的線程(偵聽線程),用于維持網(wǎng)絡(luò)偵聽服務(wù);并維護(hù)一系列線程(處理線程),用于每個(gè)連接的處理。當(dāng)客戶端發(fā)起一個(gè)請(qǐng)求后,服務(wù)偵聽線程會(huì)檢查當(dāng)前持有的處理線程中是否有閑置資源:如果有,則將連接請(qǐng)求轉(zhuǎn)入線程進(jìn)行處理;如果沒有,則新建線程用于處理,并在無法新增線程時(shí),偵聽線程需要持續(xù)等待,直到有處理線程資源釋放。在處理線程中,對(duì)連接的后續(xù)傳輸處理完成后,通過網(wǎng)絡(luò)輸出流發(fā)送應(yīng)答給客戶端。
BIO可以引入線程池進(jìn)行優(yōu)化[1],其網(wǎng)路服務(wù)支持能力會(huì)得到一定的提升,優(yōu)化后的BIO的模型結(jié)構(gòu)如圖1所示。
在這種模式下,存在兩個(gè)問題:(1)在處理線程資源緊張時(shí),偵聽線程處于阻塞狀態(tài),無法響應(yīng)新的連接請(qǐng)求;(2)每個(gè)連接必須用獨(dú)立的線程進(jìn)行處理,在連接請(qǐng)求徒增的高并發(fā)場景下,服務(wù)端缺乏必要的處理伸縮彈性,在硬件處理上限不變的情況下,無法適應(yīng)急速增長的連接請(qǐng)求和傳輸處理。因此,在高并發(fā)網(wǎng)絡(luò)應(yīng)用環(huán)境下,BIO會(huì)發(fā)生會(huì)出現(xiàn)大量的請(qǐng)求連接超時(shí),服務(wù)端資源消耗持續(xù)在高水位,最終導(dǎo)致整體的服務(wù)處于癱瘓狀態(tài)。
BIO模型能夠支持的穩(wěn)定并發(fā)連接一般不超過3 000。在光伏發(fā)電領(lǐng)域的背景下,基本上無法滿足對(duì)于大量分布式發(fā)電設(shè)備的通信支撐要求。
2 NIO——同步非阻塞模型
在BIO使用過程中,在高并發(fā)和高吞吐的網(wǎng)絡(luò)環(huán)境下,服務(wù)端通常只能保證1 024~2 048個(gè)套接字連接,這對(duì)于廣域網(wǎng)并發(fā)訪問,顯然是不夠的。NIO的出現(xiàn)就是針對(duì)BIO在實(shí)戰(zhàn)中對(duì)于網(wǎng)絡(luò)服務(wù)支持的不足。
同步非阻塞模型,采用Reactor基礎(chǔ)設(shè)計(jì)模式——基于事件驅(qū)動(dòng)的同步式基礎(chǔ)設(shè)計(jì)模式[2]:
首先,采用channel對(duì)連接進(jìn)行抽象,將連接同具體的線程資源脫離開,解除了BIO中連接和線程之間的1:1對(duì)應(yīng)關(guān)系,使得連接空閑時(shí)(無數(shù)據(jù)傳輸時(shí)),線程資源得以回收并重用。
其次,提供同步式的事件分離調(diào)度器(實(shí)際是多個(gè)分離器,以優(yōu)化連接管理和調(diào)度),將每個(gè)channel的讀事件和寫事件在分離調(diào)度器中進(jìn)行事件注冊(cè)和網(wǎng)絡(luò)連接注冊(cè),分離調(diào)度器定時(shí)掃描網(wǎng)絡(luò)連接注冊(cè),當(dāng)某個(gè)網(wǎng)絡(luò)連接有事件觸發(fā)時(shí),分離調(diào)度器器才申請(qǐng)公共資源池中的線程資源進(jìn)行處理,并加載時(shí)間注冊(cè)進(jìn)行回調(diào)操作。
最后,在NIO中特別提供了公共緩沖區(qū)——buffer,使得所有的讀寫數(shù)據(jù),都存放在公共緩沖區(qū)中,讀寫事件被回調(diào)激活后,也是將特定緩沖區(qū)中的一塊資源調(diào)度給事件進(jìn)行讀寫操作。這打破了BIO中每個(gè)連接被隔離開的內(nèi)存管理,而是使得不同連接共享和復(fù)用內(nèi)存,并在空閑時(shí)不再持有內(nèi)存。
NIO模型在經(jīng)過系統(tǒng)架構(gòu)和算法優(yōu)化[3]后,其主要結(jié)構(gòu)如圖2所示。
NIO在理論上可以支持高達(dá)1萬的客戶端并發(fā)實(shí)時(shí)連接(保持連接,并且不停地進(jìn)行數(shù)據(jù)傳輸),對(duì)于并發(fā)非實(shí)時(shí)連接(保持連接,數(shù)據(jù)通信的間隔不小于30 s)可以支持超過3萬客戶端[4]。因此,NIO初步滿足光伏發(fā)電領(lǐng)域的小范圍數(shù)據(jù)通信要求,但是對(duì)于更加廣域的發(fā)電終端連接就力不從心了,需要性能更加強(qiáng)大的長連接并發(fā)架構(gòu)來解決問題。
3 AIO——異步非阻塞模型
在NIO的結(jié)構(gòu)中,需要向分離調(diào)度器注冊(cè)連接和讀寫事件,用于在網(wǎng)絡(luò)連接后,傳輸通過調(diào)度分離之后回調(diào)實(shí)際處理功能。在這個(gè)結(jié)構(gòu)中,調(diào)度分離器實(shí)際上長時(shí)間處于高負(fù)載狀態(tài),即使所有連接都沒有發(fā)生傳輸,依然需要不停地掃描注冊(cè)連接和事件,在客觀上調(diào)度分離器消耗了更多的系統(tǒng)資源。
由于每個(gè)調(diào)度分離器內(nèi)是串行循環(huán)掃描連接池和事件池,所以在響應(yīng)速度上不可避免地有一定的延誤,尤其在高負(fù)載高并發(fā)的應(yīng)用場景下,掃描周期會(huì)更長,或者創(chuàng)建更多的分離調(diào)度器,消耗更多的資源以換取掃描周期的縮短。在這種情況下,系統(tǒng)的資源和負(fù)載會(huì)被大量的額外消耗,用于實(shí)際網(wǎng)絡(luò)服務(wù)和業(yè)務(wù)處理的資源會(huì)被擠占。
異步非阻塞模型采用Proactor基礎(chǔ)設(shè)計(jì)模式——基于事件驅(qū)動(dòng)的異步式基礎(chǔ)設(shè)計(jì)模式[5-6]:
通過API向操作系統(tǒng)的網(wǎng)絡(luò)服務(wù)注冊(cè)異步連接讀寫事件,以及相應(yīng)的數(shù)據(jù)緩沖區(qū)。
當(dāng)操作系統(tǒng)在底層發(fā)生網(wǎng)絡(luò)數(shù)據(jù)傳入時(shí),操作系統(tǒng)將數(shù)據(jù)寫入響應(yīng)的連接讀取緩沖區(qū),并在寫入完成后通知注冊(cè)的AIO讀取事件;在應(yīng)用中的AIO接收到讀取事件后,通過API將讀取緩沖區(qū)的數(shù)據(jù)取出用于業(yè)務(wù)處理。
當(dāng)業(yè)務(wù)功能需要發(fā)送數(shù)據(jù)時(shí),調(diào)用AIO的發(fā)送API,將數(shù)據(jù)寫入發(fā)送緩沖區(qū),操作系統(tǒng)的底層服務(wù)會(huì)從發(fā)送緩沖區(qū)獲得發(fā)送數(shù)據(jù),并通過操作系統(tǒng)底層網(wǎng)絡(luò)服務(wù)執(zhí)行發(fā)送操作,在完成后通知AIO注冊(cè)的寫事件,通知發(fā)送任務(wù)已經(jīng)完成。
本文中AIO網(wǎng)絡(luò)服務(wù)模型已經(jīng)實(shí)際應(yīng)用于山東某地的光伏發(fā)電項(xiàng)目,模型實(shí)現(xiàn)的具體結(jié)構(gòu)如圖3所示。
在AIO模型中取消了用于周期性掃描和調(diào)度的分離調(diào)度器,基本上消除了冗余的資源消耗。操作系統(tǒng)的底層網(wǎng)絡(luò)服務(wù)通過AIO的異步事件,直接與應(yīng)用進(jìn)行異步交互,使得網(wǎng)絡(luò)IO與業(yè)務(wù)處理通過共享數(shù)據(jù)緩沖區(qū)進(jìn)行交互,同時(shí)又在線程任務(wù)處理上被分離開,極大地提升了網(wǎng)絡(luò)傳輸?shù)拈L連接、高并發(fā)能力和數(shù)據(jù)高吞吐能力。
在理論上,AIO的性能取決于業(yè)務(wù)處理和操作系統(tǒng)的底層網(wǎng)絡(luò)服務(wù)能力,理論上AIO模型不存在嚴(yán)重阻礙網(wǎng)絡(luò)傳輸?shù)钠款i。在現(xiàn)有的實(shí)際服務(wù)器和網(wǎng)絡(luò)環(huán)境下,AIO模型可以穩(wěn)定支持高達(dá)10萬的并發(fā)長連接。所以,AIO模型對(duì)于廣域分布式的光伏發(fā)電設(shè)備的數(shù)據(jù)傳輸,可以提供足夠的并發(fā)支撐,可以滿足現(xiàn)有光伏發(fā)電應(yīng)用的要求。
4 模型比較
通過前文對(duì)于各種網(wǎng)絡(luò)通信模型的介紹,本文對(duì)各種模型進(jìn)行匯總比較,以便于更加直觀地反映各種模型的能力,以及在光伏發(fā)電領(lǐng)域的應(yīng)用前景。各種模型的具體對(duì)比數(shù)據(jù)如表1所示。
(1)BIO :同步并阻塞,服務(wù)器實(shí)現(xiàn)模式為一個(gè)連接一個(gè)線程,即客戶端有連接請(qǐng)求時(shí)服務(wù)器端就需要啟動(dòng)一個(gè)線程進(jìn)行處理,如果這個(gè)連接不做任何事情,將會(huì)造成不必要的線程開銷,實(shí)際實(shí)現(xiàn)時(shí),可以采用線程池進(jìn)行優(yōu)化。
(2)NIO:同步非阻塞,服務(wù)器實(shí)現(xiàn)模式為一個(gè)請(qǐng)求一個(gè)線程,即客戶端發(fā)送的連接請(qǐng)求都會(huì)注冊(cè)到分離調(diào)度器上,分離調(diào)度器輪詢到連接有I/O請(qǐng)求時(shí)才啟動(dòng)一個(gè)線程進(jìn)行處理。
(3)AIO:異步非阻塞,服務(wù)器實(shí)現(xiàn)模式為一個(gè)有效請(qǐng)求一個(gè)線程,客戶端的網(wǎng)絡(luò)I/O請(qǐng)求由OS先完成數(shù)據(jù)操作,再通知服務(wù)器應(yīng)用去啟動(dòng)線程進(jìn)行處理。
據(jù)此,可以分析并得出BIO、NIO、AIO的優(yōu)缺點(diǎn),以及它們適用的應(yīng)用場景。
(1)BIO方式適用于連接數(shù)目比較小且固定的架構(gòu),這種方式對(duì)服務(wù)器資源要求比較高,并發(fā)局限于應(yīng)用中,但系統(tǒng)框架和實(shí)現(xiàn)直觀簡單,易理解。
(2)NIO方式適用于連接數(shù)多且連接比較短(輕操作)的架構(gòu),并發(fā)局限于應(yīng)用中,結(jié)構(gòu)相對(duì)與BIO比較復(fù)雜。
(3)AIO方式使用于連接數(shù)目多且連接比較長(重操作)的架構(gòu),充分調(diào)用操作系統(tǒng)參與并發(fā)操作,結(jié)構(gòu)相比于NIO更加復(fù)雜。
基于異步非阻塞通信(AIO)模型構(gòu)建的數(shù)據(jù)通信服務(wù),已經(jīng)被應(yīng)用于山東某地的光伏發(fā)電項(xiàng)目中,從結(jié)構(gòu)上對(duì)光伏發(fā)電管理的數(shù)據(jù)拓?fù)溥M(jìn)行了改進(jìn)和優(yōu)化,提升了對(duì)于發(fā)電終端的管理能力,提高了數(shù)據(jù)傳輸和通信的性能上限。改造前后,該項(xiàng)目的設(shè)備和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖4所示。
從改造前后的對(duì)比可以看出,借助AIO的高并發(fā)高吞吐性能優(yōu)勢(shì),在通信拓?fù)渲泄?jié)省了轉(zhuǎn)發(fā)設(shè)備,精簡了部署的拓?fù)浣Y(jié)構(gòu);在數(shù)據(jù)通信中由于更加簡化的架構(gòu),減小了通信異常發(fā)生的幾率;對(duì)于項(xiàng)目本身,降低了實(shí)施的設(shè)備成本,并且提高了系統(tǒng)的可維護(hù)性。
5 結(jié)論
本文面向光伏發(fā)電領(lǐng)域的發(fā)電設(shè)備數(shù)據(jù)通信需要,針對(duì)其分布廣、離散度高的特點(diǎn),分析現(xiàn)有的典型網(wǎng)絡(luò)通信結(jié)構(gòu),確立了異步非阻塞模型在光伏發(fā)電數(shù)據(jù)傳輸中,可以提供更加強(qiáng)大的基礎(chǔ)網(wǎng)絡(luò)服務(wù)能力,可以很好地支撐相對(duì)廣域范圍內(nèi)的大量光伏發(fā)電設(shè)備的高并發(fā)、高吞吐數(shù)據(jù)傳輸要求,可以作為光伏發(fā)電信息化管理服務(wù)的基礎(chǔ)傳輸解決方案,并提供高可靠的數(shù)據(jù)傳輸保障,可以作為光伏發(fā)電的智慧化和智能化建設(shè)的網(wǎng)絡(luò)框架基礎(chǔ)。
參考文獻(xiàn)
[1] 王偉平,楊思勤. 基于NIO的高并發(fā)網(wǎng)絡(luò)服務(wù)器模型的研究與設(shè)計(jì)[J]. 硅谷, 2009(17): 18-19, 35.
[2] 葉柏龍,劉蓬. Proactor模式的NIO框架的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2014(9): 110-113.
[3] LIBMAN A, GILBOURD V, 羅小平. 兩種高性能I/O設(shè)計(jì)模式的比較[J]. 程序員, 2007(4): 108-111.
[4] 喬平安 , 顏景善 ,周敏. 基于Linux系統(tǒng)的構(gòu)建高性能服務(wù)器的研究[J]. 計(jì)算機(jī)與數(shù)字工程, 2016, 44(4): 653-657.
[5] 李璞, 張玲, 胡術(shù), 等. 多線程環(huán)境下Reactor模式的研究與實(shí)現(xiàn)[J]. 網(wǎng)絡(luò)新媒體技術(shù), 2017(2): 52-57.
[6] 劉蓬. NIO高性能框架的研究與應(yīng)用[D]. 長沙: 湖南大學(xué), 2013.
作者信息:
魏曉蔚,繩 潔,岳玉先,汝銳銳
(國網(wǎng)山東省電力公司聊城供電公司,山東 聊城 252000)