本發(fā)明涉及分布式系統(tǒng)存儲領(lǐng)域,尤其涉及一種基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法及裝置。
背景技術(shù):
傳統(tǒng)的塊設(shè)備在處理塊數(shù)據(jù)的時候,當(dāng)多個initiator(客戶端)通過iscsi(internetsmallcomputersysteminterface)將數(shù)據(jù)存儲到分布式文件系統(tǒng)時,多個initator只能連接到一個iscsi上面去,而不能分別連到多個iscsi設(shè)備上,isisi之間是可以相互傳輸數(shù)據(jù)的,但對外也即initator只能有一個連接,由于多個initator不能同時連接多個iscsi,因此存在技術(shù)上的瓶頸,不能充分發(fā)揮iscsi的性能。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的主要目的在于提供一種基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法及裝置,旨在解決單線程傳輸數(shù)據(jù)的方式,提升分布式文件系統(tǒng)塊設(shè)備處理性能。
為實(shí)現(xiàn)上述目的,本發(fā)明提供的一種基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法包括如下步驟:
與至少一個客戶端進(jìn)行連接;
啟動epoll網(wǎng)絡(luò)模型,當(dāng)探測到存在傳輸過來的網(wǎng)絡(luò)數(shù)據(jù)時,則響應(yīng)相應(yīng)線程處理數(shù)據(jù),其中多個線程對應(yīng)一個客戶端;
啟動相應(yīng)線程接收客戶端發(fā)送過來的請求消息,并將所述請求消息封裝成scsi命令字;
處理所接收到的請求消息,并將處理后的請求消息對應(yīng)的元數(shù)據(jù)存儲到數(shù)據(jù)存儲庫。
優(yōu)選地,所述處理所接收到的請求消息的步驟包括:
當(dāng)所接收到的請求消息為多條時,將所述請求消息順序排列;
依次處理所接收到的請求消息。
優(yōu)選地,所述處理所接收到的請求消息的步驟之前包括:
判斷l(xiāng)un是否已經(jīng)被預(yù)留,如果所述lun已經(jīng)被預(yù)留,則等待該預(yù)留被釋放;
如果所述lun未被預(yù)留,獲取該lun的預(yù)留。
優(yōu)選地,所述將處理后的請求消息對應(yīng)的元數(shù)據(jù)存儲到數(shù)據(jù)存儲庫中的步驟包括:
在stgt中緩存所有的元數(shù)據(jù);
當(dāng)stgt中緩存的元數(shù)據(jù)存滿后,則將所述元數(shù)據(jù)發(fā)送到數(shù)據(jù)存儲庫中存儲。
優(yōu)選地,所述將處理后的請求消息對應(yīng)的元數(shù)據(jù)存儲到數(shù)據(jù)存儲庫中的步驟包括:
當(dāng)接收到所述請求消息對應(yīng)的元數(shù)據(jù)時,調(diào)用buffer_list命令格式保存數(shù)據(jù)。
此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置,所述基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置包括:
連接模塊,用于與至少一個客戶端進(jìn)行連接;
啟動模塊,用于啟動epoll網(wǎng)絡(luò)模型,當(dāng)探測到存在傳輸過來的網(wǎng)絡(luò)數(shù)據(jù)時,則響應(yīng)相應(yīng)線程處理數(shù)據(jù),其中多個線程對應(yīng)一個客戶端;
接收模塊,用于啟動相應(yīng)線程接收客戶端發(fā)送過來的請求消息,并將所述請求消息封裝成scsi命令字;
存儲模塊,用于處理所接收到的請求消息,并將處理后的請求消息對應(yīng)的元數(shù)據(jù)存儲到數(shù)據(jù)存儲庫中。
優(yōu)選地,所述存儲模塊包括:
排列單元,用于當(dāng)所接收到的請求消息為多條時,將所述請求消息順序排列;
處理單元,用于依次處理所接收到的請求消息。
優(yōu)選地,所述基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置還包括:
判斷模塊,用于判斷l(xiāng)un是否已經(jīng)被預(yù)留,如果所述lun已經(jīng)被預(yù)留,則等待該預(yù)留被釋放;
獲取模塊,用于當(dāng)所述lun未被預(yù)留時,獲取該lun的預(yù)留。
優(yōu)選地,所述存儲模塊包括:
緩存單元,用于在stgt中緩存所有的元數(shù)據(jù);
存儲單元,用于當(dāng)stgt中緩存的元數(shù)據(jù)存滿后,則將所述元數(shù)據(jù)發(fā)送到數(shù)據(jù)存儲庫中存儲。
優(yōu)選地,所述存儲模塊還包括:
調(diào)用單元,用于當(dāng)接收到所述請求消息對應(yīng)的元數(shù)據(jù)時,調(diào)用buffer_list命令格式保存數(shù)據(jù)。
本發(fā)明的基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法包括:與至少一個客戶端進(jìn)行連接;啟動epoll網(wǎng)絡(luò)模型,當(dāng)探測到存在傳輸過來的網(wǎng)絡(luò)數(shù)據(jù)時,則響應(yīng)相應(yīng)線程處理數(shù)據(jù),其中多個線程對應(yīng)一個客戶端;啟動相應(yīng)線程接收客戶端發(fā)送過來的請求消息,并將所述請求消息封裝成scsi命令字;處理所接收到的請求消息,并將處理后的請求消息對應(yīng)的元數(shù)據(jù)存儲到數(shù)據(jù)存儲庫中。本發(fā)明通過將多線程與iscsi結(jié)合,使得每個線程都可以對應(yīng)一個或多個initator,提高了分布式文件系統(tǒng)塊設(shè)備處理性能。
附圖說明
圖1為本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法第一實(shí)施例的流程示意圖;
圖2為本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法第二實(shí)施例的流程示意圖;
圖3為本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法第三實(shí)施例的流程示意圖;
圖4為本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置第一實(shí)施例的功能模塊示意圖;
圖5為本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置第二實(shí)施例中存儲模塊的細(xì)化功能模塊示意圖;
圖6為本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置第三實(shí)施例中存儲模塊的功能模塊示意圖;
圖7為基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法的架構(gòu)圖。
本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。
具體實(shí)施方式
應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供一種基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法,參照圖1和圖7,在第一實(shí)施例中,該基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法包括:
步驟s10,與至少一個客戶端進(jìn)行連接;
本實(shí)施例中,通過在iscsi的基礎(chǔ)上建立多個進(jìn)程,每個進(jìn)程都可以對應(yīng)一個或多個initator(客戶端),通過多個線程來提高系統(tǒng)存儲的吞吐量,由于系統(tǒng)資源從一個線程分配到了多個線程中,這樣就相當(dāng)于把一個塊設(shè)備的處理過程交給了多個任務(wù)來處理,每個任務(wù)處理其中的一部分,這樣同時處理的話就加快了速度。
步驟s20,啟動epoll網(wǎng)絡(luò)模型,當(dāng)探測到存在傳輸過來的網(wǎng)絡(luò)數(shù)據(jù)時,則響應(yīng)相應(yīng)線程處理數(shù)據(jù),其中多個線程對應(yīng)一個客戶端;
具體地,本實(shí)施例中在響應(yīng)到客戶端發(fā)送過來的請求消息時,啟動epoll模型,當(dāng)探測到存在傳輸過來的網(wǎng)絡(luò)數(shù)據(jù)時,則響應(yīng)相應(yīng)線程處理數(shù)據(jù),其中多個線程對應(yīng)一個客戶端。也即一旦有網(wǎng)絡(luò)數(shù)據(jù)進(jìn)來,epoll模型就會被通知,得到通知后將數(shù)據(jù)交給線程去處理,由于采用了多個線程來處理數(shù)據(jù),因此每個線程都會自動的被操作系統(tǒng)分配到一個核上,這樣就充分利用了操作系統(tǒng)多核的優(yōu)勢,實(shí)現(xiàn)在多個線程上收發(fā)數(shù)據(jù)。
步驟s30,啟動相應(yīng)線程接收客戶端發(fā)送過來的請求消息,并將所述請求消息封裝成scsi命令字;
iscsi(internetsmallcomputersysteminterface)是由ieetf開發(fā)的網(wǎng)絡(luò)存儲標(biāo)準(zhǔn),目的是為了用ip協(xié)議將存儲設(shè)備連接在一起。通過在ip網(wǎng)上傳送scsi命令和數(shù)據(jù),iscsi推動了數(shù)據(jù)在網(wǎng)際之間的傳遞,同時也促進(jìn)了數(shù)據(jù)的遠(yuǎn)距離管理。
本實(shí)施例中,將請求消息封裝成scsi命令字,其中包含scsi命令字的請求消息采用iscsi協(xié)議進(jìn)行處理,在將處理后得到的iscsi數(shù)據(jù)包提交給實(shí)時操作系統(tǒng)上的tcp/ip協(xié)議棧,由tcp/ip協(xié)議棧完成數(shù)據(jù)的發(fā)送和接收。
步驟s40,處理所接收到的請求消息,并將處理后的請求消息對應(yīng)的元數(shù)據(jù)存儲到數(shù)據(jù)存儲庫中;
具體地,當(dāng)接收到所述請求消息對應(yīng)的元數(shù)據(jù)時,調(diào)用buffer_list命令格式保存數(shù)據(jù)。網(wǎng)絡(luò)接收到iscsi數(shù)據(jù)時,用buffer_list保存數(shù)據(jù),即將數(shù)據(jù)保存到一個指針列表中,通過指向指針的地址就可以將數(shù)據(jù)取出來,而不需要將buffer_list中的數(shù)據(jù)再次拷貝處理,減少了數(shù)據(jù)拷貝的次數(shù),從而提高了系統(tǒng)處理的性能。
本實(shí)施例通過與至少一個客戶端進(jìn)行連接;啟動相應(yīng)線程接收客戶端發(fā)送過來的請求消息,并將所述請求消息封裝成scsi命令字;處理所接收到的請求消息,并將處理后的請求消息對應(yīng)的元數(shù)據(jù)存儲到數(shù)據(jù)存儲庫中;所述啟動相應(yīng)線程接收客戶端發(fā)送過來的請求消息的步驟之前還包括:啟動epoll網(wǎng)絡(luò)模型,當(dāng)探測到存在傳輸過來的網(wǎng)絡(luò)數(shù)據(jù)時,則響應(yīng)相應(yīng)線程處理數(shù)據(jù),其中多個線程對應(yīng)一個客戶端。通過采用本發(fā)明將多線程與iscsi結(jié)合,使得每個線程都可以對應(yīng)一個或多個initator,提高了分布式文件系統(tǒng)塊設(shè)備處理性能。
進(jìn)一步地,請參閱圖2,基于本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法第一實(shí)施例,在本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法第二實(shí)施例中,上述步驟s40包括:
步驟s41,當(dāng)所接收到的請求消息為多條時,將所述請求消息順序排列;
步驟s42,依次處理所接收到的請求消息。
本實(shí)施例中,在多線程的基礎(chǔ)上結(jié)合分布式鎖機(jī)制,解決數(shù)據(jù)處理擁擠造成數(shù)據(jù)混亂的情況。分布式鎖的作用是在處理多個請求的時候保證數(shù)據(jù)不出現(xiàn)數(shù)據(jù)順序錯誤,即排隊(duì)執(zhí)行,先來先處理,處理完了取出隊(duì)列中下一個繼續(xù)處理。處理的過程中將數(shù)據(jù)放到到緩存隊(duì)列中,當(dāng)數(shù)據(jù)元緩存滿后將數(shù)據(jù)發(fā)送到底層的iscsi分布式文件系統(tǒng)中,這樣就實(shí)現(xiàn)了并發(fā)initator數(shù)據(jù)的處理,有效解決了initator客戶端排隊(duì)等待的問題。
本實(shí)施例通過在多線程的基礎(chǔ)上結(jié)合分布式鎖機(jī)制,解決數(shù)據(jù)處理擁擠造成數(shù)據(jù)混亂的情況。
進(jìn)一步地,請參閱圖3,基于本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法第二實(shí)施例,在本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)方法第三實(shí)施例中,上述步驟s40之前包括:
步驟s31,判斷l(xiāng)un是否已經(jīng)被預(yù)留,如果所述lun已經(jīng)被預(yù)留,則等待該預(yù)留被釋放;
步驟s32,如果所述lun未被預(yù)留,獲取該lun的預(yù)留。
分布式鎖機(jī)制旨在解決多個activetarget之間支持release/reserve(預(yù)留/釋放)和persistentreservation的問題,同時會將lun映射信息存儲在rados集群中,同時在stgt中緩存所有的元數(shù)據(jù)以加快訪問速度。當(dāng)lun映射信息發(fā)生變更時,會通知所有stgt的緩存進(jìn)行變更。文件讀寫操作最終通過scsi命令寫入lun。scsi通過預(yù)留/釋放方式實(shí)現(xiàn)訪問控制,進(jìn)程訪問lun之前必須先成功獲得該lun的預(yù)留。scsi預(yù)留/釋放是針對整個lun,如果一個lun已經(jīng)被預(yù)留,那么其他進(jìn)程無法訪問該lun,必須等待該預(yù)留被釋放掉。
本實(shí)施例通過判斷l(xiāng)un是否已經(jīng)被預(yù)留,如果所述lun已經(jīng)被預(yù)留,則等待該預(yù)留被釋放,如果所述lun未被預(yù)留,獲取該lun的預(yù)留。進(jìn)一步地,通過scsi命令將文件讀寫操作寫入lun。
本發(fā)明還提供一種基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置,參照圖4,在第一實(shí)施例中,該基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置包括:
連接模塊10,用于與至少一個客戶端進(jìn)行連接;
本實(shí)施例中,通過在iscsi的基礎(chǔ)上建立多個進(jìn)程,每個進(jìn)程都可以對應(yīng)一個或多個initator(客戶端),通過多個線程來提高系統(tǒng)存儲的吞吐量,由于系統(tǒng)資源從一個線程分配到了多個線程中,這樣就相當(dāng)于把一個塊設(shè)備的處理過程交給了多個任務(wù)來處理,每個任務(wù)處理其中的一部分,這樣同時處理的話就加快了速度。
啟動模塊20,用于啟動epoll網(wǎng)絡(luò)模型,當(dāng)探測到存在傳輸過來的網(wǎng)絡(luò)數(shù)據(jù)時,則響應(yīng)相應(yīng)線程處理數(shù)據(jù),其中多個線程對應(yīng)一個客戶端;
具體地,本實(shí)施例中在響應(yīng)到客戶端發(fā)送過來的請求消息時,啟動epoll模型,當(dāng)探測到存在傳輸過來的網(wǎng)絡(luò)數(shù)據(jù)時,則響應(yīng)相應(yīng)線程處理數(shù)據(jù),其中多個線程對應(yīng)一個客戶端。也即一旦有網(wǎng)絡(luò)數(shù)據(jù)進(jìn)來,epoll模型就會被通知,得到通知后將數(shù)據(jù)交給線程去處理,由于采用了多個線程來處理數(shù)據(jù),因此每個線程都會自動的被操作系統(tǒng)分配到一個核上,這樣就充分利用了操作系統(tǒng)多核的優(yōu)勢,實(shí)現(xiàn)在多個線程上收發(fā)數(shù)據(jù)。
接收模塊30,用于啟動相應(yīng)線程接收客戶端發(fā)送過來的請求消息,并將所述請求消息封裝成scsi命令字;
iscsi(internetsmallcomputersysteminterface)是由ieetf開發(fā)的網(wǎng)絡(luò)存儲標(biāo)準(zhǔn),目的是為了用ip協(xié)議將存儲設(shè)備連接在一起。通過在ip網(wǎng)上傳送scsi命令和數(shù)據(jù),iscsi推動了數(shù)據(jù)在網(wǎng)際之間的傳遞,同時也促進(jìn)了數(shù)據(jù)的遠(yuǎn)距離管理。
本實(shí)施例中,將請求消息封裝成scsi命令字,其中包含scsi命令字的請求消息采用iscsi協(xié)議進(jìn)行處理,在將處理后得到的iscsi數(shù)據(jù)包提交給實(shí)時操作系統(tǒng)上的tcp/ip協(xié)議棧,由tcp/ip協(xié)議棧完成數(shù)據(jù)的發(fā)送和接收。
存儲模塊40,用于處理所接收到的請求消息,并將處理后的請求消息對應(yīng)的元數(shù)據(jù)存儲到數(shù)據(jù)存儲庫中;
具體地,當(dāng)接收到所述請求消息對應(yīng)的元數(shù)據(jù)時,調(diào)用buffer_list命令格式保存數(shù)據(jù)。網(wǎng)絡(luò)接收到iscsi數(shù)據(jù)時,用buffer_list保存數(shù)據(jù),即將數(shù)據(jù)保存到一個指針列表中,通過指向指針的地址就可以將數(shù)據(jù)取出來,而不需要將buffer_list中的數(shù)據(jù)再次拷貝處理,減少了數(shù)據(jù)拷貝的次數(shù),從而提高了系統(tǒng)處理的性能。
本實(shí)施例通過與至少一個客戶端進(jìn)行連接;啟動相應(yīng)線程接收客戶端發(fā)送過來的請求消息,并將所述請求消息封裝成scsi命令字;處理所接收到的請求消息,并將處理后的請求消息對應(yīng)的元數(shù)據(jù)存儲到數(shù)據(jù)存儲庫中;所述啟動相應(yīng)線程接收客戶端發(fā)送過來的請求消息的步驟之前還包括:啟動epoll網(wǎng)絡(luò)模型,當(dāng)探測到存在傳輸過來的網(wǎng)絡(luò)數(shù)據(jù)時,則響應(yīng)相應(yīng)線程處理數(shù)據(jù),其中多個線程對應(yīng)一個客戶端。通過采用本發(fā)明將多線程與iscsi結(jié)合,使得每個線程都可以對應(yīng)一個或多個initator,提高了分布式文件系統(tǒng)塊設(shè)備處理性能。
進(jìn)一步地,請參閱圖5,基于本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置第一實(shí)施例,在本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置第二實(shí)施例中,上述存儲模塊40包括:
排列單元41,用于當(dāng)所接收到的請求消息為多條時,將所述請求消息順序排列;
處理單元42,用于依次處理所接收到的請求消息。
本實(shí)施例中,在多線程的基礎(chǔ)上結(jié)合分布式鎖機(jī)制,解決數(shù)據(jù)處理擁擠造成數(shù)據(jù)混亂的情況。分布式鎖的作用是在處理多個請求的時候保證數(shù)據(jù)不出現(xiàn)數(shù)據(jù)順序錯誤,即排隊(duì)執(zhí)行,先來先處理,處理完了取出隊(duì)列中下一個繼續(xù)處理。處理的過程中將數(shù)據(jù)放到到緩存隊(duì)列中,當(dāng)數(shù)據(jù)元緩存滿后將數(shù)據(jù)發(fā)送到底層的iscsi分布式文件系統(tǒng)中,這樣就實(shí)現(xiàn)了并發(fā)initator數(shù)據(jù)的處理,有效解決了initator客戶端排隊(duì)等待的問題。
本實(shí)施例通過在多線程的基礎(chǔ)上結(jié)合分布式鎖機(jī)制,解決數(shù)據(jù)處理擁擠造成數(shù)據(jù)混亂的情況。
進(jìn)一步地,請參閱圖6,基于本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置第二實(shí)施例,在本發(fā)明基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置第三實(shí)施例中,上述基于分布式文件系統(tǒng)的處理數(shù)據(jù)裝置還包括:
判斷模塊31,用于判斷l(xiāng)un是否已經(jīng)被預(yù)留,如果所述lun已經(jīng)被預(yù)留,則等待該預(yù)留被釋放;
獲取模塊32,如果所述lun未被預(yù)留,獲取該lun的預(yù)留。
分布式鎖機(jī)制旨在解決多個activetarget之間支持release/reserve(預(yù)留/釋放)和persistentreservation的問題,同時會將lun映射信息存儲在rados集群中,同時在stgt中緩存所有的元數(shù)據(jù)以加快訪問速度。當(dāng)lun映射信息發(fā)生變更時,會通知所有stgt的緩存進(jìn)行變更。文件讀寫操作最終通過scsi命令寫入lun。scsi通過預(yù)留/釋放方式實(shí)現(xiàn)訪問控制,進(jìn)程訪問lun之前必須先成功獲得該lun的預(yù)留。scsi預(yù)留/釋放是針對整個lun,如果一個lun已經(jīng)被預(yù)留,那么其他進(jìn)程無法訪問該lun,必須等待該預(yù)留被釋放掉。
本實(shí)施例通過判斷l(xiāng)un是否已經(jīng)被預(yù)留,如果所述lun已經(jīng)被預(yù)留,則等待該預(yù)留被釋放,如果所述lun未被預(yù)留,獲取該lun的預(yù)留。進(jìn)一步地,通過scsi命令將文件讀寫操作寫入lun。
以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。