劉 碩 莫文濤 劉陸光 張蕊峰 肖 爽
(國家核電技術有限公司北京軟件技術中心 北京 102209) (國家能源核電軟件重點實驗室 北京 102209)
?
面向核電分析軟件耦合計算的實時數據庫服務平臺的設計與實現
劉碩莫文濤劉陸光張蕊峰肖爽
(國家核電技術有限公司北京軟件技術中心北京 102209) (國家能源核電軟件重點實驗室北京 102209)
針對核電分析軟件耦合計算過程中遇到的數據交換效率低下和數據格式不統一等技術難點,提出一種利用網絡通信和內存存儲技術,將實時數據庫作為數據交換中心,并設計實現統一的訪問接口,應用于多個計算程序之間耦合計算過程的解決方案,從而實現了計算程序之間的高速數據交互及簡單通用的數據庫訪問接口。該成果目前已經應用于核電廠全范圍仿真環境中,為多個仿真計算程序提供數據共享服務,其高效性和通用性完全滿足仿真環境的性能和功能需求。同時,其可擴展的特性也支持在不同編程語言開發的計算程序耦合過程中進行應用。
實時數據庫耦合計算高速存儲
目前,核電分析軟件自主化正在我國穩步的推進,但是一些功能模塊的計算分析程序仍然需要引用國外已有的成熟軟件進行計算。例如核電廠仿真程序,在模擬核電廠運行環境的時候,需要根據一定的時間間隔,實時地控制多個計算程序進行計算,同時在每個時間間隔的同步點上,會有大量的數據進行交互。為了保證運行仿真環境的實時性,必須要求數據交換效率非常高,原有的以文件存儲形式作為數據交換的手段很難滿足需求。因此如何控制這類計算程序的運行和實現計算程序之間的數據共享,成為了核電分析軟件開發人員必須要面對的問題。
針對上述核電分析軟件開發中所面臨的問題,需要找到一個可行的解決方法,從而使各個計算程序得以有效的控制和數據資源共享。
1.1Fortran語言的局限性
核電分析軟件一般采用Fortran語言進行軟件開發,原因在于Fortran語言具備強大的計算能力,它可以解決很多數值問題和非數值問題。因此,在數值計算、科學和工程技術領域,具有強大的優勢。但是,由于Fortran語言本身的局限性,并不支持面向網絡通信的API接口,無法通過消息機制傳遞數據信息。
1.2計算流程復雜
核電分析軟件與一般應用軟件存在著本質區別,它是通過建立數學模型和數學方程表達式進行方程式的數值求解。針對不同的求解模塊采用多種數學模型進行建模,通過求解多元高次方程得到計算結果,其中還包括迭代等計算過程,使得這類軟件具有求解多種數學模型的能力。在計算過程中,每次迭代計算之前都需要對計算內核中的計算變量進行初始化。這些變量的數值一般來自用戶預先的設置、其他計算程序的計算結果或者計算程序上一次迭代的計算結果。特別是對于其他計算程序的計算結果,往往很難將數據引入計算內核中。
1.3數據交換效率低下
核電分析軟件耦合計算的交互方式通常使用文本文件或二進制文件進行數據交互,但這種交互方式需要進行耦合計算的程序具有數據輸出和數據解析的業務功能。這就要求該類程序在交互的過程中需要遵守統一的數據格式約定。同時,在數據讀寫過程中會占用大量的時間和存儲空間,交互效率非常低下。
2.1架構設計
實時數據庫是一種服務程序,主要由服務平臺和通信函數類庫兩部分組成,如圖1所示。服務平臺主要負責接收計算程序發送的請求信息。然后,對請求信息進行解析并創建線程單獨完成指派的任務,包括對內存數據資源進行數據的增、刪、改、查以及檢查等操作。最終,將操作結果信息進行響應反饋至計算程序。通信函數類庫主要負責為計算程序提供訪問服務平臺的接口,將計算程序執行過程中的實時數據封裝打包,并發送至服務平臺[1]。

圖1 系統架構示意圖
2.2數據結構設計
實時數據庫采用了“命名數據”的方案,即數據庫中每個記錄點都有一個全局唯一的名稱以及相關的數據信息,如表1所示。數據處理模塊根據記錄點名稱找到該數據所有的對應地址,并執行相應的訪問操作(讀或寫)。為了提高訪問效率,記錄點名稱與數據地址的映射關系采用Hash表進行保存,并通過不同的前綴進行區分。通常計算程序發送的請求信息只會更新記錄點的實時值,而記錄點的其他數據信息則由服務平臺進行更新。

表1 實時數據庫命名數據列表
2.3服務平臺設計
服務平臺作為實時數據庫的核心引擎,負責計算程序發送的請求信息的監聽、處理和響應。服務平臺包括連接監聽、連接管理、消息處理、任務處理、數據處理和變量注冊等功能模塊。實時數據庫的工作流程如圖2所示。

圖2 實時數據庫工作流程示意圖
在數據存儲方式方面,該服務平臺采用內存作為存儲介質,以BYTE數組的方式向內存中連續的存儲一組數據。同時,利用HASHTABLE存儲某一組數據的索引和長度。如圖3所示,采用上述存儲方式的原因是,一般的數組存儲方式是將數據逐個存儲到數組開辟的內存空間中,這種方式雖然靈活、快捷,但是到達毫秒級數據訪問時,就無法滿足性能需求;而采用BYTE數組存儲方式,可以使用HASHTABLE快速查找需要更新的數據索引,然后一次性訪問該索引所對應的數據信息。假設我們要更新要素A到要素F這6個值,在使用一般數組存儲的時候,需要根據索引更新6次。但是,在使用BYTE數組方式時,首先定義一個要更新的數據列表并取得索引編號,然后根據索引更新這6個數據對應的數值。當同一時刻數據訪問量達到數以萬次時,所述方式基本上沒有延遲。如果是非相鄰的情況,則需要更新若干次,比如更新數據A、數據B、數據E、數據F,則需要更新兩次,因為AB是相鄰的,EF是相鄰的,但是他們在內存中的存儲位置并不相鄰。

