蘇一博 臧晶 韓東奇
摘 ? 要:本文主要針對DDS、Socket和Redis數據通信中間件來進行研究,對這三種常用的數據通信中間件進行分析,并應用在待設計的通用仿真系統上進行比較,最后選取出更合適本系統的數據通信中間件,并進行仿真測試。
關鍵詞:DDS ?Socket ?Redis
中圖分類號:TN919 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼:A ? ? ? ? ? ? ? ? ? ? ? ?文章編號:1674-098X(2019)09(b)-0142-02
數據通信中間件是用來解決分布式計算機系統中數據之間的通信問題的技術。本文對三種數據通信中間件進行分析、比較,從而選取出適合本通用仿真系統的通信方式,并進行仿真結果測試。
1 ?數據分發服務DDS
標準DDS,提供了基于多樣化數據的發布訂閱模型[1],可以進行實時發布,也可以針對自身需要進行及時訂閱。DDS標準可以切實保障數據傳輸過程中的可靠性,并切實解決相關冗余性問題。故此,其廣泛應用于多樣化高端領域。
2 ?Socket數據通信中間件
Socket可以支持TCP/IP網絡通信[2],也提供多樣化服務。
Socket主要提供數據報式Socket和流式Socket兩種通信機制。(1)數據報式Socket主要通過UDP協議實現通信。UDP協議因可靠性低,面向無連接,不具備差錯恢復等多樣化功能,只能針對相對較少的數據進行日常傳輸工作;(2)流式Socke主要通過TCP協議實現通信。TCP協議具備相對較高的可靠性,可以實現面向連接,具備差錯恢復等多樣化功能,比較適用于傳輸相對較多的數據。
3 ?Redis數據通信中間件
Redis基于內存實現,能夠切實提高用戶的實際訪問速率[3],提供兩種通信方式,即:(1)Redis數據庫通信方式,以鍵值對的形式存儲所有的仿真執行參數、仿真模型以及一些仿真控制參數等實現通信。(2)Redis頻道功能提供了基于訂閱發布的通信模式。
4 ?待設計數據通信中間件的某通用仿真系統介紹
待設計通用仿真系統提供仿真分布式部署與管理功能,以及仿真執行、暫停、步進、停止、與修改參量等功能。該系統由仿真總控程序、仿真執行程序、和各仿真模型組成,如圖1所示,分布式仿真的實現通過部署在不同仿真計算機上的仿真執行程序及運行在其上的仿真模型共同完成,仿真執行程序之間通過標準數據通信中間件通信,仿真流程由仿真總控程序協同控制。
5 ?三種數據通信中間件的比較
分別將DDS、Socket和Redis三種數據通信中間件運用到待設計的通用仿真系統當中,對三種數據通信中間件進行比較:
(1)使用DDS通信時,由于DDS的源代碼是非開源的,并且DDS的環境配置較為復雜,相比之下不易于系統的研發工作。
(2)Socket方式可以保證高效的、順序的數據傳輸。如果數據沒有傳送到,則TCP套接口返回一個出錯狀態條件。但是TCP在發送數據時必須創建并保持一個TCP服務,這個服務給TCP通信進程增加了開銷,降低了TCP的通信速度。
(3)Redis可以長時間的保存數據在磁盤中,并且支持數據備份,Redis具有快速和持久化的特征,因為數據存在內存之中,因而傳輸速度較快,重啟的時候可以再次加載進行使用,支持豐富的數據類型,并且它作為消息中間件可以實現訂閱/發布消息的功能。
綜上所述,本文設計的通用仿真系統更適合采用Redis作為數據通信中間件來實現各分布式模塊之間的數據通信功能。
6 ?仿真測試
將本文設計的通用仿真系統利用Redis作為底層通信網絡來實現分布式各系統的數據傳輸與交互,操作過程如下:
使用Redis作為數據通信中間件,測試程序啟動方式為分別啟動仿真總控程序、仿真執行程序、tmpDB程序以及tmpZK程序。各個程序的運行過程如圖所示。其中,圖2所示為啟動tmpZK程序,啟動仿真;圖3為啟動仿真執行程序,解析分布式部署信息和仿真模型信息,啟動成功后向總控程序發送反饋信息。圖4所示為總控程序在仿真執行過程中的狀態信息。圖5所示為tmpDB程序在仿真的過程中,存儲仿真結果數據。圖6所示為仿真測試結果。
通過對仿真過程以及仿真結果圖的分析,可以得出,通過Redis作為數據通信中間件,在待設計的通用仿真系統上進行仿真數據的傳輸,是可行且有效的,能夠實現仿真數據在各分布式模塊的數據交互。
7 ?結語
數據通信中間件逐漸豐富與完善,從而能夠解決計算機中的數據傳輸與交互的問題。本文分析比較了DDS、Socket以及Redis三種數據通信中間件,并選擇Redis作為數據通信中間件來實現在待設計的通用仿真系統中各分布式模塊間的通信。通過仿真測試,驗證了Redis作為數據通信中間件在本文設計的通用仿真系統中的有效性。
參考文獻
[1] 謝陽杰,吳家鑄.數據分發服務DDS的研究[A].全國第19屆計算機技術與應用學術會議[C].合肥,2008:38-43.
[2] 王曉鵬.TCP/IP下的Socket及Winsock通信機制[J].航空計算技術,2004(2):12-16.
[3] 郎泓鈺,任永功.基于Redis內存數據庫的快速查找算法[J].計算機應用與軟件,2016(5):40-43,52.