專利名稱:對(duì)彈性計(jì)算云系統(tǒng)升級(jí)的裝置、方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及弾性計(jì)算云技術(shù)領(lǐng)域和塊設(shè)備的存儲(chǔ)服務(wù)技術(shù)領(lǐng)域,尤其是涉及ー種對(duì)基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng)進(jìn)行升級(jí)的裝置、方法及系統(tǒng)。
背景技術(shù):
弾性計(jì)算云(Elastic Computing Cloud)是ー種云計(jì)算服務(wù),即基于虛擬化技術(shù), 將本地的物理服務(wù)器虛擬化成多個(gè)虛擬服務(wù)器來(lái)使用,以此來(lái)提高資源的使用率,壓縮成本。其中基于彈性計(jì)算云技術(shù)虛擬出來(lái)的虛擬服務(wù)器(即虛擬機(jī))的存儲(chǔ)服務(wù)都是基于塊設(shè)備的遠(yuǎn)程存儲(chǔ)服務(wù),業(yè)界稱之為彈性塊存儲(chǔ)服務(wù)(Elastic Block Storage) 0塊設(shè)備的遠(yuǎn)程存儲(chǔ)服務(wù),是基于塊設(shè)備驅(qū)動(dòng)(Block Device Driver)提供的ー種塊級(jí)別的存儲(chǔ)服務(wù)。本地的物理服務(wù)器和/或虛擬服務(wù)器可以將服務(wù)器的數(shù)據(jù)基于塊的方式存儲(chǔ)到遠(yuǎn)程的存儲(chǔ)資源池中,從而節(jié)約本地的存儲(chǔ)資源。簡(jiǎn)而言之,塊設(shè)備的遠(yuǎn)程存儲(chǔ)服務(wù)提供了一個(gè)類似物理裸硬盤(pán)的服務(wù)來(lái)存儲(chǔ)本地的物理服務(wù)器和/或虛擬服務(wù)器的數(shù)據(jù), 且對(duì)數(shù)據(jù)的格式、文件系統(tǒng)的格式?jīng)]有任何限制。隨著彈性計(jì)算云技術(shù)的快速發(fā)展,弾性塊存儲(chǔ)服務(wù)對(duì)遠(yuǎn)程存儲(chǔ)服務(wù)的高可用性提出了更高的要求。通常情況下,基于彈性計(jì)算云技術(shù)虛擬出來(lái)的虛擬服務(wù)器都數(shù)以萬(wàn)計(jì),并將虛擬出來(lái)的這數(shù)以萬(wàn)計(jì)的虛擬服務(wù)器提供給第三方使用(例如政府部門(mén)、傳統(tǒng)大中小型企業(yè)、互聯(lián)網(wǎng)中小站長(zhǎng)、個(gè)人用戶等)。而眾多的虛擬服務(wù)器組成的集群都是依托塊設(shè)備的遠(yuǎn)程存儲(chǔ)服務(wù)而運(yùn)轉(zhuǎn)起來(lái)的,顯然,遠(yuǎn)程存儲(chǔ)服務(wù)承載并流轉(zhuǎn)著整個(gè)彈性計(jì)算云系統(tǒng)的數(shù)據(jù),遠(yuǎn)程存儲(chǔ)服務(wù)的可用性關(guān)系到整個(gè)彈性計(jì)算云系統(tǒng)的可用性?,F(xiàn)有技術(shù)中,對(duì)基于塊設(shè)備的遠(yuǎn)程存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng)進(jìn)行升級(jí)時(shí),需要首先通知服務(wù)使用用戶因升級(jí)過(guò)程將導(dǎo)致服務(wù)暫停,然后將整個(gè)彈性計(jì)算云系統(tǒng)中的各個(gè)虛擬機(jī)服務(wù)器的服務(wù)暫停,這樣才能對(duì)存儲(chǔ)服務(wù)進(jìn)行服務(wù)升級(jí)(例如BUG的修復(fù)以及提供新的功能等),在重新部署后的服務(wù)正常工作后,再將整個(gè)弾性計(jì)算云系統(tǒng)中的虛擬機(jī)服務(wù)器恢復(fù)正常運(yùn)轉(zhuǎn),從而完成ー個(gè)升級(jí)過(guò)程。此外在升級(jí)過(guò)程中,如果用戶正在使用弾性計(jì)算云系統(tǒng)中的虛擬服務(wù)器提供的Web服務(wù)訪問(wèn)Web網(wǎng)頁(yè)吋,就會(huì)導(dǎo)致用戶不能繼續(xù)訪問(wèn)Web網(wǎng)頁(yè),而如果用戶正在使用弾性計(jì)算云系統(tǒng)中的虛擬服務(wù)器進(jìn)行分布式計(jì)算吋,也會(huì)導(dǎo)致用戶不得不終止當(dāng)前正在進(jìn)行的分布式計(jì)算。由此可見(jiàn),現(xiàn)有技術(shù)中對(duì)基于塊設(shè)備的遠(yuǎn)程存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng)進(jìn)行升級(jí)時(shí),其升級(jí)過(guò)程十分繁瑣,升級(jí)過(guò)程中需要耗費(fèi)較長(zhǎng)時(shí)間,一般需要幾個(gè)小時(shí)的時(shí)間才能完成升級(jí)操作,升級(jí)效率比較低,并且還會(huì)導(dǎo)致用戶在升級(jí)過(guò)程中不得不中斷當(dāng)前正在進(jìn)行處理的業(yè)務(wù),因此不能保證在升級(jí)過(guò)程中為用戶提供高可用的服務(wù),降低了用戶的使用體驗(yàn)。
發(fā)明內(nèi)容
本申請(qǐng)實(shí)施例提供一種對(duì)基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng)進(jìn)行升級(jí)的裝置、方法及系統(tǒng),以通過(guò)在線升級(jí)的方式提高升級(jí)效率,且避免升級(jí)對(duì)用戶正在使用的業(yè)務(wù)中斷所導(dǎo)致的用戶使用體驗(yàn)差的問(wèn)題。為解決上述問(wèn)題,本申請(qǐng)實(shí)施例提供了一種基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng)中的服務(wù)器,包括塊設(shè)備驅(qū)動(dòng)裝置和至少ー個(gè)塊設(shè)備服務(wù)裝置,其中塊設(shè)備驅(qū)動(dòng)裝置,用于在接收到對(duì)應(yīng)ー個(gè)塊設(shè)備服務(wù)裝置的數(shù)據(jù)讀寫(xiě)請(qǐng)求吋,將接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求放置到為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的等待隊(duì)列中,并從所述等待隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求并移置到為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的未決隊(duì)列中,并將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)裝置進(jìn)行處理,并在接收到該塊設(shè)備服務(wù)裝置對(duì)接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求的處理結(jié)果后,將轉(zhuǎn)發(fā)的數(shù)據(jù)讀寫(xiě)請(qǐng)求從所述未決隊(duì)列中刪除;并在確定出該塊設(shè)備服務(wù)裝置將進(jìn)行業(yè)務(wù)升級(jí)時(shí),停止將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)進(jìn)行處理,以及在確定出將進(jìn)行業(yè)務(wù)升級(jí)或者業(yè)務(wù)升級(jí)完成后,將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置回所述等待隊(duì)列中;塊設(shè)備服務(wù)裝置,用于根據(jù)塊設(shè)備驅(qū)動(dòng)裝置轉(zhuǎn)發(fā)來(lái)的數(shù)據(jù)讀寫(xiě)請(qǐng)求,針對(duì)塊設(shè)備存儲(chǔ)資源池進(jìn)行對(duì)應(yīng)請(qǐng)求數(shù)據(jù)的讀寫(xiě)操作。為解決上述問(wèn)題,本申請(qǐng)實(shí)施例還提供了一種對(duì)基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的彈性計(jì)算云系統(tǒng)進(jìn)行升級(jí)的方法,包括在毎次接收到對(duì)應(yīng)ー個(gè)塊設(shè)備服務(wù)的數(shù)據(jù)讀寫(xiě)請(qǐng)求吋,將接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求放置到為該塊設(shè)備服務(wù)預(yù)先維護(hù)的等待隊(duì)列中;從所述等待隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求并移置到為該塊設(shè)備服務(wù)預(yù)先維護(hù)的未決隊(duì)列中,并將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)進(jìn)行處理,并在接收到該塊設(shè)備服務(wù)對(duì)接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求的處理結(jié)果后,將轉(zhuǎn)發(fā)的數(shù)據(jù)讀寫(xiě)請(qǐng)求從所述未決隊(duì)列中刪除;以及在確定出該塊設(shè)備服務(wù)將進(jìn)行業(yè)務(wù)升級(jí)時(shí),停止將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)進(jìn)行處理;以及在確定出將進(jìn)行業(yè)務(wù)升級(jí)或者業(yè)務(wù)升級(jí)完成后,將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置回所述等待隊(duì)列中。為解決上述問(wèn)題,本申請(qǐng)實(shí)施例還提供了一種對(duì)基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的彈性計(jì)算云系統(tǒng)進(jìn)行升級(jí)的裝置,包括等待隊(duì)列維護(hù)單元,用于在每次接收到對(duì)應(yīng)ー 個(gè)塊設(shè)備服務(wù)的數(shù)據(jù)讀寫(xiě)請(qǐng)求吋,將接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求放置到為該塊設(shè)備服務(wù)預(yù)先維護(hù)的等待隊(duì)列中;未決隊(duì)列維護(hù)單元,用于從所述等待隊(duì)列維護(hù)單元維護(hù)的等待隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求并移置到為該塊設(shè)備服務(wù)預(yù)先維護(hù)的未決隊(duì)列中;讀寫(xiě)請(qǐng)求處理單元,用于將所述未決隊(duì)列維護(hù)單元維護(hù)的未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)進(jìn)行處理,并在接收到該塊設(shè)備服務(wù)對(duì)接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求的處理結(jié)果后,將轉(zhuǎn)發(fā)的數(shù)據(jù)讀寫(xiě)請(qǐng)求從所述未決隊(duì)列中刪除;并在確定出該塊設(shè)備服務(wù)將進(jìn)行業(yè)務(wù)升級(jí)時(shí),停止將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)進(jìn)行處理,以及在確定出將進(jìn)行業(yè)務(wù)升級(jí)或者業(yè)務(wù)升級(jí)完成后,將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置回所述等待隊(duì)列中。為解決上述問(wèn)題,本申請(qǐng)實(shí)施例提供了一種基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng),包括存儲(chǔ)資源池,用于基于塊設(shè)備存儲(chǔ)服務(wù)方式存儲(chǔ)彈性計(jì)算云系統(tǒng)中的數(shù)據(jù);和至少ー個(gè)物理服務(wù)器,用于在每次接收到對(duì)應(yīng)ー個(gè)塊設(shè)備服務(wù)的數(shù)據(jù)讀寫(xiě)請(qǐng)求吋,將接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求放置到為該塊設(shè)備服務(wù)預(yù)先維護(hù)的等待隊(duì)列中,并從所述等待隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求并移置到為該塊設(shè)備服務(wù)預(yù)先維護(hù)的未決隊(duì)列中,井根據(jù)所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求,針對(duì)所述存儲(chǔ)資源池進(jìn)行對(duì)應(yīng)請(qǐng)求數(shù)據(jù)的讀寫(xiě)操作;并在確定出該塊設(shè)備服務(wù)將進(jìn)行業(yè)務(wù)升級(jí)時(shí),停止對(duì)所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求進(jìn)行處理,以及在將進(jìn)行業(yè)務(wù)升級(jí)或者業(yè)務(wù)升級(jí)完成后,將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置回所述等待隊(duì)列中。本申請(qǐng)實(shí)施例提出的技術(shù)方案,在基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng)中的物理服務(wù)器中,通過(guò)分別為每個(gè)虛擬出來(lái)的塊設(shè)備服務(wù)維護(hù)兩個(gè)隊(duì)列,ー個(gè)是數(shù)據(jù)讀寫(xiě)請(qǐng)求等待(Waiting)隊(duì)列,用來(lái)維護(hù)針對(duì)ー個(gè)發(fā)向塊設(shè)備服務(wù)并等待其處理的數(shù)據(jù)讀寫(xiě)請(qǐng)求,另ー個(gè)是懸而未決(Pending)隊(duì)列,用來(lái)維護(hù)物理服務(wù)器針該對(duì)塊設(shè)備服務(wù)當(dāng)前正在處理的數(shù)據(jù)讀寫(xiě)請(qǐng)求,在該塊設(shè)備服務(wù)需要進(jìn)行升級(jí)時(shí),停止對(duì)為該塊設(shè)備服務(wù)維護(hù)的Pending隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求進(jìn)行處理,并在該塊設(shè)備服務(wù)升級(jí)完成并恢復(fù)運(yùn)作后,將Pending隊(duì)列中正在處理的數(shù)據(jù)讀寫(xiě)請(qǐng)求再次放入到Waiting隊(duì)列中重新接受調(diào)度處理,從而實(shí)現(xiàn)了在不中斷存儲(chǔ)服務(wù)的情況下完成對(duì)彈性計(jì)算云系統(tǒng)中存儲(chǔ)服務(wù)的業(yè)務(wù)升級(jí)處理,這提高了服務(wù)升級(jí)的效率,且避免了因升級(jí)造成用戶正在使用業(yè)務(wù)的中斷,在升級(jí)過(guò)程中能夠?yàn)橛脩籼峁└呖捎玫姆?wù),進(jìn)而提高了用戶的使用體驗(yàn)。
圖1為本申請(qǐng)實(shí)施例提出的技術(shù)方案所應(yīng)用的基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的彈性計(jì)算云系統(tǒng)的拓?fù)浣Y(jié)構(gòu)圖;圖2為本申請(qǐng)實(shí)施例提出的改進(jìn)后的物理服務(wù)器的組成結(jié)構(gòu)示意圖;圖3為本申請(qǐng)實(shí)施例中改進(jìn)后的物理服務(wù)器向本地或遠(yuǎn)程存儲(chǔ)資源池讀寫(xiě)數(shù)據(jù)的內(nèi)部處理流程示意圖;圖4為本申請(qǐng)實(shí)施例改進(jìn)后的物理服務(wù)器中的塊設(shè)備驅(qū)動(dòng)裝置的具體工作原理流程圖;圖5為本申請(qǐng)實(shí)施例改進(jìn)后的物理服務(wù)器中的塊設(shè)備驅(qū)動(dòng)裝置在塊設(shè)備服務(wù)裝置進(jìn)行業(yè)務(wù)升級(jí)前后對(duì)維護(hù)的Waiting隊(duì)列、Pending隊(duì)列進(jìn)行調(diào)度的處理示意圖;圖6為本申請(qǐng)實(shí)施例中改進(jìn)的物理服務(wù)器中新增的塊設(shè)備驅(qū)動(dòng)裝置的具體組成結(jié)構(gòu)示意圖;圖7為本申請(qǐng)實(shí)施例中在進(jìn)行服務(wù)器業(yè)務(wù)升級(jí)時(shí),控制物理服務(wù)器中的塊設(shè)備驅(qū)動(dòng)裝置的操作示意圖。
具體實(shí)施例方式本申請(qǐng)針對(duì)現(xiàn)有技術(shù)中,在對(duì)基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng)進(jìn)行升級(jí)時(shí),由于沒(méi)有熱部署實(shí)現(xiàn)在線升級(jí)方式,而是需要對(duì)彈性計(jì)算云系統(tǒng)中的各個(gè)虛擬服務(wù)器停機(jī)后進(jìn)行業(yè)務(wù)升級(jí),升級(jí)完成后再啟動(dòng)各個(gè)虛擬服務(wù)器,這無(wú)論對(duì)于存儲(chǔ)服務(wù)提供方來(lái)說(shuō),還是對(duì)于存儲(chǔ)服務(wù)使用方來(lái)說(shuō),其維護(hù)成本都會(huì)大幅増加,并大大降低了服務(wù)的可用性。本申請(qǐng)針對(duì)此問(wèn)題,提出在對(duì)基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng)中實(shí)現(xiàn)塊設(shè)備存儲(chǔ)服務(wù)的熱部署,以實(shí)現(xiàn)在線升級(jí)存儲(chǔ)服務(wù),即在不中斷存儲(chǔ)服務(wù)的同時(shí)進(jìn)行存儲(chǔ)服務(wù)的升級(jí)處理,以此來(lái)提升服務(wù)提供方存儲(chǔ)服務(wù)的可用性,并增強(qiáng)存儲(chǔ)服務(wù)的透明性,使得存儲(chǔ)服務(wù)的使用方不用關(guān)注后端服務(wù)的升級(jí)過(guò)程。所謂塊設(shè)備存儲(chǔ)服務(wù)的熱部署即塊設(shè)備服務(wù)的在線升級(jí)(Online Upgrade)方式, 由于塊設(shè)備存儲(chǔ)服務(wù)是基于塊設(shè)備驅(qū)動(dòng)技術(shù)的,因此彈性計(jì)算云系統(tǒng)中的物理服務(wù)器中包含了內(nèi)核態(tài)的塊設(shè)備驅(qū)動(dòng)服務(wù)程序,內(nèi)核態(tài)的塊設(shè)備驅(qū)動(dòng)服務(wù)程序需要將數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給物理服務(wù)器包含的用戶態(tài)的塊設(shè)備服務(wù)程序,由用戶態(tài)的塊設(shè)備服務(wù)程序?qū)⒆x寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給遠(yuǎn)程的網(wǎng)絡(luò)存儲(chǔ)資源池或本地物理磁盤(pán)存儲(chǔ)資源池等等來(lái)進(jìn)而處理。其中,內(nèi)核態(tài)的塊設(shè)備驅(qū)動(dòng)服務(wù)程序相對(duì)于用戶態(tài)的塊設(shè)備服務(wù)程序而言,其更為穩(wěn)定;而用戶態(tài)的塊設(shè)備服務(wù)程序需要頻繁的版本升級(jí)來(lái)提供更優(yōu)質(zhì)的存儲(chǔ)服務(wù)。按照本申請(qǐng)實(shí)施例提供的技術(shù)方案,其在弾性計(jì)算云系統(tǒng)中的物理服務(wù)器中提供了一個(gè)可以支持在線升級(jí)的塊設(shè)備驅(qū)動(dòng)服務(wù)程序,以提高存儲(chǔ)服務(wù)的可用性,并改善用戶的使用體驗(yàn)。如圖1所示,為本申請(qǐng)實(shí)施例提出的技術(shù)方案所應(yīng)用的基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng)的拓?fù)浣Y(jié)構(gòu)圖,其中,弾性計(jì)算云系統(tǒng)中包括若干基于彈性計(jì)算云技術(shù)將本地的物理服務(wù)器虛擬出來(lái)的虛擬服務(wù)器(圖中所示為虛擬服務(wù)器1、虛擬服
務(wù)器2、虛擬服務(wù)器3.......虛擬服務(wù)器η),各個(gè)虛擬服務(wù)器會(huì)將本地提供的基于塊設(shè)備
存儲(chǔ)服務(wù)技術(shù)的數(shù)據(jù)存儲(chǔ)服務(wù)使用遠(yuǎn)程的存儲(chǔ)資源池或本地的存儲(chǔ)資源池來(lái)實(shí)現(xiàn),即各個(gè)虛擬服務(wù)器會(huì)將本地需要保存的數(shù)據(jù)存儲(chǔ)到遠(yuǎn)程的存儲(chǔ)資源池或本地設(shè)置的存儲(chǔ)資源池中,并在后續(xù)有讀取數(shù)據(jù)的請(qǐng)求吋,從遠(yuǎn)程的存儲(chǔ)資源池或本地設(shè)置的存儲(chǔ)資源池中讀取相關(guān)數(shù)據(jù)。這樣各個(gè)虛擬服務(wù)器就可以共享遠(yuǎn)程或本地設(shè)置的存儲(chǔ)資源池,而無(wú)需占用本地物理服務(wù)器本身的存儲(chǔ)資源,從而較好地提高了弾性計(jì)算云系統(tǒng)的資源利用率。為實(shí)施本申請(qǐng)?zhí)岢龅募夹g(shù)方案,需要對(duì)上述介紹的彈性計(jì)算云系統(tǒng)中的物理服務(wù)器的功能進(jìn)行改迸,以實(shí)現(xiàn)對(duì)存儲(chǔ)服務(wù)進(jìn)行在線升級(jí)的目的。如圖2所示,為本申請(qǐng)實(shí)施例提出的改進(jìn)后的物理服務(wù)器的組成結(jié)構(gòu)示意圖,具體包括內(nèi)核態(tài)的塊設(shè)備驅(qū)動(dòng)裝置20、用戶態(tài)的客戶端裝置21和至少ー個(gè)塊設(shè)備服務(wù)裝置 22、以及本地或遠(yuǎn)程存儲(chǔ)資源池23,其中塊設(shè)備驅(qū)動(dòng)裝置20可以控制多個(gè)塊設(shè)備服務(wù)裝置 22的工作,各組成部分通過(guò)下述工作原理來(lái)實(shí)現(xiàn)存儲(chǔ)服務(wù)的在線升級(jí)內(nèi)核態(tài)的塊設(shè)備驅(qū)動(dòng)裝置20,其接收來(lái)自物理服務(wù)器底層的讀寫(xiě)調(diào)度層的數(shù)據(jù)讀寫(xiě)請(qǐng)求,并將數(shù)據(jù)讀寫(xiě)請(qǐng)求通過(guò)例如TCP協(xié)議等轉(zhuǎn)發(fā)給用戶態(tài)的塊設(shè)備服務(wù)裝置22。為了實(shí)現(xiàn)支持熱部署的在線升級(jí)功能,塊設(shè)備驅(qū)動(dòng)裝置20分別為物理服務(wù)器虛擬出來(lái)的每個(gè)塊設(shè)備服務(wù)裝置22維護(hù)了兩個(gè)隊(duì)列,其中一個(gè)為等待(Waiting)列隊(duì),塊設(shè)備驅(qū)動(dòng)裝置20 毎次接收到物理服務(wù)器底層的讀寫(xiě)調(diào)度層發(fā)來(lái)的對(duì)應(yīng)某個(gè)塊設(shè)備服務(wù)裝置22的數(shù)據(jù)讀寫(xiě)請(qǐng)求吋,就將該接收到的讀寫(xiě)請(qǐng)求放入到為該塊設(shè)備服務(wù)裝置22預(yù)先維護(hù)的Waiting隊(duì)列中等待后續(xù)處理;另外一個(gè)為懸而未決(Pending)隊(duì)列,塊設(shè)備驅(qū)動(dòng)裝置20每次處理該塊設(shè)備服務(wù)裝置22的數(shù)據(jù)讀寫(xiě)請(qǐng)求吋,都會(huì)先從為該塊設(shè)備服務(wù)裝置22預(yù)先維護(hù)的Waiting 隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求并移放到為該塊設(shè)備服務(wù)裝置22預(yù)先維護(hù)的Pending隊(duì)列中,并將該P(yáng)ending隊(duì)列中的請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)裝置22進(jìn)行處理,可見(jiàn)Pending隊(duì)列中的讀寫(xiě)請(qǐng)求都是物理服務(wù)器當(dāng)前正在處理的讀寫(xiě)請(qǐng)求,當(dāng)塊設(shè)備服務(wù)裝置22正確處理完塊設(shè)備驅(qū)動(dòng)裝置20轉(zhuǎn)發(fā)過(guò)來(lái)的未決隊(duì)列的讀寫(xiě)請(qǐng)求后,會(huì)向塊設(shè)備驅(qū)動(dòng)裝置20發(fā)送正確處理的結(jié)果消息,塊設(shè)備驅(qū)動(dòng)裝置20接收到正確處理的結(jié)果消息后,會(huì)將轉(zhuǎn)發(fā)的這些處理好的讀寫(xiě)請(qǐng)求從未決隊(duì)列中刪除棹,接著處理懸而未決隊(duì)列中的其他讀寫(xiě)請(qǐng)求,如此循環(huán)。后續(xù)當(dāng)塊設(shè)備驅(qū)動(dòng)裝置20確定出該塊設(shè)備服務(wù)裝置22將進(jìn)行業(yè)務(wù)升級(jí)時(shí),停止將針對(duì)該塊設(shè)備服務(wù)裝置22而預(yù)先維護(hù)的Pending隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給塊設(shè)備服務(wù)裝置22 進(jìn)行處理,以及在后續(xù)進(jìn)而確定出將進(jìn)行業(yè)務(wù)升級(jí)或業(yè)務(wù)升級(jí)完成后,塊設(shè)備驅(qū)動(dòng)裝置20將為該塊設(shè)備服務(wù)裝置22預(yù)先維護(hù)的Pending隊(duì)列中的請(qǐng)求重新加入到為該塊設(shè)備服務(wù)裝置22預(yù)先維護(hù)的Waiting隊(duì)列中等待后續(xù)重新被調(diào)用并處理。較優(yōu)地,塊設(shè)備驅(qū)動(dòng)裝置20可以通過(guò)檢測(cè)自身與用戶態(tài)的塊設(shè)備服務(wù)裝置22之間的TCP通信連接是否正常來(lái)判斷塊設(shè)備服務(wù)裝置22是否將進(jìn)行升級(jí)操作或是已經(jīng)完成升級(jí),當(dāng)在檢測(cè)到自身與塊設(shè)備服務(wù)裝置22之間的TCP通信連接斷開(kāi)后,可以確定塊設(shè)備服務(wù)裝置22將進(jìn)行業(yè)務(wù)升級(jí),在檢測(cè)到自身與塊設(shè)備服務(wù)裝置22之間的TCP通信連接恢復(fù)連接后,可以確定塊設(shè)備服務(wù)裝置22業(yè)務(wù)升級(jí)已完畢。用戶態(tài)的塊設(shè)備服務(wù)裝置22,其通過(guò)例如TCP協(xié)議等接收來(lái)自內(nèi)核態(tài)的塊設(shè)備驅(qū)動(dòng)裝置20轉(zhuǎn)發(fā)過(guò)來(lái)的數(shù)據(jù)讀寫(xiě)請(qǐng)求,即接收塊設(shè)備驅(qū)動(dòng)裝置20處理的對(duì)應(yīng)該塊設(shè)備服務(wù)裝置22預(yù)先維護(hù)的Pending隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求,在接收到讀寫(xiě)請(qǐng)求后,對(duì)該請(qǐng)求進(jìn)行解析操作,解析包括驗(yàn)證該讀寫(xiě)請(qǐng)求是否合法、具體是讀請(qǐng)求還是寫(xiě)請(qǐng)求,讀寫(xiě)請(qǐng)求的起始位置及長(zhǎng)度信息等,并根據(jù)解析結(jié)果向本地或遠(yuǎn)程的存儲(chǔ)資源池進(jìn)行數(shù)據(jù)的讀操作或者寫(xiě)操作。如果是讀請(qǐng)求,則從本地或遠(yuǎn)程的存儲(chǔ)資源池23中將請(qǐng)求的數(shù)據(jù)讀取出來(lái),并通過(guò)例如TCP協(xié)議等將讀取到的數(shù)據(jù)及處理結(jié)果返回給內(nèi)核態(tài)的塊設(shè)備驅(qū)動(dòng)裝置20 ;如果是寫(xiě)請(qǐng)求,則將請(qǐng)求寫(xiě)入的數(shù)據(jù)存儲(chǔ)到本地或遠(yuǎn)程的存儲(chǔ)資源池23中,并通過(guò)例如TCP協(xié)議等將寫(xiě)請(qǐng)求的處理結(jié)果返回給內(nèi)核態(tài)的塊設(shè)備驅(qū)動(dòng)裝置20。用戶態(tài)的客戶端裝置21,其可以通過(guò)內(nèi)核態(tài)的塊設(shè)備驅(qū)動(dòng)裝置20控制各個(gè)塊設(shè)備服務(wù)裝置22啟動(dòng)工作或停止工作。在控制塊設(shè)備服務(wù)裝置22啟動(dòng)工作吋,用戶通過(guò)客戶端裝置21發(fā)起創(chuàng)建塊設(shè)備服務(wù)的請(qǐng)求后,客戶端裝置21會(huì)先與塊設(shè)備服務(wù)裝置22建立 TCP連接,然后再把創(chuàng)建好的TCP Socket句柄通過(guò)ioctl指令傳遞給塊設(shè)備驅(qū)動(dòng)裝置20,此后客戶端裝置21就可以關(guān)閉該TCP Socket套接字,這樣客戶端裝置21就實(shí)現(xiàn)了在內(nèi)核態(tài)的塊設(shè)備驅(qū)動(dòng)裝置20與用戶態(tài)的塊設(shè)備服務(wù)裝置22之間建立起了 TCP連接,后續(xù)所有發(fā)向塊設(shè)備驅(qū)動(dòng)裝置20的數(shù)據(jù)讀寫(xiě)請(qǐng)求都可以通過(guò)TCP連接轉(zhuǎn)發(fā)給塊設(shè)備服務(wù)裝置22。在控制塊設(shè)備服務(wù)裝置22停止工作吋,用戶通過(guò)客戶端裝置21發(fā)起停止某個(gè)塊設(shè)備服務(wù)的請(qǐng)求后,客戶端裝置21會(huì)通過(guò)ioctl指令向塊設(shè)備驅(qū)動(dòng)裝置20發(fā)起停止請(qǐng)求,塊設(shè)備驅(qū)動(dòng)裝置20接收到該請(qǐng)求后,會(huì)先向塊設(shè)備服務(wù)裝置22發(fā)送停止請(qǐng)求,塊設(shè)備服務(wù)裝置22接收到該請(qǐng)求后關(guān)閉TCP Socket套接字后安全退出;塊設(shè)備驅(qū)動(dòng)裝置20收到塊設(shè)備服務(wù)裝置22的停止反應(yīng)后,停止處理Pending隊(duì)列中的讀寫(xiě)請(qǐng)求,這樣塊設(shè)備服務(wù)裝置22就停止工作了。當(dāng)塊設(shè)備服務(wù)裝置22處于升級(jí)的過(guò)程中,客戶端裝置21可每隔一秒嘗試與塊設(shè)備服務(wù)裝置22建立TCP鏈接。如果新的TCP鏈接建立成功后,即表明塊設(shè)備服務(wù)裝置22 升級(jí)完成,然后客戶端裝置21將新創(chuàng)建好的TCP Socket句柄通過(guò)ioctl指令傳遞給塊設(shè)備驅(qū)動(dòng)裝置20。這樣塊設(shè)備服務(wù)裝置22升級(jí)完成后,塊設(shè)備驅(qū)動(dòng)裝置20與塊設(shè)備服務(wù)裝置22建立了新的TCP鏈接進(jìn)行數(shù)據(jù)讀寫(xiě)請(qǐng)求的通信處理。當(dāng)然,該客戶端裝置21為本申請(qǐng)物理服務(wù)器中的可選組成部分,除了使用客戶端裝置21來(lái)實(shí)現(xiàn)用戶對(duì)用戶態(tài)的塊設(shè)備服務(wù)裝置22的工作狀態(tài)進(jìn)行控制外,還可以基于其他例如定時(shí)功能、特定事件觸發(fā)功能等觸發(fā)機(jī)制自動(dòng)實(shí)現(xiàn)對(duì)用戶態(tài)的塊設(shè)備服務(wù)裝置22 的工作狀態(tài)進(jìn)行控制。本地或遠(yuǎn)程存儲(chǔ)資源池23,一般情況下存儲(chǔ)資源池23是類似于分布式文件系統(tǒng)的存儲(chǔ)服務(wù)器,該資源池23既可以是本地部署也可以是遠(yuǎn)程部署,大多數(shù)情形下都是遠(yuǎn)程部署的存儲(chǔ)資源池。存儲(chǔ)資源池23中存儲(chǔ)有弾性計(jì)算云系統(tǒng)中的各個(gè)虛擬服務(wù)器中的服務(wù)數(shù)據(jù)。具體地,在接收到物理服務(wù)器中的某個(gè)塊設(shè)備服務(wù)裝置22的數(shù)據(jù)讀請(qǐng)求吋,就從自身中讀取相關(guān)請(qǐng)求的數(shù)據(jù),并將讀取到的數(shù)據(jù)反饋給該塊設(shè)備服務(wù)裝置22 ;在接收到物理服務(wù)器中的某個(gè)塊設(shè)備服務(wù)裝置22的數(shù)據(jù)寫(xiě)請(qǐng)求吋,就將請(qǐng)求寫(xiě)入的數(shù)據(jù)存儲(chǔ)到自身中。如圖3所示,為本申請(qǐng)實(shí)施例中改進(jìn)后的物理服務(wù)器向本地或遠(yuǎn)程存儲(chǔ)資源池讀寫(xiě)數(shù)據(jù)的內(nèi)部處理流程示意圖,其中讀取數(shù)據(jù)的具體流程為當(dāng)本地的物理服務(wù)器中的文件系統(tǒng)層將對(duì)應(yīng)某個(gè)塊設(shè)備服務(wù)裝置的數(shù)據(jù)讀請(qǐng)求通過(guò)通用塊層、W/R調(diào)度層發(fā)送到塊設(shè)備驅(qū)動(dòng)裝置后,塊設(shè)備驅(qū)動(dòng)裝置會(huì)將該請(qǐng)求放入為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的Waiting隊(duì)列中等待后續(xù)處理,并在后續(xù)從該Waiting隊(duì)列中提取出該數(shù)據(jù)讀請(qǐng)求放入到為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的Pending隊(duì)列中并對(duì)該讀請(qǐng)求進(jìn)行處理,即將該讀請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)裝置,該塊設(shè)備服務(wù)裝置會(huì)根據(jù)讀請(qǐng)求從存儲(chǔ)池中讀取相關(guān)請(qǐng)求的數(shù)據(jù),并將讀取結(jié)果通過(guò)TCP連接返回給塊設(shè)備驅(qū)動(dòng)裝置,塊設(shè)備驅(qū)動(dòng)裝置進(jìn)而將讀取結(jié)果通過(guò)W/R調(diào)度層、通用塊層轉(zhuǎn)發(fā)給文件系統(tǒng)層,文件系統(tǒng)層再將讀取結(jié)果返回給系統(tǒng)調(diào)用。寫(xiě)入數(shù)據(jù)的具體流程為本地的物理服務(wù)器將數(shù)據(jù)寫(xiě)請(qǐng)求和請(qǐng)求寫(xiě)入的數(shù)據(jù)通過(guò)系統(tǒng)調(diào)用中的文件系統(tǒng)層、通用塊層、W/R調(diào)度層存儲(chǔ)到塊設(shè)備驅(qū)動(dòng)裝置,塊設(shè)備驅(qū)動(dòng)裝置會(huì)將該寫(xiě)請(qǐng)求放入為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的Waiting隊(duì)列中等待后續(xù)處理,并在后續(xù)從該Waiting隊(duì)列中提取出該數(shù)據(jù)寫(xiě)請(qǐng)求放入到為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的Pending隊(duì)列中并對(duì)該寫(xiě)請(qǐng)求進(jìn)行處理,即將該數(shù)據(jù)寫(xiě)請(qǐng)求和待寫(xiě)入的數(shù)據(jù)轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)裝置,該塊設(shè)備服務(wù)裝置通過(guò)解析數(shù)據(jù)寫(xiě)請(qǐng)求實(shí)現(xiàn)將待寫(xiě)入的數(shù)據(jù)保存到存儲(chǔ)資源池中。如圖4所示,為本申請(qǐng)實(shí)施例改進(jìn)后的物理服務(wù)器中的塊設(shè)備驅(qū)動(dòng)裝置的具體エ 作原理流程圖,其中,該塊設(shè)備驅(qū)動(dòng)裝置會(huì)分別為每個(gè)塊設(shè)備服務(wù)裝置預(yù)先維護(hù)兩個(gè)隊(duì)列, ー個(gè)隊(duì)列為Waiting隊(duì)列,用于放入毎次發(fā)向?qū)?yīng)塊設(shè)備服務(wù)裝置并等待其處理的數(shù)據(jù)讀寫(xiě)請(qǐng)求,使其進(jìn)入等待處理排隊(duì)狀態(tài),另ー個(gè)隊(duì)列為Pending隊(duì)列,用于放入針對(duì)對(duì)應(yīng)塊設(shè)備服務(wù)裝置當(dāng)前正在處理的數(shù)據(jù)讀寫(xiě)請(qǐng)求,基于維護(hù)的該兩個(gè)隊(duì)列,塊設(shè)備驅(qū)動(dòng)裝置的具體工作原理如下步驟40、塊設(shè)備驅(qū)動(dòng)裝置在毎次接收到物理服務(wù)器底層發(fā)來(lái)的針對(duì)某個(gè)塊設(shè)備服務(wù)裝置的數(shù)據(jù)讀寫(xiě)請(qǐng)求吋,將接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求放置到為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的Waiting隊(duì)列中進(jìn)行等待;步驟42,塊設(shè)備驅(qū)動(dòng)裝置在處理對(duì)應(yīng)該塊設(shè)備服務(wù)裝置的數(shù)據(jù)讀寫(xiě)請(qǐng)求吋,先從該Waiting隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求并移置到為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的Pending 隊(duì)列中,并將該P(yáng)ending隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給用戶態(tài)的該塊設(shè)備服務(wù)裝置進(jìn)行處理,以及在接收到該塊設(shè)備服務(wù)裝置對(duì)接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求正確處理的結(jié)果后,將轉(zhuǎn)發(fā)的數(shù)據(jù)讀寫(xiě)請(qǐng)求從Pending隊(duì)列中刪除;步驟44,塊設(shè)備驅(qū)動(dòng)裝置在確定出該塊設(shè)備服務(wù)裝置將進(jìn)行業(yè)務(wù)升級(jí)時(shí),停止將該P(yáng)ending隊(duì)列中的所有數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給塊設(shè)備服務(wù)裝置進(jìn)行處理;步驟46,塊設(shè)備驅(qū)動(dòng)裝置在確定出將進(jìn)行業(yè)務(wù)升級(jí)或業(yè)務(wù)升級(jí)完成后,將該P(yáng)ending隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求再移置回該Waiting隊(duì)列中繼續(xù)等待后續(xù)被再次調(diào)用并被處理。具體地,塊設(shè)備驅(qū)動(dòng)裝置可以通過(guò)檢測(cè)自身與該塊設(shè)備服務(wù)裝置之間的通信連接狀態(tài),來(lái)判斷該塊設(shè)備服務(wù)裝置將進(jìn)行業(yè)務(wù)升級(jí)還是已經(jīng)升級(jí)結(jié)束。更具體地在檢測(cè)到自身與該塊設(shè)備服務(wù)裝置之間的通信連接斷開(kāi)后,可以確定該塊設(shè)備服務(wù)裝置將進(jìn)行業(yè)務(wù)升級(jí),以及在檢測(cè)到自身與該塊設(shè)備服務(wù)裝置之間的通信連接恢復(fù)連接后,可以確定該塊設(shè)備服務(wù)裝置已經(jīng)完成業(yè)務(wù)升級(jí)。如圖5所示,為本申請(qǐng)實(shí)施例改進(jìn)后的物理服務(wù)器中的塊設(shè)備驅(qū)動(dòng)裝置在塊塊設(shè)備服務(wù)裝置進(jìn)行業(yè)務(wù)升級(jí)前后對(duì)維護(hù)的Waiting隊(duì)列、Pending隊(duì)列進(jìn)行調(diào)度的處理示意圖。內(nèi)核態(tài)的塊設(shè)備驅(qū)動(dòng)裝置為了支持塊設(shè)備服務(wù)裝置的熱部署(即在線升級(jí)),需要對(duì)接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求的狀態(tài)進(jìn)行維護(hù)。在塊設(shè)備驅(qū)動(dòng)裝置中,分別針對(duì)每個(gè)塊設(shè)備服務(wù)裝置采用兩個(gè)數(shù)據(jù)讀寫(xiě)隊(duì)列來(lái)維護(hù)讀寫(xiě)請(qǐng)求的狀態(tài),ー個(gè)是等待隊(duì)列(Waiting Queue),用來(lái)為每個(gè)塊設(shè)備服務(wù)裝置維護(hù)物理服務(wù)器中的W/R調(diào)度層下發(fā)下來(lái)的W/R請(qǐng)求,這些請(qǐng)求在 Waiting隊(duì)列中排隊(duì)等待塊設(shè)備驅(qū)動(dòng)裝置進(jìn)行后續(xù)處理;另ー個(gè)是懸而未決隊(duì)列(Pending Queue),用來(lái)維護(hù)塊設(shè)備驅(qū)動(dòng)裝置針對(duì)每個(gè)塊設(shè)備服務(wù)裝置當(dāng)前正在處理的W/R請(qǐng)求, Pending隊(duì)列中的這些W/R請(qǐng)求沒(méi)有處理完成,可能處于塊設(shè)備驅(qū)動(dòng)裝置正等待對(duì)應(yīng)塊設(shè)備服務(wù)裝置的處理應(yīng)答狀態(tài)。其中,在某個(gè)塊設(shè)備服務(wù)裝置未進(jìn)行業(yè)務(wù)升級(jí)期間,塊設(shè)備驅(qū)動(dòng)裝置在處理W/R請(qǐng)求吋,會(huì)先從為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的Waiting隊(duì)列的頭部取出ー個(gè)W/R請(qǐng)求,并將該取出的W/R請(qǐng)求從該Waiting隊(duì)列中刪除掉,然后將該W/R請(qǐng)求加入到為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的Pending隊(duì)列的頭部,并將該P(yáng)ending隊(duì)列中的各個(gè) W/R請(qǐng)求轉(zhuǎn)發(fā)給塊設(shè)備服務(wù)裝置進(jìn)行處理,并在接收到該塊設(shè)備服務(wù)裝置對(duì)接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求正確處理的結(jié)果后,將轉(zhuǎn)發(fā)的數(shù)據(jù)讀寫(xiě)請(qǐng)求從Pending隊(duì)列中刪除。當(dāng)該塊設(shè)備服務(wù)裝置需要業(yè)務(wù)升級(jí)時(shí),塊設(shè)備驅(qū)動(dòng)裝置將停止將對(duì)應(yīng)Pending隊(duì)列中的各個(gè)W/R請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)裝置進(jìn)行處理,即不再向該塊設(shè)備服務(wù)裝置發(fā)送新的W/R請(qǐng)求。當(dāng)該塊設(shè)備服務(wù)裝置將進(jìn)行升級(jí)或者升級(jí)完畢后,塊設(shè)備驅(qū)動(dòng)裝置將對(duì)應(yīng)的Pending隊(duì)列中的所有W/R請(qǐng)求(如圖5中所示的請(qǐng)求1、2、3、4、5、6····)重新加入到對(duì)應(yīng)的Waiting隊(duì)列中,以在后續(xù)重新接收塊設(shè)備驅(qū)動(dòng)裝置的再次調(diào)度處理。由此可見(jiàn),通過(guò)在弾性計(jì)算云系統(tǒng)中的物理服務(wù)器中増加塊設(shè)備驅(qū)動(dòng)裝置,并通過(guò)該塊設(shè)備驅(qū)動(dòng)裝置對(duì)為每個(gè)塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的兩個(gè)隊(duì)列進(jìn)行調(diào)度,可以實(shí)現(xiàn)在不中斷為數(shù)據(jù)存儲(chǔ)使用者提供存儲(chǔ)服務(wù)的同吋,完成后臺(tái)的存儲(chǔ)服務(wù)業(yè)務(wù)升級(jí)處理,從而提高了弾性計(jì)算云系統(tǒng)中數(shù)據(jù)存儲(chǔ)的可用性。此外,上述方案對(duì)于使用者而言也是透明的, 使數(shù)據(jù)存儲(chǔ)使用者幾乎感知不到存儲(chǔ)服務(wù)業(yè)務(wù)升級(jí)對(duì)于自己使用數(shù)據(jù)存儲(chǔ)業(yè)務(wù)所造成的影響,從而提高了用戶的使用體驗(yàn)。相應(yīng)地,如圖6所示,為本申請(qǐng)實(shí)施例中改進(jìn)的物理服務(wù)器中新增的塊設(shè)備驅(qū)動(dòng)裝置的具體組成結(jié)構(gòu)示意圖,具體包括等待隊(duì)列維護(hù)單元60,用于分別為每個(gè)塊設(shè)備服務(wù)裝置預(yù)先維護(hù)ー個(gè)Waiting隊(duì)列,用于放入毎次接收到的針對(duì)相應(yīng)塊設(shè)備服務(wù)裝置的數(shù)據(jù)讀寫(xiě)請(qǐng)求,使其進(jìn)入等待處理排隊(duì)狀態(tài);未決隊(duì)列維護(hù)單元61,用于分別為每個(gè)塊設(shè)備服務(wù)裝置預(yù)先維護(hù)另ー個(gè)Pending隊(duì)列,用于放入針對(duì)相應(yīng)塊設(shè)備服務(wù)裝置當(dāng)前正在處理的數(shù)據(jù)讀寫(xiě)請(qǐng)求;具體地,從Waiting隊(duì)列維護(hù)單元60為某個(gè)塊設(shè)備服務(wù)裝置維護(hù)的 Waiting隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求并移置到為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的Pending隊(duì)列中;具體地,未決隊(duì)列維護(hù)單元61可以從對(duì)應(yīng)的Waiting隊(duì)列的隊(duì)列頭中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求,并在該Waiting隊(duì)列中將提取出的數(shù)據(jù)讀寫(xiě)請(qǐng)求刪除棹,進(jìn)而將提取出的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置到對(duì)應(yīng)預(yù)先維護(hù)的Pending隊(duì)列的隊(duì)列頭中。讀寫(xiě)請(qǐng)求處理單元62,用于將Pending 隊(duì)列維護(hù)單元61維護(hù)的對(duì)應(yīng)Pending隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給塊設(shè)備服務(wù)裝置進(jìn)行處理,并在接收到該塊設(shè)備服務(wù)裝置對(duì)接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求正確處理的結(jié)果后,將轉(zhuǎn)發(fā)的數(shù)據(jù)讀寫(xiě)請(qǐng)求從Pending隊(duì)列中刪除;并在確定出弾性計(jì)算云系統(tǒng)中的塊設(shè)備服務(wù)裝置將進(jìn)行業(yè)務(wù)升級(jí)時(shí),停止將Pending隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給塊設(shè)備服務(wù)裝置進(jìn)行處理,以及在確定出將進(jìn)行業(yè)務(wù)升級(jí)或者業(yè)務(wù)升級(jí)完成后,將對(duì)應(yīng)的Pending隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置回對(duì)應(yīng)的Waiting隊(duì)列中繼續(xù)等待后續(xù)再次被讀寫(xiě)請(qǐng)求處理單元62的調(diào)度處理。具體地讀寫(xiě)請(qǐng)求處理單元62具體可以通過(guò)檢測(cè)塊設(shè)備驅(qū)動(dòng)裝置與塊設(shè)備服務(wù)裝置之間的通信連接狀態(tài),在檢測(cè)到該通信連接斷開(kāi)后,可以確定塊設(shè)備服務(wù)裝置將進(jìn)行業(yè)務(wù)升級(jí),以及在檢測(cè)到該通信連接恢復(fù)連接后,可以確定塊設(shè)備服務(wù)裝置業(yè)務(wù)升級(jí)完成。如圖7所示,為本申請(qǐng)實(shí)施例中在進(jìn)行服務(wù)器業(yè)務(wù)升級(jí)時(shí),控制物理服務(wù)器中的塊設(shè)備驅(qū)動(dòng)裝置的操作示意圖,其操作流程具體如下步驟70,在存儲(chǔ)服務(wù)升級(jí)之前,升級(jí)維護(hù)人員通過(guò)用戶態(tài)的客戶端裝置向內(nèi)核態(tài)的塊設(shè)備驅(qū)動(dòng)裝置發(fā)出ioctl指令,指示塊設(shè)備驅(qū)動(dòng)裝置維持(Hold)所有的W/R請(qǐng)求。步驟72,接下來(lái),升級(jí)維護(hù)人員就按照正常的升級(jí)流程對(duì)存儲(chǔ)服務(wù)進(jìn)行業(yè)務(wù)升級(jí) (業(yè)務(wù)升級(jí)包括停止服務(wù),升級(jí)服務(wù)程序,發(fā)布新的服務(wù)等)。這樣就完成了一次在線對(duì)存儲(chǔ)服務(wù)進(jìn)行業(yè)務(wù)升級(jí)的熱部署,而在熱部署的過(guò)程中,塊設(shè)備驅(qū)動(dòng)裝置會(huì)將維持(Hold)所有的W/R請(qǐng)求。步驟74,當(dāng)部署好后,塊設(shè)備驅(qū)動(dòng)裝置再將所有的W/R請(qǐng)求放開(kāi),數(shù)據(jù)存儲(chǔ)服務(wù)將被繼續(xù)處理。本領(lǐng)域的技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、裝置(設(shè)備)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤(pán)存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。本申請(qǐng)是參照根據(jù)本申請(qǐng)實(shí)施例的方法、裝置(設(shè)備)和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每ー 流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生ー個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖ー個(gè)流程或多個(gè)流程和/或方框圖ー個(gè)方框或多個(gè)方框中指定的功能的裝置。這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖ー個(gè)流程或多個(gè)流程和/或方框圖ー個(gè)方框或多個(gè)方框中指定的功能。這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖ー個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。盡管已描述了本申請(qǐng)的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請(qǐng)范圍的所有變更和修改。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本申請(qǐng)進(jìn)行各種改動(dòng)和變型而不脫離本申請(qǐng)的精神和范圍。這樣,倘若本申請(qǐng)的這些修改和變型屬于本申請(qǐng)權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請(qǐng)也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng)中的服務(wù)器,其特征在干,包括塊設(shè)備驅(qū)動(dòng)裝置和至少ー個(gè)塊設(shè)備服務(wù)裝置,其中塊設(shè)備驅(qū)動(dòng)裝置,用于在接收到對(duì)應(yīng)ー個(gè)塊設(shè)備服務(wù)裝置的數(shù)據(jù)讀寫(xiě)請(qǐng)求吋,將接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求放置到為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的等待隊(duì)列中,并從所述等待隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求并移置到為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的未決隊(duì)列中,并將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)裝置進(jìn)行處理,并在接收到該塊設(shè)備服務(wù)裝置對(duì)接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求的處理結(jié)果后,將轉(zhuǎn)發(fā)的數(shù)據(jù)讀寫(xiě)請(qǐng)求從所述未決隊(duì)列中刪除; 并在確定出該塊設(shè)備服務(wù)裝置將進(jìn)行業(yè)務(wù)升級(jí)時(shí),停止將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)進(jìn)行處理,以及在確定出將進(jìn)行業(yè)務(wù)升級(jí)或者業(yè)務(wù)升級(jí)完成后,將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置回所述等待隊(duì)列中;塊設(shè)備服務(wù)裝置,用于根據(jù)塊設(shè)備驅(qū)動(dòng)裝置轉(zhuǎn)發(fā)來(lái)的數(shù)據(jù)讀寫(xiě)請(qǐng)求,針對(duì)塊設(shè)備存儲(chǔ)資源池進(jìn)行對(duì)應(yīng)請(qǐng)求數(shù)據(jù)的讀寫(xiě)操作。
2.如權(quán)利要求1所述的服務(wù)器,其特征在于,還包括客戶端裝置,用于控制塊設(shè)備服務(wù)裝置啟動(dòng),并在啟動(dòng)后建立所述塊設(shè)備驅(qū)動(dòng)裝置與啟動(dòng)的該塊設(shè)備服務(wù)裝置之間的通信連接;以及控制塊設(shè)備驅(qū)動(dòng)裝置停止,并在停止后拆除所述塊設(shè)備驅(qū)動(dòng)裝置與該塊設(shè)備服務(wù)裝置之間的通信連接。
3.如權(quán)利要求1所述的服務(wù)器,其特征在干,所述塊設(shè)備驅(qū)動(dòng)裝置具體通過(guò)檢測(cè)自身與該塊設(shè)備服務(wù)裝置之間的通信連接,并在檢測(cè)到自身與該塊設(shè)備服務(wù)裝置之間的通信連接斷開(kāi)后,確定該塊設(shè)備服務(wù)裝置將進(jìn)行業(yè)務(wù)升級(jí),以及在檢測(cè)到自身與該塊設(shè)備服務(wù)裝置之間的通信連接恢復(fù)連接后,確定該塊設(shè)備服務(wù)裝置業(yè)務(wù)升級(jí)完成。
4.一種對(duì)基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng)進(jìn)行升級(jí)的方法,其特征在干,包括在毎次接收到對(duì)應(yīng)ー個(gè)塊設(shè)備服務(wù)的數(shù)據(jù)讀寫(xiě)請(qǐng)求吋,將接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求放置到為該塊設(shè)備服務(wù)預(yù)先維護(hù)的等待隊(duì)列中;從所述等待隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求并移置到為該塊設(shè)備服務(wù)預(yù)先維護(hù)的未決隊(duì)列中,并將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)進(jìn)行處理,并在接收到該塊設(shè)備服務(wù)對(duì)接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求的處理結(jié)果后,將轉(zhuǎn)發(fā)的數(shù)據(jù)讀寫(xiě)請(qǐng)求從所述未決隊(duì)列中刪除;以及在確定出該塊設(shè)備服務(wù)將進(jìn)行業(yè)務(wù)升級(jí)時(shí),停止將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)進(jìn)行處理;以及在確定出將進(jìn)行業(yè)務(wù)升級(jí)或者業(yè)務(wù)升級(jí)完成后,將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置回所述等待隊(duì)列中。
5.如權(quán)利要求4所述的方法,其特征在于,確定出該塊設(shè)備服務(wù)將進(jìn)行業(yè)務(wù)升級(jí)、及業(yè)務(wù)升級(jí)完成,具體包括檢測(cè)與該塊設(shè)備服務(wù)之間的通信連接;在檢測(cè)到與該塊設(shè)備服務(wù)之間的通信連接斷開(kāi)后,確定該塊設(shè)備服務(wù)將進(jìn)行業(yè)務(wù)升級(jí);以及在檢測(cè)到與該塊設(shè)備服務(wù)之間的通信連接恢復(fù)連接后,確定該塊設(shè)備服務(wù)業(yè)務(wù)升級(jí)完成。
6.如權(quán)利要求4所述的方法,其特征在干,從所述等待隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求并移置到預(yù)先維護(hù)的未決隊(duì)列中,具體包括從所述等待隊(duì)列的隊(duì)列頭中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求;并在所述等待隊(duì)列中將提取出的數(shù)據(jù)讀寫(xiě)請(qǐng)求刪除;將提取出的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置到預(yù)先維護(hù)的未決隊(duì)列的隊(duì)列頭中。
7.一種對(duì)基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng)進(jìn)行升級(jí)的裝置,其特征在干,包括等待隊(duì)列維護(hù)單元,用于在每次接收到對(duì)應(yīng)ー個(gè)塊設(shè)備服務(wù)的數(shù)據(jù)讀寫(xiě)請(qǐng)求時(shí),將接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求放置到為該塊設(shè)備服務(wù)預(yù)先維護(hù)的等待隊(duì)列中;未決隊(duì)列維護(hù)單元,用于從所述等待隊(duì)列維護(hù)單元維護(hù)的等待隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求并移置到為該塊設(shè)備服務(wù)預(yù)先維護(hù)的未決隊(duì)列中;讀寫(xiě)請(qǐng)求處理單元,用于將所述未決隊(duì)列維護(hù)單元維護(hù)的未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)進(jìn)行處理,并在接收到該塊設(shè)備服務(wù)對(duì)接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求的處理結(jié)果后,將轉(zhuǎn)發(fā)的數(shù)據(jù)讀寫(xiě)請(qǐng)求從所述未決隊(duì)列中刪除;并在確定出該塊設(shè)備服務(wù)將進(jìn)行業(yè)務(wù)升級(jí)時(shí),停止將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)進(jìn)行處理,以及在確定出將進(jìn)行業(yè)務(wù)升級(jí)或者業(yè)務(wù)升級(jí)完成后,將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置回所述等待隊(duì)列中。
8.如權(quán)利要求7所述的裝置,其特征在干,所述讀寫(xiě)請(qǐng)求處理單元具體通過(guò)檢測(cè)所述裝置與該塊設(shè)備服務(wù)之間的通信連接,并在檢測(cè)到所述通信連接斷開(kāi)后,確定該塊設(shè)備服務(wù)將進(jìn)行業(yè)務(wù)升級(jí),以及在檢測(cè)到所述通信連接恢復(fù)連接后,確定該塊設(shè)備服務(wù)業(yè)務(wù)升級(jí)成。
9.如權(quán)利要求7所述的裝置,其特征在干,所述未決隊(duì)列維護(hù)單元具體從所述等待隊(duì)列的隊(duì)列頭中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求,并在所述等待隊(duì)列中將提取出的數(shù)據(jù)讀寫(xiě)請(qǐng)求刪除,以及將提取出的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置到預(yù)先維護(hù)的未決隊(duì)列的隊(duì)列頭中。
10.一種基于塊設(shè)備存儲(chǔ)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的弾性計(jì)算云系統(tǒng),其特征在干,包括存儲(chǔ)資源池,用于基于塊設(shè)備存儲(chǔ)服務(wù)方式存儲(chǔ)彈性計(jì)算云系統(tǒng)中的數(shù)據(jù);和至少ー個(gè)物理服務(wù)器,用于在每次接收到對(duì)應(yīng)ー個(gè)塊設(shè)備服務(wù)的數(shù)據(jù)讀寫(xiě)請(qǐng)求時(shí),將接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求放置到為該塊設(shè)備服務(wù)預(yù)先維護(hù)的等待隊(duì)列中,并從所述等待隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求并移置到為該塊設(shè)備服務(wù)預(yù)先維護(hù)的未決隊(duì)列中,井根據(jù)所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求,針對(duì)所述存儲(chǔ)資源池進(jìn)行對(duì)應(yīng)請(qǐng)求數(shù)據(jù)的讀寫(xiě)操作;并在確定出該塊設(shè)備服務(wù)將進(jìn)行業(yè)務(wù)升級(jí)時(shí),停止對(duì)所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求進(jìn)行處理,以及在將進(jìn)行業(yè)務(wù)升級(jí)或者業(yè)務(wù)升級(jí)完成后,將所述未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置回所述等待隊(duì)列中。
全文摘要
本申請(qǐng)公開(kāi)了一種彈性計(jì)算云系統(tǒng)中的服務(wù)器,包括塊設(shè)備驅(qū)動(dòng)裝置和至少一個(gè)塊設(shè)備服務(wù)裝置,塊設(shè)備驅(qū)動(dòng)裝置用于在接收到對(duì)應(yīng)一個(gè)塊設(shè)備服務(wù)裝置的數(shù)據(jù)讀寫(xiě)請(qǐng)求時(shí),將接收到的數(shù)據(jù)讀寫(xiě)請(qǐng)求放置到為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的等待隊(duì)列中,并從等待隊(duì)列中提取數(shù)據(jù)讀寫(xiě)請(qǐng)求移置到為該塊設(shè)備服務(wù)裝置預(yù)先維護(hù)的未決隊(duì)列中,并將未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù)裝置處理;并在確定出該塊設(shè)備服務(wù)裝置將升級(jí)時(shí),停止將未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給該塊設(shè)備服務(wù),以及在確定出業(yè)務(wù)升級(jí)完成后,將未決隊(duì)列中的數(shù)據(jù)讀寫(xiě)請(qǐng)求移置回等待隊(duì)列中;塊設(shè)備服務(wù)裝置根據(jù)塊設(shè)備驅(qū)動(dòng)裝置發(fā)來(lái)的數(shù)據(jù)讀寫(xiě)請(qǐng)求,進(jìn)行對(duì)應(yīng)請(qǐng)求數(shù)據(jù)的讀寫(xiě)操作。
文檔編號(hào)G06F9/445GK102591668SQ20111000129
公開(kāi)日2012年7月18日 申請(qǐng)日期2011年1月5日 優(yōu)先權(quán)日2011年1月5日
發(fā)明者康華, 陳偉才, 陳波 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司