石聰明,鄧 輝,戴 偉,衛(wèi)守林,王 鋒1,,4
(1. 昆明理工大學(xué)管理與經(jīng)濟(jì)學(xué)院,云南 昆明 650093;2. 廣州大學(xué)天體物理中心/物理與電子工程學(xué)院,廣東 廣州 510006;3. 昆明理工大學(xué)云南省計(jì)算機(jī)技術(shù)應(yīng)用重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650500;4. 中國(guó)科學(xué)院云南天文臺(tái),云南 昆明 650011)
由中國(guó)、澳大利亞、南非、英國(guó)等國(guó)家共同參與建設(shè)的平方千米陣列望遠(yuǎn)鏡是目前最大的天文實(shí)驗(yàn)裝置,具有前所未有的靈敏度、巡天速度和視場(chǎng)[1-3]。SKA望遠(yuǎn)鏡由分布在澳大利亞西部沙漠上的工作頻率為50~350 MHz的低頻螺旋對(duì)數(shù)天線和南非及南部非洲8個(gè)國(guó)家的工作頻率為350 MHz~15 GHz的高頻蝶形天線構(gòu)成,總接收面積達(dá)1平方千米[4-5]。SKA將產(chǎn)生超海量的觀測(cè)數(shù)據(jù),在SKA-1階段,每秒產(chǎn)生高達(dá)數(shù)十TB的原始數(shù)據(jù),需要長(zhǎng)期保存的科學(xué)數(shù)據(jù)每年新增50~300 PB;在SKA-2階段,每年新增的科學(xué)數(shù)據(jù)將達(dá)到SKA-1階段的100倍[3,6]。
為了應(yīng)對(duì)當(dāng)前面臨的預(yù)算和數(shù)據(jù)量處理的限制等相關(guān)問題,SKA提出建設(shè)區(qū)域數(shù)據(jù)中心,實(shí)現(xiàn)數(shù)據(jù)的異地存儲(chǔ)與歸檔,通過各國(guó)科學(xué)中心的建設(shè)推動(dòng)科學(xué)研究工作的方案。這一目標(biāo)的達(dá)成要求海量觀測(cè)數(shù)據(jù)能夠高速地從觀測(cè)地(南非和澳大利亞)的數(shù)據(jù)中心同步傳輸、存儲(chǔ)到區(qū)域數(shù)據(jù)中心,從當(dāng)前的技術(shù)水平來(lái)看,這一需求具有非常大的挑戰(zhàn)。
下一代歸檔存儲(chǔ)系統(tǒng)是當(dāng)前射電天文領(lǐng)域最為常用的一套成熟的觀測(cè)結(jié)果歸檔軟件,系統(tǒng)采用Python開發(fā),功能豐富,具有高度的移植性。NGAS設(shè)計(jì)之初是為了解決歐洲南方天文臺(tái)在20世紀(jì)末期面臨的每天新增55 GB觀測(cè)數(shù)據(jù)進(jìn)行高效且低成本的數(shù)據(jù)歸檔、處理、檢索及同步的問題[7]。在SKA先導(dǎo)默奇森寬場(chǎng)陣列(Murchison Widefield Array, MWA)中,NGAS被用于默奇森寬場(chǎng)陣列與美國(guó)麻省理工學(xué)院和新西蘭惠靈頓維多利亞大學(xué)[8]間的數(shù)據(jù)同步,也被歐洲南方天文臺(tái)用來(lái)歸檔管理產(chǎn)生的海量觀測(cè)數(shù)據(jù)及同步存儲(chǔ)到不同的站點(diǎn)[9-12];阿塔卡馬大型毫米波/亞毫米波陣列(ALMA)使用NGAS將收集的觀測(cè)數(shù)據(jù)同步到美國(guó)、日本和德國(guó)的區(qū)域數(shù)據(jù)中心[11-12]。
然而,在面對(duì)SKA這一類具有更高時(shí)效性要求的數(shù)據(jù)同步與歸檔需求時(shí),NGAS仍然面臨著一些問題。遠(yuǎn)程數(shù)據(jù)同步效率是其中一個(gè)重要方面,根本原因在于NGAS在同步傳輸數(shù)據(jù)的過程中使用基于HTTP的方式,由于HTTP協(xié)議封裝效率較低,導(dǎo)致整個(gè)數(shù)據(jù)傳輸性能較差。SKA-1的數(shù)據(jù)同步量相對(duì)較少,采用HTTP協(xié)議封裝可以滿足要求。隨著SKA-2的建設(shè),數(shù)據(jù)量呈指數(shù)增長(zhǎng),研究新的封裝方法,提高效率就成為一種必然。
由于當(dāng)前SKA正在設(shè)計(jì)評(píng)估階段,部分需求還沒有最終確定。因此,對(duì)于SKA數(shù)據(jù)歸檔和遠(yuǎn)程同步工作均在預(yù)研與測(cè)試階段,本文正是在這方面開展的基礎(chǔ)性工作。為提高遠(yuǎn)程數(shù)據(jù)同步性能,針對(duì)我國(guó)建設(shè)區(qū)域數(shù)據(jù)中心的需要,進(jìn)一步研究了基于ZeroMQ的多點(diǎn)觀測(cè)數(shù)據(jù)存儲(chǔ)與同步方法。
NGAS的核心是一個(gè)多線程并發(fā)HTTP服務(wù)器,NGAS通過關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)管理歸檔文件的元數(shù)據(jù)、訂閱者信息、磁盤信息等。NGAS[注]https://ngas.readthedocs.io/en/latest/index.html實(shí)現(xiàn)了STATUS,ONLINE,OFFLINE,ARCHIVE,SUBSCRIBE,UNSUBSCRIBE等20多個(gè)自定義命令,這些命令的主要功能是實(shí)現(xiàn)基本的數(shù)據(jù)歸檔與檢索、服務(wù)器端數(shù)據(jù)壓縮和過濾、自動(dòng)鏡像數(shù)據(jù)、磁盤跟蹤、離線數(shù)據(jù)傳輸、數(shù)據(jù)一致性校驗(yàn)、數(shù)據(jù)訂閱(數(shù)據(jù)存儲(chǔ)與同步)等功能。
NGAS的數(shù)據(jù)同步傳輸功能是通過NGAS的數(shù)據(jù)訂閱線程調(diào)度訂閱者對(duì)應(yīng)的數(shù)據(jù)發(fā)送線程,實(shí)現(xiàn)將數(shù)據(jù)從數(shù)據(jù)發(fā)布者同步傳輸給數(shù)據(jù)訂閱者。數(shù)據(jù)發(fā)送線程的流程如圖1。
圖1 NGAS數(shù)據(jù)發(fā)送線程執(zhí)行流程圖Fig.1 A flowchart of data delivery
NGAS數(shù)據(jù)發(fā)布方將一個(gè)數(shù)據(jù)文件傳輸給數(shù)據(jù)訂閱方需要經(jīng)歷如下過程:用HTTP協(xié)議封裝數(shù)據(jù)文件,將封裝好的數(shù)據(jù)文件發(fā)送出去,等待接收數(shù)據(jù)訂閱方響應(yīng)的成功存儲(chǔ)數(shù)據(jù)文件的消息,處理下一數(shù)據(jù)文件。NGAS在同步傳輸數(shù)據(jù)過程中需要數(shù)據(jù)發(fā)布方等待接收數(shù)據(jù)訂閱方反饋消息而導(dǎo)致整個(gè)數(shù)據(jù)傳輸性能較差,同時(shí)由于HTTP協(xié)議封裝效率較低,也導(dǎo)致整個(gè)數(shù)據(jù)傳輸性能較差。
針對(duì)NGAS中數(shù)據(jù)同步傳輸功能是基于HTTP實(shí)現(xiàn)的,本文提出一種基于零消息隊(duì)列(ZeroMQ[13])改進(jìn)NGAS中多點(diǎn)觀測(cè)數(shù)據(jù)存儲(chǔ)與同步的方法。該方法使用ZeroMQ中的PUB-SUB套接字組合實(shí)現(xiàn)高效快速的數(shù)據(jù)同步傳輸與存儲(chǔ)。然而,PUB-SUB套接字的組合存在這些問題[注]http://zguide.zeromq.org/page:all:(1)訂閱方崩潰導(dǎo)致訂閱數(shù)據(jù)丟失;(2)訂閱者取回消息很慢導(dǎo)致發(fā)布方的發(fā)布隊(duì)列溢出而造成數(shù)據(jù)丟失;(3)網(wǎng)絡(luò)超載導(dǎo)致數(shù)據(jù)丟失;(4)訂閱方加入太遲錯(cuò)失了發(fā)布方已經(jīng)發(fā)布的數(shù)據(jù)。
為了在改進(jìn)方法實(shí)現(xiàn)的系統(tǒng)中解決PUB-SUB套接字組合帶來(lái)的問題,加入近實(shí)時(shí)感知端口連接狀態(tài)的機(jī)制規(guī)避發(fā)布方在沒有訂閱方連接的情況下發(fā)布數(shù)據(jù),同時(shí)加入數(shù)據(jù)重發(fā)機(jī)制克服因?yàn)榫W(wǎng)絡(luò)超載、訂閱方崩潰等導(dǎo)致的數(shù)據(jù)丟失造成訂閱方無(wú)法完全同步數(shù)據(jù)的問題。為了使基于改進(jìn)方法實(shí)現(xiàn)的數(shù)據(jù)同步傳輸與存儲(chǔ)子系統(tǒng)能夠獨(dú)立于NGAS運(yùn)行,在子系統(tǒng)中加入了使用ZeroMQ中的DEALER與ROUTER實(shí)現(xiàn)的訂閱與退訂功能模塊。
基于改進(jìn)方法實(shí)現(xiàn)的系統(tǒng)主要包括如下子系統(tǒng)模塊:數(shù)據(jù)發(fā)布端服務(wù)器(Pub-Server)、數(shù)據(jù)訂閱端服務(wù)器(Sub-Server)、訂閱者服務(wù)器(Subscriber-Server)、訂閱者客服端(Subscriber-Client)。數(shù)據(jù)發(fā)布端服務(wù)器和數(shù)據(jù)訂閱端服務(wù)器負(fù)責(zé)數(shù)據(jù)發(fā)布方與訂閱方之間的數(shù)據(jù)同步傳輸與存儲(chǔ),如圖2;訂閱者服務(wù)器和訂閱者客服端負(fù)責(zé)發(fā)布方與訂閱方之間的消息訂閱與退訂,如圖3。
數(shù)據(jù)發(fā)布端服務(wù)器主要負(fù)責(zé)啟動(dòng)數(shù)據(jù)發(fā)布端、數(shù)據(jù)同步傳輸、存儲(chǔ)相關(guān)的守護(hù)線程,其執(zhí)行流程如圖4。數(shù)據(jù)發(fā)布端服務(wù)器主要包含如下功能模塊:?jiǎn)?dòng)訂閱者對(duì)應(yīng)的發(fā)布數(shù)據(jù)守護(hù)線程、啟動(dòng)接收反饋消息的守護(hù)線程、啟動(dòng)處理反饋消息的守護(hù)線程、啟動(dòng)更新積壓文件的守護(hù)線程、啟動(dòng)更新發(fā)布隊(duì)列的守護(hù)線程、啟動(dòng)處理新增訂閱者的守護(hù)線程、啟動(dòng)處理新增退訂者的守護(hù)線程。數(shù)據(jù)訂閱端服務(wù)器的功能與數(shù)據(jù)發(fā)布端服務(wù)器類似,只是處理對(duì)象不同。
數(shù)據(jù)發(fā)布端服務(wù)器與數(shù)據(jù)訂閱端服務(wù)器之間的數(shù)據(jù)同步傳輸與存儲(chǔ)中涉及兩種消息:Pub_msg和Sub_msg,如圖2。Pub_msg是數(shù)據(jù)發(fā)布方(Publisher)發(fā)布的消息,格式為SI_SP, PI_PP, BFR, BFD;Sub_msg是數(shù)據(jù)訂閱方(Subscriber)發(fā)布的已成功接收與存儲(chǔ)的反饋信息,格式為SI_SP, PI_PP, BFR。SI表示數(shù)據(jù)訂閱方的IP;SP表示數(shù)據(jù)訂閱方為某個(gè)數(shù)據(jù)發(fā)布方申請(qǐng)的用于發(fā)布反饋消息的固定端口;PI表示數(shù)據(jù)發(fā)布方的IP;PP表示數(shù)據(jù)發(fā)布方為某個(gè)數(shù)據(jù)訂閱方申請(qǐng)預(yù)留的用于發(fā)布數(shù)據(jù)的固定端口;BFR由文件名、文件ID、文件版本、文件類型組成;BFD表示BFR對(duì)應(yīng)的積壓文件數(shù)據(jù)。
當(dāng)數(shù)據(jù)發(fā)布端服務(wù)器上的近實(shí)時(shí)端口連接狀態(tài)守護(hù)線程能檢測(cè)到某個(gè)數(shù)據(jù)發(fā)布方的數(shù)據(jù)發(fā)布端口被數(shù)據(jù)訂閱方連接時(shí),觸發(fā)該數(shù)據(jù)發(fā)布方對(duì)應(yīng)的數(shù)據(jù)發(fā)布線程開始產(chǎn)生并發(fā)布Pub_msg;否則觸發(fā)停止數(shù)據(jù)發(fā)布線程。同時(shí),數(shù)據(jù)重發(fā)機(jī)制會(huì)在某個(gè)數(shù)據(jù)發(fā)布方發(fā)布某個(gè)數(shù)據(jù)文件超過一段時(shí)間仍未收到數(shù)據(jù)訂閱方發(fā)布的已成功接收和存儲(chǔ)的反饋信息時(shí),將讓數(shù)據(jù)發(fā)布方重新向數(shù)據(jù)訂閱方發(fā)布該數(shù)據(jù)文件。
訂閱者服務(wù)器與訂閱者客服端之間的異步通信模式如圖3。訂閱者服務(wù)器負(fù)責(zé)接收處理訂閱消息(Sub-Msg)和退訂消息(Unsub-Msg),并將訂閱成功消息(Sub-Msg-S)、訂閱失敗消息(Sub-Msg-F)或退訂成功消息(Unsub-Msg-S)回復(fù)給對(duì)應(yīng)的請(qǐng)求者,同時(shí)更新數(shù)據(jù)庫(kù)中的相應(yīng)訂閱者記錄。訂閱者客服端負(fù)責(zé)向訂閱者服務(wù)器發(fā)送訂閱消息和退訂消息,根據(jù)接收到的響應(yīng)消息更新數(shù)據(jù)庫(kù)中的相應(yīng)發(fā)布者記錄。其中訂閱消息、退訂消息、訂閱成功消息、訂閱失敗消息、退訂成功消息這5種消息的格式分別為:S_SI_SP_Datetime,U_SI_SP,SS_SI_SP_PI_PP,SF_SI_SP,US_SI_SP。同時(shí),在訂閱者客服端加入消息重發(fā)機(jī)制確保訂閱者客服端能夠成功訂閱或者退訂相應(yīng)的數(shù)據(jù)發(fā)布者。
圖2 數(shù)據(jù)發(fā)布端服務(wù)器與數(shù)據(jù)訂閱端服務(wù)器之間的通信模式
Fig.2 Communication mode between Pub-Server and Sub-Server
圖3 訂閱者服務(wù)器與訂閱者客服端之間的通信模式
Fig.3 Communication mode between Subscriber-Server and Subscriber-Client
圖4 數(shù)據(jù)發(fā)布端服務(wù)器執(zhí)行流程圖
Fig.4 A flowchart of Pub-Server
本文測(cè)試性能所用的硬件環(huán)境是1臺(tái)型號(hào)為IW4200-10G的思騰合力GPU服務(wù)器,該服務(wù)器具有16個(gè)雙核Intel?Xeon(R) CPU E5-2620 v4 @ 2.10 GHz處理器、256 GB R-ECC DDR4 內(nèi)存、2個(gè)Intel?I350千兆網(wǎng)卡。軟件環(huán)境為64位的Ubuntu 14.04 LTS,Python 2.7.6,MySQLdb 1.2.5,libzmq 4.2.5,pyzmq 17.1.2,MySQL 5.5.61。
由于NGAS能夠處理的標(biāo)準(zhǔn)FITS文件必須包含自定義的關(guān)鍵字ARCFILE (ARCFILE=′NCU.2003-11-11T11: 11: 11.111′),實(shí)驗(yàn)數(shù)據(jù)為MUSER-I的40萬(wàn)個(gè)已添加ARCFILE關(guān)鍵字的FITS文件,數(shù)據(jù)量約為75.102 GB(400 000 × 201 600 B),存放在分配了250 GB內(nèi)存的tmpfs(臨時(shí)文件系統(tǒng))中。
基于ZeroMQ改進(jìn)的多點(diǎn)觀測(cè)數(shù)據(jù)存儲(chǔ)與同步方法與NGAS中的數(shù)據(jù)存儲(chǔ)與同步方法的實(shí)驗(yàn)結(jié)果性能對(duì)比如圖5。訂閱者使用基于ZeroMQ改進(jìn)的數(shù)據(jù)存儲(chǔ)與同步方法將40萬(wàn)個(gè)FITS文件完全同步傳輸與存儲(chǔ)下來(lái)所耗費(fèi)的時(shí)間約為333.834 s(約5.6 min),使用NGAS中的數(shù)據(jù)存儲(chǔ)與同步方法所耗費(fèi)的時(shí)間約為13 330.998 s(約222.2 min)。NGAS中的數(shù)據(jù)存儲(chǔ)與同步方法用時(shí)是基于ZeroMQ實(shí)現(xiàn)的數(shù)據(jù)存儲(chǔ)與同步方法用時(shí)的39.933倍。
圖5 同步性能對(duì)比
Fig.5 Synchronization performance comparison
實(shí)驗(yàn)結(jié)果表明,基于ZeroMQ改進(jìn)的NGAS的數(shù)據(jù)存儲(chǔ)與同步方法在數(shù)據(jù)存儲(chǔ)和同步方面性能明顯優(yōu)于NGAS的數(shù)據(jù)存儲(chǔ)與同步方法,但是該方法也存在一些不足:
(1)由于基于ZeroMQ實(shí)現(xiàn)的NGAS數(shù)據(jù)發(fā)布端服務(wù)器要為每一個(gè)數(shù)據(jù)訂閱者分配一個(gè)固定的端口和每個(gè)IP地址端口數(shù)為65 536的限制,造成其只能為有限數(shù)量的訂閱者提供服務(wù);
(2)基于ZeroMQ的NGAS多點(diǎn)觀測(cè)數(shù)據(jù)存儲(chǔ)與同步方法的系統(tǒng)存在訂閱端服務(wù)器因?yàn)闊o(wú)法及時(shí)存儲(chǔ)高速接收的訂閱數(shù)據(jù)而導(dǎo)致內(nèi)存不足,進(jìn)而導(dǎo)致訂閱端服務(wù)器被殺掉。在未來(lái)的工作中,將加入動(dòng)態(tài)調(diào)整數(shù)據(jù)發(fā)布的機(jī)制優(yōu)化數(shù)據(jù)的同步傳輸效率。
本文詳細(xì)介紹了NGAS中的數(shù)據(jù)同步功能,討論了基于ZeroMQ改進(jìn)的NGAS多點(diǎn)觀測(cè)數(shù)據(jù)存儲(chǔ)與同步方法及基于該方法實(shí)現(xiàn)的系統(tǒng),通過實(shí)驗(yàn)驗(yàn)證了基于ZeroMQ改進(jìn)的NGAS多點(diǎn)觀測(cè)數(shù)據(jù)存儲(chǔ)與同步方法實(shí)現(xiàn)的系統(tǒng)在數(shù)據(jù)同步傳輸和存儲(chǔ)效率方面性能明顯優(yōu)于NGAS中的數(shù)據(jù)存儲(chǔ)與同步。下一步工作將在更加真實(shí)的實(shí)驗(yàn)環(huán)境中測(cè)試新方法的遠(yuǎn)程數(shù)據(jù)同步性能并進(jìn)一步優(yōu)化其性能。本文的工作對(duì)SKA區(qū)域數(shù)據(jù)中心與SKA天文臺(tái)數(shù)據(jù)中心之間的數(shù)據(jù)同步傳輸和存儲(chǔ)有較好的參考價(jià)值。
致謝:感謝國(guó)家天文臺(tái)-阿里云天文大數(shù)據(jù)聯(lián)合研究中心對(duì)本文工作的支持。