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