劉 碩 莫文濤 劉陸光 張蕊峰 肖 爽
(國家核電技術(shù)有限公司北京軟件技術(shù)中心 北京 102209) (國家能源核電軟件重點(diǎn)實驗室 北京 102209)
?
面向核電分析軟件耦合計算的實時數(shù)據(jù)庫服務(wù)平臺的設(shè)計與實現(xiàn)
劉碩莫文濤劉陸光張蕊峰肖爽
(國家核電技術(shù)有限公司北京軟件技術(shù)中心北京 102209) (國家能源核電軟件重點(diǎn)實驗室北京 102209)
針對核電分析軟件耦合計算過程中遇到的數(shù)據(jù)交換效率低下和數(shù)據(jù)格式不統(tǒng)一等技術(shù)難點(diǎn),提出一種利用網(wǎng)絡(luò)通信和內(nèi)存存儲技術(shù),將實時數(shù)據(jù)庫作為數(shù)據(jù)交換中心,并設(shè)計實現(xiàn)統(tǒng)一的訪問接口,應(yīng)用于多個計算程序之間耦合計算過程的解決方案,從而實現(xiàn)了計算程序之間的高速數(shù)據(jù)交互及簡單通用的數(shù)據(jù)庫訪問接口。該成果目前已經(jīng)應(yīng)用于核電廠全范圍仿真環(huán)境中,為多個仿真計算程序提供數(shù)據(jù)共享服務(wù),其高效性和通用性完全滿足仿真環(huán)境的性能和功能需求。同時,其可擴(kuò)展的特性也支持在不同編程語言開發(fā)的計算程序耦合過程中進(jìn)行應(yīng)用。
實時數(shù)據(jù)庫耦合計算高速存儲
目前,核電分析軟件自主化正在我國穩(wěn)步的推進(jìn),但是一些功能模塊的計算分析程序仍然需要引用國外已有的成熟軟件進(jìn)行計算。例如核電廠仿真程序,在模擬核電廠運(yùn)行環(huán)境的時候,需要根據(jù)一定的時間間隔,實時地控制多個計算程序進(jìn)行計算,同時在每個時間間隔的同步點(diǎn)上,會有大量的數(shù)據(jù)進(jìn)行交互。為了保證運(yùn)行仿真環(huán)境的實時性,必須要求數(shù)據(jù)交換效率非常高,原有的以文件存儲形式作為數(shù)據(jù)交換的手段很難滿足需求。因此如何控制這類計算程序的運(yùn)行和實現(xiàn)計算程序之間的數(shù)據(jù)共享,成為了核電分析軟件開發(fā)人員必須要面對的問題。
針對上述核電分析軟件開發(fā)中所面臨的問題,需要找到一個可行的解決方法,從而使各個計算程序得以有效的控制和數(shù)據(jù)資源共享。
1.1Fortran語言的局限性
核電分析軟件一般采用Fortran語言進(jìn)行軟件開發(fā),原因在于Fortran語言具備強(qiáng)大的計算能力,它可以解決很多數(shù)值問題和非數(shù)值問題。因此,在數(shù)值計算、科學(xué)和工程技術(shù)領(lǐng)域,具有強(qiáng)大的優(yōu)勢。但是,由于Fortran語言本身的局限性,并不支持面向網(wǎng)絡(luò)通信的API接口,無法通過消息機(jī)制傳遞數(shù)據(jù)信息。
1.2計算流程復(fù)雜
核電分析軟件與一般應(yīng)用軟件存在著本質(zhì)區(qū)別,它是通過建立數(shù)學(xué)模型和數(shù)學(xué)方程表達(dá)式進(jìn)行方程式的數(shù)值求解。針對不同的求解模塊采用多種數(shù)學(xué)模型進(jìn)行建模,通過求解多元高次方程得到計算結(jié)果,其中還包括迭代等計算過程,使得這類軟件具有求解多種數(shù)學(xué)模型的能力。在計算過程中,每次迭代計算之前都需要對計算內(nèi)核中的計算變量進(jìn)行初始化。這些變量的數(shù)值一般來自用戶預(yù)先的設(shè)置、其他計算程序的計算結(jié)果或者計算程序上一次迭代的計算結(jié)果。特別是對于其他計算程序的計算結(jié)果,往往很難將數(shù)據(jù)引入計算內(nèi)核中。
1.3數(shù)據(jù)交換效率低下
核電分析軟件耦合計算的交互方式通常使用文本文件或二進(jìn)制文件進(jìn)行數(shù)據(jù)交互,但這種交互方式需要進(jìn)行耦合計算的程序具有數(shù)據(jù)輸出和數(shù)據(jù)解析的業(yè)務(wù)功能。這就要求該類程序在交互的過程中需要遵守統(tǒng)一的數(shù)據(jù)格式約定。同時,在數(shù)據(jù)讀寫過程中會占用大量的時間和存儲空間,交互效率非常低下。
2.1架構(gòu)設(shè)計
實時數(shù)據(jù)庫是一種服務(wù)程序,主要由服務(wù)平臺和通信函數(shù)類庫兩部分組成,如圖1所示。服務(wù)平臺主要負(fù)責(zé)接收計算程序發(fā)送的請求信息。然后,對請求信息進(jìn)行解析并創(chuàng)建線程單獨(dú)完成指派的任務(wù),包括對內(nèi)存數(shù)據(jù)資源進(jìn)行數(shù)據(jù)的增、刪、改、查以及檢查等操作。最終,將操作結(jié)果信息進(jìn)行響應(yīng)反饋至計算程序。通信函數(shù)類庫主要負(fù)責(zé)為計算程序提供訪問服務(wù)平臺的接口,將計算程序執(zhí)行過程中的實時數(shù)據(jù)封裝打包,并發(fā)送至服務(wù)平臺[1]。
圖1 系統(tǒng)架構(gòu)示意圖
2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計
實時數(shù)據(jù)庫采用了“命名數(shù)據(jù)”的方案,即數(shù)據(jù)庫中每個記錄點(diǎn)都有一個全局唯一的名稱以及相關(guān)的數(shù)據(jù)信息,如表1所示。數(shù)據(jù)處理模塊根據(jù)記錄點(diǎn)名稱找到該數(shù)據(jù)所有的對應(yīng)地址,并執(zhí)行相應(yīng)的訪問操作(讀或?qū)?。為了提高訪問效率,記錄點(diǎn)名稱與數(shù)據(jù)地址的映射關(guān)系采用Hash表進(jìn)行保存,并通過不同的前綴進(jìn)行區(qū)分。通常計算程序發(fā)送的請求信息只會更新記錄點(diǎn)的實時值,而記錄點(diǎn)的其他數(shù)據(jù)信息則由服務(wù)平臺進(jìn)行更新。
表1 實時數(shù)據(jù)庫命名數(shù)據(jù)列表
2.3服務(wù)平臺設(shè)計
服務(wù)平臺作為實時數(shù)據(jù)庫的核心引擎,負(fù)責(zé)計算程序發(fā)送的請求信息的監(jiān)聽、處理和響應(yīng)。服務(wù)平臺包括連接監(jiān)聽、連接管理、消息處理、任務(wù)處理、數(shù)據(jù)處理和變量注冊等功能模塊。實時數(shù)據(jù)庫的工作流程如圖2所示。
圖2 實時數(shù)據(jù)庫工作流程示意圖
在數(shù)據(jù)存儲方式方面,該服務(wù)平臺采用內(nèi)存作為存儲介質(zhì),以BYTE數(shù)組的方式向內(nèi)存中連續(xù)的存儲一組數(shù)據(jù)。同時,利用HASHTABLE存儲某一組數(shù)據(jù)的索引和長度。如圖3所示,采用上述存儲方式的原因是,一般的數(shù)組存儲方式是將數(shù)據(jù)逐個存儲到數(shù)組開辟的內(nèi)存空間中,這種方式雖然靈活、快捷,但是到達(dá)毫秒級數(shù)據(jù)訪問時,就無法滿足性能需求;而采用BYTE數(shù)組存儲方式,可以使用HASHTABLE快速查找需要更新的數(shù)據(jù)索引,然后一次性訪問該索引所對應(yīng)的數(shù)據(jù)信息。假設(shè)我們要更新要素A到要素F這6個值,在使用一般數(shù)組存儲的時候,需要根據(jù)索引更新6次。但是,在使用BYTE數(shù)組方式時,首先定義一個要更新的數(shù)據(jù)列表并取得索引編號,然后根據(jù)索引更新這6個數(shù)據(jù)對應(yīng)的數(shù)值。當(dāng)同一時刻數(shù)據(jù)訪問量達(dá)到數(shù)以萬次時,所述方式基本上沒有延遲。如果是非相鄰的情況,則需要更新若干次,比如更新數(shù)據(jù)A、數(shù)據(jù)B、數(shù)據(jù)E、數(shù)據(jù)F,則需要更新兩次,因為AB是相鄰的,EF是相鄰的,但是他們在內(nèi)存中的存儲位置并不相鄰。
圖3 BYTE數(shù)組存儲方式示意圖
2.4通信函數(shù)類庫設(shè)計
通信函數(shù)類庫為計算程序提供了訪問服務(wù)平臺的接口,如表2所示。
表2 通信函數(shù)類庫接口定義表
續(xù)表2
3.1服務(wù)平臺
服務(wù)平臺使用C#語言實現(xiàn),運(yùn)行在.net Framework框架上。利用Socket網(wǎng)絡(luò)編程、多線程、XML解析等技術(shù),將計算程序發(fā)送的請求信息經(jīng)過收包、組包、解析消息、任務(wù)判定、任務(wù)創(chuàng)建、任務(wù)執(zhí)行等一系列流程后,最終將結(jié)果反饋至計算程序[2-6]。
該平臺的內(nèi)部存在C#類型的Dictionary
在一次同步計算的過程中,計算程序的每一次同步周期都會通過通信函數(shù)類庫提供的接口訪問實時數(shù)據(jù)庫服務(wù)平臺,進(jìn)行一次數(shù)據(jù)交換,并且利用鎖的機(jī)制,控制訪問數(shù)據(jù)庫的線程不允許同時進(jìn)行讀寫操作[8]。既實現(xiàn)了數(shù)據(jù)的共享,也保證了數(shù)據(jù)的一致性,增強(qiáng)了計算程序耦合計算的執(zhí)行效率。
在運(yùn)行調(diào)度方面,利用多線程技術(shù)實現(xiàn)任務(wù)調(diào)度管理模塊。當(dāng)服務(wù)端收到客戶端的任務(wù)指令時,啟動獨(dú)立的線程向任務(wù)管理隊列中添加任務(wù),并在運(yùn)行開始時,自動讀取任務(wù)線程,控制固定數(shù)量的空余線程,并發(fā)式地從任務(wù)隊列中讀取任務(wù)進(jìn)行處理。所有任務(wù)都繼承自一個任務(wù)基類,根據(jù)類型來區(qū)分不同任務(wù)的流程,使程序盡量的松耦合,方便以后的擴(kuò)展及維護(hù)。
3.2通信函數(shù)類庫
通信函數(shù)類庫使用C++語言實現(xiàn),因此,該類庫可以和絕大多數(shù)開發(fā)語言進(jìn)行混合編程,使那些使用不具備通信機(jī)制開發(fā)語言的程序可以很容易地與實時數(shù)據(jù)庫服務(wù)平臺進(jìn)行數(shù)據(jù)傳遞,具有很好的兼容性。
通常,在該類庫使用過程中會遵循如圖4所示的流程。
圖4 計算程序運(yùn)行流程
(1) 讀取連接配置文件,并發(fā)送連接請求;
(2) 當(dāng)連接成功后,發(fā)送變量注冊請求,將需要進(jìn)行數(shù)據(jù)共享的變量列表通知實時數(shù)據(jù)庫服務(wù)平臺;
(3) 初始化計算內(nèi)核啟動參數(shù);
(4) 通知實時數(shù)據(jù)庫服務(wù)平臺,初始化成功,等待任務(wù)指令;
(5) 當(dāng)接收到任務(wù)指令后,根據(jù)任務(wù)指令類型,執(zhí)行不同的計算功能模塊;
(6) 向?qū)崟r數(shù)據(jù)庫服務(wù)平臺發(fā)送獲取變量數(shù)值請求,并等待反饋結(jié)果;
(7) 執(zhí)行任務(wù)指令,比如運(yùn)行、停止、暫停、重啟動等;
(8) 向?qū)崟r數(shù)據(jù)庫服務(wù)平臺發(fā)送更新變量數(shù)值請求,將計算完成的結(jié)果反饋至實時數(shù)據(jù)庫服務(wù)平臺;
(9) 完成更新后,會繼續(xù)等待下一次任務(wù)指令。
如圖5所示,實時數(shù)據(jù)庫服務(wù)平臺作為核電廠全范圍仿真環(huán)境的數(shù)據(jù)中心,主要負(fù)責(zé)計算程序耦合計算過程中的數(shù)據(jù)交互和數(shù)據(jù)存儲。調(diào)度控制服務(wù)所管理的模擬計算程序在進(jìn)行耦合計算的過程中,每次啟動計算程序前,都會從實時數(shù)據(jù)庫中獲得本次計算周期所需要的參數(shù)集合,并進(jìn)行參數(shù)初始化。當(dāng)經(jīng)過計算流程后,到達(dá)下一個同步節(jié)點(diǎn)時,就會將本次計算周期所計算出的結(jié)果參數(shù)更新回實時數(shù)據(jù)庫,最后等待下一次執(zhí)行指令。在這個過程中,同一時刻會產(chǎn)生大約20個模擬計算程序并發(fā)訪問,總共約5萬個數(shù)值信息,為達(dá)到仿真環(huán)境的實時性,實時數(shù)據(jù)庫可以在50毫秒內(nèi)完成所有請求的處理。
圖5 核電廠全范圍仿真環(huán)境
本文介紹了一種實時數(shù)據(jù)庫服務(wù)平臺的設(shè)計與實現(xiàn),并針對核電分析軟件中的耦合計算過程進(jìn)行了分析,提出一種可行的解決方案。通過提供共享數(shù)據(jù)服務(wù)和訪問接口的方式,將計算程序執(zhí)行過程中產(chǎn)生的中間結(jié)果,通過消息傳遞至實時數(shù)據(jù)庫服務(wù)平臺上。在實時性方面,其高速存儲的特性明顯優(yōu)于其他的數(shù)據(jù)存儲方式,有效地提高了計算程序耦合計算過程中數(shù)據(jù)交互效率。在通用性方面,通信函數(shù)類庫也提供了統(tǒng)一的接口規(guī)范,使得不同的仿真計算程序可以很容易地集成到仿真環(huán)境中,增強(qiáng)了仿真環(huán)境模擬計算的可擴(kuò)展性。
[1] 李德泉,何文春,阮志宇,等.氣象實時數(shù)據(jù)庫服務(wù)監(jiān)控系統(tǒng)設(shè)計與實現(xiàn)[J].成都信息工程學(xué)院學(xué)報,2012,27(2):147-152.
[2] 納永良.大型實時數(shù)據(jù)庫關(guān)鍵技術(shù)及應(yīng)用研究[D].北京:北京化工大學(xué),2010.
[3] 徐葉軍,謝曉鳴,俞成海.基于Socket的異地數(shù)據(jù)復(fù)制實現(xiàn)[J].工業(yè)控制計算機(jī),2013,26(3):96-98.
[4] 李揚(yáng),耿昌宇,張麗芬.基于Socket通訊模式下的跨平臺數(shù)據(jù)同步[J].北京理工大學(xué)學(xué)報,2002,22(1):81-84.
[5] 黃顯信.利用Socket通信進(jìn)程實現(xiàn)不同數(shù)據(jù)庫間數(shù)據(jù)的同步[J].計算機(jī)與數(shù)字工程,2003,31(5):28-30.
[6] 李光明.應(yīng)用Socket實現(xiàn)網(wǎng)絡(luò)通信[J].煤炭技術(shù),2012,31(8):156-157.
[7] 金舒,戴宏斌,賈志敏.面向?qū)ο蟮母咝阅軐崟r數(shù)據(jù)庫ChRDB[J].電力自動化設(shè)備,2009,29(12):88-93.
[8] 白天,李國徽,劉云生.一種實時數(shù)據(jù)庫服務(wù)質(zhì)量管理策略[J].湖南大學(xué)學(xué)報:自然科學(xué)版,2011,38(11):88-92.
[9] 徐慧.實時數(shù)據(jù)庫中數(shù)據(jù)壓縮算法的研究[D].浙江:浙江大學(xué),2006.
DESIGN AND IMPLEMENTATION OF REAL-TIME DATABASE SERVICE PLATFORM FOR COUPLING CALCULATION OF NUCLEAR POWER ANALYSIS SOFTWARE
Liu ShuoMo WentaoLiu LuguangZhang RuifengXiao Shuang
(StateNuclearPowerSoftwareDevelopmentCenter,Beijing102209,China) (NationalEnergyKeyLaboratoryofNuclearPowerSoftware,Beijing102209,China)
For technical difficulties encountered in coupling calculation of nuclear power analysis software such as low data exchange efficiency and not uniform in data formats, the article presents a solution, it makes use of network communication and memory storage technology, takes the real-time database as data exchange centre, and designs and implements the unified access interface, and has been applied in the coupling calculation process between a plurality of calculation programs, so that achieves the high-speed data interaction between calculation programs and simple and universal database access interfaces. This achievement has been used in the full scope simulation environment of nuclear power plants. It provides data sharing services for multiple simulation programs with adequate efficiency and versatility that fully meet the performance and functional requirements of the simulation environment. At the same time, its scalable feature makes it possible to support the applications in coupling calculation processes developed with different programming languages.
Real-time databaseCoupling calculationHigh-speed storage
2014-12-15。國家重大專項項目(2011ZX06004-024)。劉碩,工程師,主研領(lǐng)域:核電軟件開發(fā)。莫文濤,高工。劉陸光,助理工程師。張蕊峰,助理工程師。肖爽,助理工程師。
TP311
A
10.3969/j.issn.1000-386x.2016.08.025