圖3 BYTE數組存儲方式示意圖
2.4通信函數類庫設計
通信函數類庫為計算程序提供了訪問服務平臺的接口,如表2所示。

表2 通信函數類庫接口定義表

續表2
3.1服務平臺
服務平臺使用C#語言實現,運行在.net Framework框架上。利用Socket網絡編程、多線程、XML解析等技術,將計算程序發送的請求信息經過收包、組包、解析消息、任務判定、任務創建、任務執行等一系列流程后,最終將結果反饋至計算程序[2-6]。
該平臺的內部存在C#類型的Dictionary
在一次同步計算的過程中,計算程序的每一次同步周期都會通過通信函數類庫提供的接口訪問實時數據庫服務平臺,進行一次數據交換,并且利用鎖的機制,控制訪問數據庫的線程不允許同時進行讀寫操作[8]。既實現了數據的共享,也保證了數據的一致性,增強了計算程序耦合計算的執行效率。
在運行調度方面,利用多線程技術實現任務調度管理模塊。當服務端收到客戶端的任務指令時,啟動獨立的線程向任務管理隊列中添加任務,并在運行開始時,自動讀取任務線程,控制固定數量的空余線程,并發式地從任務隊列中讀取任務進行處理。所有任務都繼承自一個任務基類,根據類型來區分不同任務的流程,使程序盡量的松耦合,方便以后的擴展及維護。
3.2通信函數類庫
通信函數類庫使用C++語言實現,因此,該類庫可以和絕大多數開發語言進行混合編程,使那些使用不具備通信機制開發語言的程序可以很容易地與實時數據庫服務平臺進行數據傳遞,具有很好的兼容性。
通常,在該類庫使用過程中會遵循如圖4所示的流程。

圖4 計算程序運行流程
(1) 讀取連接配置文件,并發送連接請求;
(2) 當連接成功后,發送變量注冊請求,將需要進行數據共享的變量列表通知實時數據庫服務平臺;
(3) 初始化計算內核啟動參數;
(4) 通知實時數據庫服務平臺,初始化成功,等待任務指令;
(5) 當接收到任務指令后,根據任務指令類型,執行不同的計算功能模塊;
(6) 向實時數據庫服務平臺發送獲取變量數值請求,并等待反饋結果;
(7) 執行任務指令,比如運行、停止、暫停、重啟動等;
(8) 向實時數據庫服務平臺發送更新變量數值請求,將計算完成的結果反饋至實時數據庫服務平臺;
(9) 完成更新后,會繼續等待下一次任務指令。
如圖5所示,實時數據庫服務平臺作為核電廠全范圍仿真環境的數據中心,主要負責計算程序耦合計算過程中的數據交互和數據存儲。調度控制服務所管理的模擬計算程序在進行耦合計算的過程中,每次啟動計算程序前,都會從實時數據庫中獲得本次計算周期所需要的參數集合,并進行參數初始化。當經過計算流程后,到達下一個同步節點時,就會將本次計算周期所計算出的結果參數更新回實時數據庫,最后等待下一次執行指令。在這個過程中,同一時刻會產生大約20個模擬計算程序并發訪問,總共約5萬個數值信息,為達到仿真環境的實時性,實時數據庫可以在50毫秒內完成所有請求的處理。

圖5 核電廠全范圍仿真環境
本文介紹了一種實時數據庫服務平臺的設計與實現,并針對核電分析軟件中的耦合計算過程進行了分析,提出一種可行的解決方案。通過提供共享數據服務和訪問接口的方式,將計算程序執行過程中產生的中間結果,通過消息傳遞至實時數據庫服務平臺上。在實時性方面,其高速存儲的特性明顯優于其他的數據存儲方式,有效地提高了計算程序耦合計算過程中數據交互效率。在通用性方面,通信函數類庫也提供了統一的接口規范,使得不同的仿真計算程序可以很容易地集成到仿真環境中,增強了仿真環境模擬計算的可擴展性。
[1] 李德泉,何文春,阮志宇,等.氣象實時數據庫服務監控系統設計與實現[J].成都信息工程學院學報,2012,27(2):147-152.
[2] 納永良.大型實時數據庫關鍵技術及應用研究[D].北京:北京化工大學,2010.
[3] 徐葉軍,謝曉鳴,俞成海.基于Socket的異地數據復制實現[J].工業控制計算機,2013,26(3):96-98.
[4] 李揚,耿昌宇,張麗芬.基于Socket通訊模式下的跨平臺數據同步[J].北京理工大學學報,2002,22(1):81-84.
[5] 黃顯信.利用Socket通信進程實現不同數據庫間數據的同步[J].計算機與數字工程,2003,31(5):28-30.
[6] 李光明.應用Socket實現網絡通信[J].煤炭技術,2012,31(8):156-157.
[7] 金舒,戴宏斌,賈志敏.面向對象的高性能實時數據庫ChRDB[J].電力自動化設備,2009,29(12):88-93.
[8] 白天,李國徽,劉云生.一種實時數據庫服務質量管理策略[J].湖南大學學報:自然科學版,2011,38(11):88-92.
[9] 徐慧.實時數據庫中數據壓縮算法的研究[D].浙江:浙江大學,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)。劉碩,工程師,主研領域:核電軟件開發。莫文濤,高工。劉陸光,助理工程師。張蕊峰,助理工程師。肖爽,助理工程師。
TP311
A
10.3969/j.issn.1000-386x.2016.08.025