數(shù)據(jù)訪問由若干不同類型的數(shù)據(jù)訪問協(xié)議來促成。數(shù)據(jù)訪問協(xié)議提供用于計(jì)算機(jī)內(nèi)或計(jì)算機(jī)之間的數(shù)據(jù)通信的規(guī)則。不同類型的數(shù)據(jù)訪問協(xié)議提供訪問數(shù)據(jù)時(shí)的某些優(yōu)點(diǎn)。具體而言,共享文件訪問(“SFA”)協(xié)議,諸如服務(wù)器消息塊(“SMB”),可被用來訪問文件系統(tǒng)資源,且表述性狀態(tài)轉(zhuǎn)移(“REST”)協(xié)議也可被用于受所定義的體系結(jié)構(gòu)約束限制的客戶機(jī)服務(wù)器交互。每一協(xié)議是用于傳遞消息以訪問數(shù)據(jù)的良好定義的格式。因而,在各協(xié)議被實(shí)現(xiàn)為應(yīng)用編程接口(API)以鏈接到數(shù)據(jù)訪問服務(wù)時(shí),一個(gè)協(xié)議的API庫(kù)不可避免地排除其他協(xié)議API來運(yùn)作。就此,常規(guī)數(shù)據(jù)訪問協(xié)議和API在促進(jìn)整合文件共享和基于約束的客戶機(jī)服務(wù)器交互方面不是高效的,因?yàn)槌R?guī)數(shù)據(jù)訪問協(xié)議和API不能提供對(duì)整合SMB和REST功能性的全面支持。
發(fā)明概述
提供本概述以便以簡(jiǎn)化的形式介紹將在以下具體實(shí)施方式中進(jìn)一步描述的一些概念。本概述不旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在獨(dú)立地用于幫助確定所要求保護(hù)的主題的范圍。
在各實(shí)施例中,提供了用于提供對(duì)文件系統(tǒng)的訪問的方法和系統(tǒng)。接收具有針對(duì)件系統(tǒng)中的文件的操作修飾符的基于SFA的操作?;赟FA的操作是基于文件表述性狀態(tài)轉(zhuǎn)移(REST)接口來定義的。SFA-REST接口包括SFA協(xié)議和REST協(xié)議的整合功能性。接收針對(duì)分布式文件系統(tǒng)中的文件的基于REST的操作。基于REST的操作是基于SFA-REST接口來定義的。使用操作修飾符執(zhí)行基于SFA的操作。操作修飾符被參考以執(zhí)行基于REST的操作?;赟FA-REST接口執(zhí)行基于REST的操作。文件模式可被實(shí)現(xiàn)以用于訪問文件系統(tǒng)。該模式包括用于存儲(chǔ)文件的各個(gè)表,這些表包括與SFA-REST接口的各元素相對(duì)應(yīng)的字段。進(jìn)一步設(shè)想了快照組件可被實(shí)現(xiàn)以對(duì)文件系統(tǒng)中的文件共享進(jìn)行備份。
附圖簡(jiǎn)要說明
下面參考附圖詳細(xì)描述本發(fā)明,其中:
圖1是適用于實(shí)現(xiàn)本發(fā)明的各實(shí)施例的示例性計(jì)算環(huán)境的框圖;
圖2A-D是其中可采用本發(fā)明的各實(shí)施例的示例性云計(jì)算基礎(chǔ)設(shè)施和平臺(tái)的框圖;
圖3是示出根據(jù)本發(fā)明的各實(shí)施例的用于訪問分布式文件系統(tǒng)中的文件的方法的流程圖;
圖4是示出根據(jù)本發(fā)明的各實(shí)施例的用于對(duì)文件共享進(jìn)行快照的方法的流程圖;
圖5是示出根據(jù)本發(fā)明的各實(shí)施例的用于訪問分布式文件系統(tǒng)中的文件的方法的流程圖;以及
圖6是示出根據(jù)本發(fā)明的各實(shí)施例的用于訪問分布式文件系統(tǒng)中的文件的方法的流程圖。
發(fā)明詳細(xì)描述
此處用細(xì)節(jié)來描述本發(fā)明的各實(shí)施例的主題以滿足法定要求。然而,該描述本身并非旨在限制本專利的范圍。相反,發(fā)明人已設(shè)想所要求保護(hù)的主題還可結(jié)合其它當(dāng)前或未來技術(shù)以其它方式來實(shí)施,以包括不同的步驟或類似于本文中所描述的步驟的步驟組合。此外,盡管術(shù)語“步驟”和/或“框”可在此處用于指示所采用的方法的不同元素,但除非而且僅當(dāng)明確描述了各個(gè)步驟的順序時(shí),該術(shù)語不應(yīng)被解釋為意味著此處公開的各個(gè)步驟之中或之間的任何特定順序。
出于本公開的目的,單詞“包括”具有與單詞“包含”一樣廣義的含義。另外,諸如“一”和“一個(gè)”包括復(fù)數(shù)以及單數(shù),除非另外相反地指明。這樣,例如,“一個(gè)特征”的要求在存在一個(gè)或多個(gè)特征的情況下被滿足。同樣,術(shù)語“或”包括合取、析取及這兩者(a或b由此包括a或b任一,以及a和b)。
出于下文的詳細(xì)討論的目的,參考基于SFA的操作經(jīng)由HTTP使用交互以支持云計(jì)算平臺(tái)上的文件服務(wù)的基于SFA和REST的操作描述了本發(fā)明的各實(shí)施例;然而,用于云計(jì)算平臺(tái)上的文件服務(wù)的經(jīng)由SFA-REST接口的內(nèi)容共享僅是示例性的且設(shè)想了所描述的技術(shù)可被擴(kuò)展到基于SFA的操作和基于REST的操作在其中交互的其他實(shí)現(xiàn)上下文。
共享文件訪問協(xié)議被用于提供對(duì)文件、打印機(jī)、串行端口以及網(wǎng)絡(luò)上的節(jié)點(diǎn)之間的通信的共享訪問。具體而言,共享文件訪問協(xié)議允許客戶機(jī)如同文件在本地計(jì)算機(jī)上那樣來操縱文件。諸如讀、寫、創(chuàng)建、刪除等操作都被支持,僅有的區(qū)別是文件不在計(jì)算設(shè)備本地而是實(shí)際上在遠(yuǎn)程服務(wù)器上。
共享文件訪問協(xié)議實(shí)現(xiàn)通過客戶機(jī)-服務(wù)器辦法來工作,其中客戶機(jī)作出特定請(qǐng)求而服務(wù)器相應(yīng)地作出響應(yīng)。具體而言,SMB協(xié)議提供文件系統(tǒng)服務(wù),使得客戶機(jī)可對(duì)文件服務(wù)器作出請(qǐng)求。作為背景,文件系統(tǒng)被用來控制數(shù)據(jù)是如何存儲(chǔ)和檢索的,使得文件系統(tǒng)存儲(chǔ)中的信息段可彼此區(qū)分開。用來管理數(shù)據(jù)和它們的名稱的結(jié)構(gòu)和邏輯規(guī)則被稱為文件系統(tǒng)。SMB服務(wù)器使它們的文件系統(tǒng)以及其他資源對(duì)網(wǎng)絡(luò)上的客戶機(jī)可用。如此,SMB協(xié)議是優(yōu)選的文件共享協(xié)議。
表述性狀態(tài)轉(zhuǎn)移(“REST”)指的是包括應(yīng)用于分布式超媒體系統(tǒng)的組件、連接器、以及數(shù)據(jù)元素的體系結(jié)構(gòu)約束的協(xié)作集的軟件體系結(jié)構(gòu)樣式。就此,REST協(xié)議可被描述為體系結(jié)構(gòu)約束協(xié)議。正式REST體系結(jié)構(gòu)約束包括客戶機(jī)-服務(wù)器、無狀態(tài)、可高速緩存、自描述消息,以及通過表示來操縱資源,以及其他。具體而言,無狀態(tài)性可以指如下概念:客戶機(jī)-服務(wù)器通信受在各請(qǐng)求之間沒有客戶機(jī)上下文被存儲(chǔ)在服務(wù)器上的約束或者在各請(qǐng)求之間在客戶機(jī)中根本沒有維護(hù)狀態(tài)。來自任何客戶機(jī)的每一請(qǐng)求包含服務(wù)該請(qǐng)求所必需的所有信息,并且會(huì)話狀態(tài)被保持在客戶機(jī)中。REST也可被配置成在超文本傳輸協(xié)議(“HTTP”)上運(yùn)行。例如,包含可擴(kuò)展標(biāo)記語言(“XML”)文件的指定網(wǎng)頁(yè)可被讀取,其中XML描述并具有所需內(nèi)容。被實(shí)現(xiàn)為API的REST協(xié)議可以用在移動(dòng)應(yīng)用、社交聯(lián)網(wǎng)網(wǎng)站、以及自動(dòng)化業(yè)務(wù)過程中。REST樣式強(qiáng)調(diào)客戶機(jī)和服務(wù)之間的交互通過具有有限數(shù)目的操作來增強(qiáng)。資源可被指派它們自己的唯一的統(tǒng)一資源標(biāo)識(shí)符(“URI”)。
計(jì)算平臺(tái)一般可以指具有被設(shè)計(jì)成在該平臺(tái)內(nèi)運(yùn)行、服從約束并且利用平臺(tái)設(shè)施的軟件片段的現(xiàn)有環(huán)境。該平臺(tái)包括硬件體系結(jié)構(gòu)和軟件框架,其中該組合可允許客戶機(jī)和服務(wù)器使用數(shù)據(jù)訪問協(xié)議來通信。典型平臺(tái)包括硬件體系結(jié)構(gòu)、操作系統(tǒng)以及運(yùn)行時(shí)庫(kù)。硬件體系結(jié)構(gòu)指的是物理組件的標(biāo)識(shí)和相互關(guān)系,而軟件框架指的是其中軟件提供通用功能的抽象。具體而言,軟件框架(例如,REST API)可以允許訪問團(tuán)塊存儲(chǔ)中的團(tuán)塊。就此,例如,客戶可以在專用平臺(tái)基礎(chǔ)設(shè)施上訪問針對(duì)各應(yīng)用的數(shù)據(jù)(例如,團(tuán)塊數(shù)據(jù))團(tuán)塊存儲(chǔ)。該平臺(tái)可被實(shí)現(xiàn)為分布式云計(jì)算基礎(chǔ)設(shè)施中的計(jì)算平臺(tái)。
通常,云計(jì)算平臺(tái)用于以分布式的方式來存儲(chǔ)數(shù)據(jù)或運(yùn)行服務(wù)應(yīng)用。計(jì)算平臺(tái)可以跨越包括國(guó)家和洲的廣泛地理位置。云計(jì)算平臺(tái)可視提供不同類型服務(wù)的公共云,不同類型的服務(wù)包括計(jì)算服務(wù)(例如,虛擬機(jī)、網(wǎng)站、云服務(wù)和移動(dòng)服務(wù))、數(shù)據(jù)服務(wù)(例如,存儲(chǔ)、SQL數(shù)據(jù)庫(kù)、SQL報(bào)告、表、備份、以及恢復(fù))、網(wǎng)絡(luò)服務(wù)(例如,虛擬網(wǎng)絡(luò)、話務(wù)管理器、數(shù)據(jù)傳遞)以及應(yīng)用服務(wù)(例如,媒體服務(wù)、服務(wù)總線、通知中樞、和多因子認(rèn)證)。例如,云計(jì)算平臺(tái)提供以供在可接入因特網(wǎng)的數(shù)據(jù)中心內(nèi)的機(jī)器上運(yùn)行服務(wù)應(yīng)用和存儲(chǔ)數(shù)據(jù)。
云計(jì)算平臺(tái)組件(例如,結(jié)構(gòu)控制器)進(jìn)一步負(fù)責(zé)圍繞以下的各種職責(zé):監(jiān)視、維護(hù)和管理計(jì)算機(jī)資源、網(wǎng)絡(luò)設(shè)備、串行設(shè)備和支持結(jié)構(gòu)的底層功能性的功率單元的健康。各種不同類型的云配置可與本發(fā)明的各實(shí)施例一起實(shí)現(xiàn),因而本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)理解并明白,云計(jì)算平臺(tái)的合適結(jié)構(gòu)可被使用且本發(fā)明的各實(shí)施例不限于本文公開的那些。
平臺(tái)可支持各服務(wù),這些服務(wù)支持對(duì)數(shù)據(jù)的服務(wù)。數(shù)據(jù)訪問由若干不同類型的數(shù)據(jù)訪問協(xié)議來促進(jìn)。數(shù)據(jù)訪問協(xié)議提供用于計(jì)算機(jī)內(nèi)或計(jì)算機(jī)之間的數(shù)據(jù)通信的規(guī)則。不同類型的數(shù)據(jù)訪問協(xié)議提供訪問數(shù)據(jù)時(shí)的某些優(yōu)點(diǎn)。具體而言,SMB協(xié)議是優(yōu)選文件共享協(xié)議,且REST協(xié)議被頻繁用于基于約束的客戶機(jī)服務(wù)器交互。每一協(xié)議是用于傳遞消息以訪問數(shù)據(jù)的良好定義的格式。因而,在各協(xié)議被實(shí)現(xiàn)為應(yīng)用編程接口(API)以鏈接到數(shù)據(jù)訪問服務(wù)時(shí),一個(gè)協(xié)議的API庫(kù)不可避免地排除其他協(xié)議API來運(yùn)作。就此,常規(guī)數(shù)據(jù)訪問協(xié)議和API在促進(jìn)整合文件共享和基于約束的客戶機(jī)服務(wù)器交互方面不是高效的,因?yàn)槌R?guī)數(shù)據(jù)訪問協(xié)議和API不能提供對(duì)整合SMB和REST功能性的全面支持。另外,傳統(tǒng)文件系統(tǒng)訪問基于通常復(fù)雜且對(duì)于安裝、配置以及操作而言昂貴的直接附連存儲(chǔ)(“DAS”)和存儲(chǔ)區(qū)域網(wǎng)絡(luò)(“SAN”)解決方案。在基礎(chǔ)層面,沒有基于云的平臺(tái)可用于支持提供基于共享文件訪問協(xié)議和REST協(xié)議的SFA-REST API(“SFA-REST接口”)來訪問文件系統(tǒng)的文件服務(wù)。。云計(jì)算平臺(tái)上的文件服務(wù)可以提供對(duì)來自客戶機(jī)的針對(duì)文件系統(tǒng)的并行訪問的全面支持,同時(shí)利用云計(jì)算基礎(chǔ)設(shè)施的可用性和可伸縮性來支持該平臺(tái)。
因此,本發(fā)明的各實(shí)施例提供簡(jiǎn)單且高效的云計(jì)算平臺(tái)文件服務(wù)以及用于基于文件服務(wù)來訪問文件的方法,其中文件服務(wù)包括SFA-REST接口。具體而言,在本文被寬泛定義的SFA-REST接口組件指的是SFA協(xié)議和REST協(xié)議的功能性的整合實(shí)現(xiàn)。就此,SFA-REST接口支持用于訪問文件共享的基于SFA的操作,SFA-REST接口部分地基于實(shí)現(xiàn)SFA協(xié)議的各元素。SFA-REST接口進(jìn)一步支持用于訪問文件共享的基于REST的操作,SFA-REST接口至少部分地基于實(shí)現(xiàn)REST協(xié)議的各元素。SFA-REST接口可進(jìn)一步實(shí)現(xiàn)在向提供對(duì)共享文件的訪問的文件服務(wù)提供虛擬機(jī)、存儲(chǔ)、負(fù)載平衡、以及聯(lián)網(wǎng)的云計(jì)算基礎(chǔ)設(shè)施中的平臺(tái)上。云計(jì)算基礎(chǔ)設(shè)施可獨(dú)立地支持文件服務(wù),然而在各實(shí)施例中,團(tuán)塊服務(wù)可以與文件服務(wù)并行運(yùn)行。文件服務(wù)和團(tuán)塊服務(wù)兩者可利用云計(jì)算基礎(chǔ)設(shè)施中可用的特征。
支持整合功能性的SFA-REST接口的示例性實(shí)現(xiàn)可被闡示為具有SFA-REST接口的高速緩存組件。將在下文進(jìn)一步更詳細(xì)地討論高速緩存組件。高速緩存組件可以促進(jìn)確定文件服務(wù)資源的多少內(nèi)容(例如,文件或目錄)可被高速緩存在客戶機(jī)上。文件的基于SFA的高速緩存可被稱為SMB租賃,它不同于REST租賃。在下文也更詳細(xì)地討論了REST租賃的特征。繼續(xù)參考SMB租賃,作為示例,在SFA客戶機(jī)打開文件時(shí),SFA客戶機(jī)可請(qǐng)求最大高速緩存量(例如,讀、寫、句柄)。SFA客戶機(jī)可以傳遞請(qǐng)求高速緩存的具有操作修飾符的基于SFA的操作?;诖蜷_到該文件的其他句柄的類型和數(shù)目,文件服務(wù)可以用對(duì)以下內(nèi)容的確定來對(duì)客戶機(jī)作出響應(yīng):可對(duì)指定文件執(zhí)行讀、寫還是甚至用于關(guān)閉句柄或打開更多句柄的調(diào)用。在文件由第一客戶機(jī)獨(dú)占地訪問時(shí),該系統(tǒng)可以授予完全高速緩存(讀、寫以及句柄)。如果第二客戶機(jī)嘗試打開到該文件的句柄,則該系統(tǒng)可能需要中斷SMB租賃以確保第一客戶機(jī)作出的變更對(duì)第二客戶機(jī)是可見的。中斷SMB租賃包括與具有SMB租賃的第一客戶機(jī)通信以在SMB租賃被中斷之前將變更轉(zhuǎn)儲(chǔ)清除到服務(wù)器。高速緩存組件還可在針對(duì)SMB租賃下的文件請(qǐng)求基于REST的操作(例如,讀或?qū)?時(shí)支持中斷SMB租賃。
SFA-REST接口的高速緩存組件可被配置成支持現(xiàn)在由于經(jīng)由SFA客戶機(jī)和REST客戶機(jī)對(duì)文件系統(tǒng)的并行訪問而成為可能的錯(cuò)誤路徑。作為示例,擁有租賃的客戶機(jī)在SMB租賃需要被中斷時(shí)可能無響應(yīng)。SFA-REST接口可支持相關(guān)于對(duì)文件的SMB租賃來管理基于SFA的操作和基于REST的操作的整合功能性。例如,用于讀或?qū)懙幕赗EST的操作可以在文件在現(xiàn)有SMB租賃下被打開并被高速緩存時(shí)請(qǐng)求訪問文件。文件可基于具有請(qǐng)求高速緩存的操作修飾符的基于SFA的操作來打開。在這種情況下,基于REST的操作讀或?qū)懣稍赟MB租賃被中斷時(shí)被阻塞。設(shè)想了中斷SMB租賃可能花一些時(shí)間。如此,SFA-REST接口可以在中斷SMB租賃花費(fèi)過長(zhǎng)時(shí)間的情況下提供超時(shí)錯(cuò)誤。特定錯(cuò)誤代碼可被定義并返回給客戶機(jī)以允許客戶機(jī)稍后重試基于REST的操作(例如,讀或?qū)?。本發(fā)明中設(shè)想了基于REST的操作通過功能性與經(jīng)由SFA-REST接口組件支持的基于SFA的操作的任何其他變型和組合。
本發(fā)明的各實(shí)施例進(jìn)一步包括基于SFA-REST接口組件開發(fā)的模式。該模式支持提供對(duì)文件共享的并行的基于SFA和基于REST的訪問的文件服務(wù)。例如,SFA客戶機(jī)和REST客戶機(jī)兩者可同時(shí)具有對(duì)文件共享的訪問權(quán)。該模式包括多個(gè)表,其中這些表包括基于具有SFA協(xié)議和REST協(xié)議的各元素的SFA-REST接口的字段。該模式進(jìn)一步允許對(duì)文件系統(tǒng)作出快照。快照對(duì)文件系統(tǒng)進(jìn)行備份。快照可以基于寫時(shí)復(fù)制型模式,使得在每次快照時(shí)舊版本可在稍后時(shí)間被訪問。
相應(yīng)地,在本發(fā)明的第一方面,提供了一種用于訪問分布式文件系統(tǒng)中的文件的方法。該方法包括接收具有針對(duì)分布式文件系統(tǒng)中的文件的操作修飾符的基于SFA的操作。基于SFA的操作是基于文件表述性狀態(tài)轉(zhuǎn)移(REST)接口來定義的。SFA-REST接口包括SFA協(xié)議和REST協(xié)議的整合功能性。該方法進(jìn)一步包括接收針對(duì)分布式文件系統(tǒng)中的文件的基于REST的操作,基于REST的操作是基于SFA-REST接口來定義的。該方法還包括使用操作修飾符來執(zhí)行基于SFA的操作。該方法包括參考操作修飾符來執(zhí)行基于REST的操作。該方法還包括基于SFA-REST接口來執(zhí)行基于REST的操作。
在本發(fā)明的第二方面,提供了一種具有用于訪問數(shù)據(jù)文件系統(tǒng)的文件服務(wù)模式的系統(tǒng)。文件服務(wù)模式包括多個(gè)表。該多個(gè)表存儲(chǔ)文件系統(tǒng)中的文件的狀態(tài)。該多個(gè)表包括與SFA-REST接口的各元素相對(duì)應(yīng)的字段。SFA-REST接口包括SFA協(xié)議和REST協(xié)議的用于訪問文件系統(tǒng)中的文件的整合功能性。
在本發(fā)明的第三方面,提供了一種用于對(duì)文件共享作出快照的計(jì)算機(jī)實(shí)現(xiàn)的方法該方法包括更新包括文件共享的共享表。更新共享表包括向共享表添加一行,該行與文件共享的新版本相關(guān)聯(lián)。該方法還包括向與文件共享相關(guān)聯(lián)的節(jié)點(diǎn)傳遞通知,該通知指示該節(jié)點(diǎn)開始對(duì)文件共享的新版本進(jìn)行寫入。該方法進(jìn)一步包括確定該節(jié)點(diǎn)正對(duì)文件共享的新版本進(jìn)行寫入。該方法還包括更新共享表以指示快照成功完成。
在簡(jiǎn)要描述了本發(fā)明各實(shí)施方式的概覽之后,以下描述其中可實(shí)現(xiàn)本發(fā)明的各實(shí)施方式的示例性操作環(huán)境,以便為本發(fā)明各方面提供通用上下文。首先具體參考圖1,示出了用于實(shí)現(xiàn)本發(fā)明的各實(shí)施方式的示例性操作環(huán)境,并將其概括地指定為計(jì)算設(shè)備100。計(jì)算設(shè)備100只是合適的計(jì)算環(huán)境的一個(gè)示例,并且不旨在對(duì)本發(fā)明的使用范圍或功能提出任何限制。也不應(yīng)該將計(jì)算設(shè)備100解釋為對(duì)所示出的任一組件或其組合有任何依賴性或要求。
本發(fā)明可以在由計(jì)算機(jī)或諸如個(gè)人數(shù)據(jù)助理或其他手持式設(shè)備之類的其他機(jī)器執(zhí)行的計(jì)算機(jī)代碼或機(jī)器可使用指令(包括諸如程序模塊之類的計(jì)算機(jī)可執(zhí)行指令)的一般上下文中描述。一般而言,包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等的程序模塊指的是執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的代碼。本發(fā)明可以在各種系統(tǒng)配置中實(shí)施,這些系統(tǒng)配置包括手持式設(shè)備、消費(fèi)電子產(chǎn)品、通用計(jì)算機(jī)、專用計(jì)算設(shè)備等等。本發(fā)明也可以在其中任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行的分布式計(jì)算環(huán)境中實(shí)施。
參考圖1,計(jì)算設(shè)備100包括直接或間接耦合以下設(shè)備的總線110:存儲(chǔ)器112、一個(gè)或多個(gè)處理器114、一個(gè)或多個(gè)呈現(xiàn)組件116、輸入/輸出(I/O)端口118、輸入/輸出(I/O)組件120、和說明性電源122??偩€110表示可以是一條或多條總線(諸如地址總線、數(shù)據(jù)總線、或其組合)。雖然為了清楚起見利用線條示出了圖1的各框,但是實(shí)際上,各組件的輪廓并不是那樣清楚,并且比喻性地來說,線條更精確地將是灰色的和模糊的。例如,可以將諸如顯示設(shè)備等呈現(xiàn)組件認(rèn)為是I/O組件。而且,處理器也具有存儲(chǔ)器??梢哉J(rèn)識(shí)到,這是本領(lǐng)域的特性,并且重申,圖1的圖示只是例示可結(jié)合本發(fā)明的一個(gè)或多個(gè)實(shí)施方式來使用的示例性計(jì)算設(shè)備。諸如“工作站”、“服務(wù)器”、“膝上型計(jì)算機(jī)”、“手持式設(shè)備”等分類之間沒有區(qū)別,它們?nèi)慷急徽J(rèn)為是在圖1的范圍之內(nèi)的并且被稱為“計(jì)算設(shè)備”。
計(jì)算設(shè)備100通常包括各種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是可由計(jì)算設(shè)備100訪問的任何可用介質(zhì),而且包含易失性和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng)介質(zhì)。作為示例而非限制,計(jì)算機(jī)可讀介質(zhì)可包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)。
計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)的信息的任何方法或技術(shù)實(shí)現(xiàn)的易失性與非易失性、可移動(dòng)與不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,RAM、ROM、EEPROM、閃存或其他存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其他光學(xué)存儲(chǔ)、磁帶盒、磁帶、磁盤存儲(chǔ)或其他磁存儲(chǔ)設(shè)備、或能用于存儲(chǔ)所需信息且可以由計(jì)算設(shè)備100訪問的任何其他介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)將信號(hào)本身排除在外。
通信介質(zhì)通常以諸如載波或其他傳輸機(jī)制之類的已調(diào)制數(shù)據(jù)信號(hào)來體現(xiàn)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù),并且包括任何信息傳送介質(zhì)。術(shù)語“已調(diào)制數(shù)據(jù)信號(hào)”是指使得以在信號(hào)中編碼信息的方式來設(shè)定或改變其一個(gè)或多個(gè)特征的信號(hào)。作為示例而非限制,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直接線連接之類的有線介質(zhì),以及諸如聲學(xué)、RF、紅外及其他無線介質(zhì)之類的無線介質(zhì)。上述的任意組合也應(yīng)包含在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。
存儲(chǔ)器112包括易失性和/或非易失性存儲(chǔ)器形式的計(jì)算機(jī)存儲(chǔ)介質(zhì)。存儲(chǔ)器可以是可移動(dòng)的,不可移動(dòng)的,或兩者的組合。示例性硬件設(shè)備包括固態(tài)存儲(chǔ)器、硬盤驅(qū)動(dòng)器、光盤驅(qū)動(dòng)器等。計(jì)算設(shè)備100包括從諸如存儲(chǔ)器112或I/O組件120等各種實(shí)體讀取數(shù)據(jù)的一個(gè)或多個(gè)處理器。呈現(xiàn)組件116向用戶或其他設(shè)備呈現(xiàn)數(shù)據(jù)指示。示例性呈現(xiàn)組件包括顯示設(shè)備、揚(yáng)聲器、打印組件、振動(dòng)組件等等。
I/O端口118允許計(jì)算設(shè)備100邏輯上耦合至包括I/O組件120的其他設(shè)備,其中某些設(shè)備可以是內(nèi)置的。說明性組件包括話筒、操縱桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀、打印機(jī)、無線設(shè)備等等。
參考圖2A,描述了描繪適于在本發(fā)明的各實(shí)施例中使用的示例性云計(jì)算分布式基礎(chǔ)結(jié)構(gòu)200的框圖。一般而言,云計(jì)算分布式基礎(chǔ)結(jié)構(gòu)200解說了用于經(jīng)由云計(jì)算平臺(tái)提供服務(wù)的環(huán)境。云計(jì)算基礎(chǔ)結(jié)構(gòu)200提供可伸縮、高度可用、以及耐久的服務(wù)。例如,存儲(chǔ)服務(wù)提供按不同類型的存儲(chǔ)類型來存儲(chǔ)數(shù)據(jù)的能力。每一存儲(chǔ)類型具有優(yōu)點(diǎn)且多個(gè)存儲(chǔ)類型可被用在同一應(yīng)用中。云計(jì)算基礎(chǔ)結(jié)構(gòu)可以提供服務(wù)API以支持團(tuán)塊、隊(duì)列、表、和文件系統(tǒng)存儲(chǔ)類型。具體而言,本發(fā)明的各實(shí)施例提供支持基于SFA的操作和基于REST的操作以用于對(duì)平臺(tái)上的文件系統(tǒng)的并行服務(wù)的文件服務(wù)。文件服務(wù)使用包括SFA協(xié)議和REST協(xié)議的整合功能性的SFA-REST接口。SFA-REST接口展示基于SFA協(xié)議的文件系統(tǒng),使得SFA-REST接口允許打開或創(chuàng)建返回到文件系統(tǒng)中的文件的句柄的文件。在句柄被返回時(shí),客戶機(jī)可以使用該句柄來對(duì)文件進(jìn)行讀和寫。SFA-REST接口還包括REST協(xié)議的允許包括對(duì)文件的PUT和GET動(dòng)作的直接基于REST的操作的各元素。協(xié)議組件被整合以共同提供對(duì)文件系統(tǒng)的并行訪問。具體而言,SFA-REST接口定義SFA協(xié)議的基于SFA的操作與REST協(xié)議的基于REST的操作之間的交互的規(guī)則。SFA-REST接口包括促進(jìn)基于與每一單獨(dú)的操作相對(duì)應(yīng)的參數(shù)和返回值來執(zhí)行各種不同操作的基于SFA的API和基于REST的API。作為示例,參考基于SFA的API,創(chuàng)建API可包括文件名作為參數(shù)以及狀態(tài)、文件句柄、文件時(shí)間戳、文件大小作為返回值。創(chuàng)建API可允許客戶機(jī)打開或創(chuàng)建具有文件名的文件。附加參數(shù)可控制該文件的不同方面并處置返回值?;赟FA的API進(jìn)一步支持可被從服務(wù)到客戶機(jī)設(shè)置的機(jī)會(huì)鎖命令。在文件被打開或創(chuàng)建時(shí),可以使用基于SFA的創(chuàng)建操作來創(chuàng)建機(jī)會(huì)鎖,并且在某些情況下,服務(wù)器可能需要斷開機(jī)會(huì)鎖。與支持機(jī)會(huì)鎖、SMB租賃、以及與基于REST的API的交互的基于SFA的API有關(guān)的附加細(xì)節(jié)在下文更詳細(xì)地討論。
重要的是要注意,SMB租賃和機(jī)會(huì)鎖可在本文互換地使用,但它們的實(shí)現(xiàn)是不同的。具體而言,SMB租賃和機(jī)會(huì)鎖在客戶機(jī)-訪問權(quán)交互期間被不同地管理。機(jī)會(huì)鎖可由在同一客戶機(jī)上運(yùn)行可斷開機(jī)會(huì)鎖的兩個(gè)進(jìn)程的單個(gè)客戶機(jī)偶然地?cái)嚅_,而SMB租賃被保護(hù)免于SMB租賃中的這樣的偶然斷開。參考本發(fā)明的各實(shí)施例,該差異可被按需注意。
參考基于REST的API,基于REST的API支持無狀態(tài)操作。作為背景,無狀態(tài)性可以指客戶機(jī)-服務(wù)器通信受如下約束的概念:在各請(qǐng)求之間沒有客戶機(jī)上下文被存儲(chǔ)在服務(wù)器上。來自任何客戶機(jī)的每一請(qǐng)求包含對(duì)該請(qǐng)求進(jìn)行服務(wù)所需的全部信息,并且會(huì)話狀態(tài)被保持在客戶機(jī)中或者在各請(qǐng)求之間可根本沒有狀態(tài)被維持在客戶機(jī)中。就此,各請(qǐng)求之間沒有依存關(guān)系。此外,針對(duì)每一請(qǐng)求,可基于使用客戶的存儲(chǔ)賬戶密鑰簽署請(qǐng)求的規(guī)范化版本以及與該請(qǐng)求一起傳遞所得的簽名來認(rèn)證基于REST的操作,來用相同方式處置針對(duì)基于REST的操作的認(rèn)證,。示例性基于REST的API可以是允許客戶機(jī)創(chuàng)建文件的創(chuàng)建文件API。創(chuàng)建文件API可具有名稱參數(shù)和狀態(tài)返回值。附加示例性API在本文中被包括作為附錄。
繼續(xù)參考圖2A,云計(jì)算分布式基礎(chǔ)結(jié)構(gòu)200一般包括SFA客戶機(jī)202,REST客戶機(jī)204,云計(jì)算平臺(tái)206,服務(wù)API 208,具有團(tuán)塊212、隊(duì)列214、表216以及文件系統(tǒng)218的存儲(chǔ)210以及網(wǎng)絡(luò)220,以及其他未示出的組件。網(wǎng)絡(luò)220可以包括,但不僅限于,一個(gè)或多個(gè)局域網(wǎng)(LAN)和/或廣域網(wǎng)(WAN)。此類聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍的計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中是常見的。因此,此處不對(duì)網(wǎng)絡(luò)226進(jìn)行進(jìn)一步的描述。
SFA客戶機(jī)202和REST客戶機(jī)204是具有訪問由云計(jì)算平臺(tái)206提供的服務(wù)的軟件或硬件的計(jì)算設(shè)備??蛻魴C(jī)可以包括任何類型的計(jì)算設(shè)備,諸如例如參考圖1所描述的計(jì)算設(shè)備100??蛻魴C(jī)可經(jīng)由網(wǎng)絡(luò)220訪問云計(jì)算平臺(tái)206。SFA客戶機(jī)202和REST客戶機(jī)204可尤其指分別依賴于SFA協(xié)議和REST協(xié)議來訪問云計(jì)算平臺(tái)206上的服務(wù)的計(jì)算機(jī)程序??蛻魴C(jī)可以使用服務(wù)API 208來具有對(duì)不同存儲(chǔ)類型的訪問權(quán)。存儲(chǔ)類型包括被設(shè)計(jì)成存儲(chǔ)具有相關(guān)聯(lián)的元數(shù)據(jù)的大型二進(jìn)制對(duì)象(如文檔、圖片、視頻以及音樂文件)的團(tuán)塊212。隊(duì)列214是可靠異步消息遞送存儲(chǔ)類型。表216存儲(chǔ)類型提供結(jié)構(gòu)化存儲(chǔ)能力以存儲(chǔ)占據(jù)數(shù)萬億字節(jié)數(shù)據(jù)的輕量數(shù)據(jù)對(duì)象。文件共享218提供存儲(chǔ)可被共享并從SFA客戶機(jī)202和REST客戶機(jī)204并行訪問的文件的能力。
轉(zhuǎn)向圖2B,具體而言,SFA客戶機(jī)204和REST客戶機(jī)204可訪問文件服務(wù)。SFA-REST接口230包括用于支持文件服務(wù)資源240的SFA協(xié)議和REST協(xié)議的整合功能性。文件服務(wù)資源240包括存儲(chǔ)賬戶242、共享244、目錄246、以及文件248。具體而言,共享244提供一種組織各文件集合并且還可被安裝成主存在云計(jì)算平臺(tái)中的SMB文件共享的方式。文件服務(wù)可以基于文件服務(wù)API(“SFA-REST接口”)230提供對(duì)文件服務(wù)資源240的訪問,因?yàn)镾FA客戶機(jī)202和REST客戶機(jī)204可同時(shí)訪問文件服務(wù)資源240。SFA-REST接口可包括支持經(jīng)由HTTP操作來訪問文件資源的API。操作可以與資源類型和REST動(dòng)詞相關(guān)聯(lián)。例如,創(chuàng)建共享操作可具有共享資源類型和REST動(dòng)詞PUT,在該操作執(zhí)行之際在存儲(chǔ)賬戶中創(chuàng)建新共享。本發(fā)明的各實(shí)施例設(shè)想了附加操作。
在各實(shí)施例中,操作可以指定要使用的SFA-REST API的版本。例如,x-ms版本可以是被用來指定操作的版本的HTTP報(bào)頭。如此,用戶可以通過設(shè)置x-ms版本請(qǐng)求報(bào)頭來指定他們想要使用操作的哪一版本。當(dāng)在HTTP報(bào)頭中標(biāo)識(shí)了版本時(shí),如果存在API的新版本可用,則它將不中斷現(xiàn)有代碼的功能性。用戶可以修改該代碼以通過指定x-ms版本HTTP報(bào)頭調(diào)用API的較新版本。
參考圖2C,SFA-REST接口230可包括支持SFA協(xié)議和REST協(xié)議的不同整合功能性的若干不同的接口組件(例如,API)。SFA-REST接口包括數(shù)據(jù)訪問組件250、租賃組件252、高速緩存組件254、時(shí)間戳組件256、元數(shù)據(jù)組件258、屬性組件260、字節(jié)范圍鎖組件262、命名和參考組件264以及鎖定組件266,以及其他。
參考圖2D,本發(fā)明的各實(shí)施例進(jìn)一步包括文件服務(wù)模式資源270。文件服務(wù)模式資源270促進(jìn)對(duì)文件系統(tǒng)的訪問。文件服務(wù)模式資源270包括具有訪問表272、共享表274以及快照組件276的模式。具有訪問表272和共享表274的模式提供對(duì)具有文件共享、目錄以及文件的文件系統(tǒng)的訪問。
應(yīng)當(dāng)理解,此處所描述的這一和其他安排僅作為示例來闡明。附加于或替代于所示的安排和功能性,可使用其他安排和功能性(例如機(jī)器、接口、功能、次序、以及功能聚集),并且可完全省略某些元素。此外,本文所描述的許多功能性是可以實(shí)現(xiàn)為分立或分布式組件或結(jié)合其他組件的、以及以任何合適的組合和在任何合適的位置的功能實(shí)體。此處被描述為由一個(gè)或多個(gè)實(shí)體執(zhí)行的各種功能可由硬件、固件和/或軟件來執(zhí)行。例如,各種功能可由執(zhí)行存儲(chǔ)在存儲(chǔ)器中的指令的處理器來執(zhí)行。
數(shù)據(jù)訪問組件可以促進(jìn)對(duì)文件系統(tǒng)的訪問。數(shù)據(jù)訪問組件包括支持對(duì)文件系統(tǒng)的訪問的基于SFA的API和基于REST的API。具體而言,基于SFA的API實(shí)現(xiàn)句柄,其中數(shù)據(jù)訪問(例如,打開或創(chuàng)建文件)返回該文件的句柄并允許使用該句柄對(duì)該文件進(jìn)行讀和寫?;赗EST的API不支持在SFA協(xié)議中的等效句柄功能性。基于REST的API支持對(duì)文件進(jìn)行讀和寫而無需句柄功能性,但包括基于SFA協(xié)議的對(duì)應(yīng)元素。
租賃組件可以促進(jìn)執(zhí)行針對(duì)共享訪問的文件租賃。SFA-REST接口包括促進(jìn)REST租賃的基于REST的API。REST租賃允許對(duì)文件的獨(dú)占性寫共享讀訪問達(dá)某一歷時(shí)。該歷時(shí)可以是所定義的時(shí)段,例如1分鐘,或不確定的時(shí)段。SFA-REST接口還包括支持基于文件句柄的共享訪問的基于SFA的API。作為示例,在用戶使用基于SFA的操作創(chuàng)建或打開文件時(shí),基于SFA的操作可包括操作修飾符。操作修飾符定義修改基于SFA的操作的約束(例如,訪問、共享)。約束可以是訪問約束,諸如讀、寫、以及刪除,并且約束可以是共享約束,諸如讀共享、寫共享以及刪除共享。文件服務(wù)可以基于來自當(dāng)前打開到該文件的所有其他句柄的操作修飾符是否兼容基于SFA的操作上的當(dāng)前操作修飾符,確定基于SFA的操作是否應(yīng)當(dāng)被執(zhí)行以提供對(duì)文件的訪問。
租賃組件實(shí)現(xiàn)用于REST租賃的基于REST的API以與打開到文件的文件句柄相類似地運(yùn)作來訪問文件以用于讀、寫以及刪除并從而允許來自其他句柄的共享讀。租賃組件執(zhí)行確認(rèn)以證實(shí)在基于REST的操作獲取或續(xù)借REST租賃時(shí)沒有現(xiàn)有租賃,并且可以返回指示由于存在打開的文件的不兼容基于REST的操作的其他句柄或租賃而不允許租賃的差錯(cuò)。如此,基于參考與先前基于REST的操作相關(guān)聯(lián)的租賃或與先前基于SFA的操作相關(guān)聯(lián)的操作修飾符,用于打開文件的基于REST的操作或基于SFA的操作可能失敗。
高速緩存組件管理基于REST的操作和具有機(jī)會(huì)鎖的基于SFA的操作如何交互。SMB Oplock(機(jī)會(huì)鎖)是SFA客戶機(jī)請(qǐng)求以改進(jìn)性能并減少網(wǎng)絡(luò)傳輸?shù)母咚倬彺鏅C(jī)制。這意味著特定文件或目錄的最新狀態(tài)可被高速緩存在SFA客戶端上。存在多個(gè)Oplock類型,稱為SMB租賃類型:讀(R):在被獲取時(shí),客戶機(jī)可以從本地高速緩存讀取。寫(W):在被獲取時(shí),客戶機(jī)可以在本地寫而無需將數(shù)據(jù)轉(zhuǎn)儲(chǔ)清除回到SMB服務(wù)。句柄(H):在被獲取時(shí),客戶機(jī)在句柄關(guān)閉發(fā)生時(shí)不必通知SMB服務(wù)。機(jī)會(huì)鎖在應(yīng)用使用相同的訪問和共享模式持續(xù)打開和關(guān)閉文件的情況下是有用的。SFA客戶機(jī)不必立即通知SMB服務(wù)每一關(guān)閉。以上SMB租賃類型獨(dú)立于在打開句柄期間指定的訪問和共享模式。通常,每當(dāng)它對(duì)文件打開新句柄時(shí),SFA客戶機(jī)都嘗試獲取所有租賃類型,而不管訪問和共享模式如何。
取決于基于REST的操作,REST請(qǐng)求中斷現(xiàn)有SFA客戶機(jī)機(jī)會(huì)鎖可能是必要的。在寫機(jī)會(huì)鎖的情況下,這將需要SFA客戶機(jī)將經(jīng)高速緩存的變更轉(zhuǎn)儲(chǔ)清除到文件服務(wù)。下文是每一類型的機(jī)會(huì)鎖需要中斷的一些原因:每當(dāng)發(fā)出寫REST操作(例如,PutRange)時(shí),讀(R)機(jī)會(huì)鎖需要中斷。每當(dāng)發(fā)出讀REST操作(例如,GetBlob)時(shí),寫(W)機(jī)會(huì)鎖需要中斷。每當(dāng)客戶機(jī)因?yàn)槲募?wù)不需要句柄打開就能使Delete(刪除)請(qǐng)求成功而發(fā)出刪除REST操作時(shí),句柄(H)機(jī)會(huì)鎖需要中斷。
中斷機(jī)會(huì)鎖包括潛在地將SMB高速緩存客戶機(jī)變更轉(zhuǎn)儲(chǔ)清除,并且這可以造成REST服務(wù)操作響應(yīng)時(shí)間的額外延遲,或者可以造成REST操作失敗且具有狀態(tài)碼408(請(qǐng)求超時(shí))和錯(cuò)誤碼標(biāo)識(shí)符(例如,ClientCacheFlushDelay)。一種示例性場(chǎng)景包括其中需要機(jī)會(huì)鎖中斷和轉(zhuǎn)儲(chǔ)清除且REST客戶機(jī)體驗(yàn)到延遲。在這一場(chǎng)景中,SFA客戶機(jī)打開文件,獲取RWH機(jī)會(huì)鎖并將數(shù)據(jù)寫在本地。REST客戶機(jī)發(fā)送GetFile(獲取文件)請(qǐng)求。文件服務(wù)中斷寫(W)機(jī)會(huì)鎖并將RH機(jī)會(huì)鎖留給客戶機(jī)。SFA客戶機(jī)將其高速緩存的數(shù)據(jù)轉(zhuǎn)儲(chǔ)清除到文件服務(wù)并對(duì)機(jī)會(huì)鎖中斷進(jìn)行確收。文件服務(wù)處理GetFile請(qǐng)求,并用所請(qǐng)求的數(shù)據(jù)作出響應(yīng)。在以上示例中,REST客戶機(jī)將體驗(yàn)到由機(jī)會(huì)鎖中斷造成的延遲以及SFA客戶機(jī)將其數(shù)據(jù)轉(zhuǎn)儲(chǔ)清除到文件服務(wù)所花的時(shí)間。任何后續(xù)GetFile請(qǐng)求將不體驗(yàn)到任何附加延遲,因?yàn)閷?W)機(jī)會(huì)鎖已經(jīng)中斷。
另一示例性場(chǎng)景包括其中需要機(jī)會(huì)鎖中斷但REST客戶機(jī)沒有體驗(yàn)到延遲。在這一場(chǎng)景中,SFA客戶機(jī)已經(jīng)具有RH機(jī)會(huì)鎖(續(xù)上一示例)。REST客戶機(jī)發(fā)出PutRange請(qǐng)求。文件服務(wù)向SFA客戶機(jī)發(fā)送機(jī)會(huì)鎖中斷請(qǐng)求但它不等待響應(yīng)。文件服務(wù)處理PutRange請(qǐng)求。在以上示例中,雖然需要機(jī)會(huì)鎖中斷,但REST操作沒有體驗(yàn)到任何附加延遲,因?yàn)樵谥袛嘧x機(jī)會(huì)鎖時(shí)不需要響應(yīng)。
基于已具有在同一文件上打開的句柄的SFA客戶機(jī)的機(jī)會(huì)鎖狀態(tài),文件服務(wù)可具有與每一基于REST的操作相對(duì)應(yīng)的不同行為。阻塞機(jī)會(huì)鎖中斷指的是以下事實(shí):文件服務(wù)可能必須等待中斷成功的確收,而在非阻塞的情況下,文件服務(wù)不必等待。在需要阻塞機(jī)會(huì)鎖中斷的情況下,并且如果中斷在指定請(qǐng)求超時(shí)內(nèi)且達(dá)30秒沒有成功,則REST操作可能失敗且具有狀態(tài)碼408(請(qǐng)求超時(shí))和錯(cuò)誤碼標(biāo)識(shí)符(例如,ClientCacheFlushDelay)。
此外,作為示例,DeleteFile(刪除文件)請(qǐng)求還將需要中斷機(jī)會(huì)鎖句柄(H)租賃,這被執(zhí)行以確保在從REST客戶機(jī)發(fā)出DeleteFile時(shí),沒有從SMB側(cè)打開的文件句柄。如果存在共享違反,則該請(qǐng)求將失敗且具有狀態(tài)碼409(沖突)和錯(cuò)誤碼標(biāo)識(shí)符(例如,SharingViolation)。
時(shí)間戳組件可用于標(biāo)識(shí)事件何時(shí)發(fā)生。具體而言,時(shí)間戳組件可以是多時(shí)間戳實(shí)現(xiàn),使得SFA協(xié)議和REST協(xié)議的整合功能性可通過SFA-REST接口是可用的。基于REST的API提供對(duì)樂觀并發(fā)性模型的支持。樂觀并發(fā)性模型基于準(zhǔn)確的時(shí)間戳。在樂觀并發(fā)性模型中,在文件服務(wù)接收到基于REST的操作來訪問文件時(shí),文件服務(wù)生成并返回作為精確時(shí)間戳的實(shí)體標(biāo)簽(“ETAG”),該精確時(shí)間戳被保證基于對(duì)文件的每一次寫來遞增。ETAG可作為條件報(bào)頭被傳遞回后續(xù)基于REST的操作,諸如讀或?qū)?,該條件報(bào)頭將使得基于REST的操作在各調(diào)用之間文件已改變的情況下失敗或者在ETAG沒有改變的情況下失敗?;赟FA的API沒有實(shí)現(xiàn)樂觀并發(fā)性模型。相反,時(shí)間戳的更新是在文件句柄被關(guān)閉時(shí)執(zhí)行的。另外,傳統(tǒng)文件系統(tǒng)通常允許SFA客戶機(jī)將文件上的時(shí)間戳顯式地設(shè)置成任意時(shí)間。
時(shí)間戳組件支持每一文件上的5個(gè)不同時(shí)間戳。這些時(shí)間戳中的四個(gè)可基于基于SFA的API。這些時(shí)間戳包括創(chuàng)建時(shí)間、最后修改時(shí)間、最后寫時(shí)間、以及最后訪問時(shí)間。這四個(gè)時(shí)間戳可以使用與SMB協(xié)議相同的語義來實(shí)現(xiàn)。第五時(shí)間戳是可被用于樂觀并發(fā)的ETAG。第五時(shí)間戳沒有通過基于SFA的API來展示。所有五個(gè)時(shí)間戳是通過基于REST的API可用的。就此,時(shí)間戳可以基于5個(gè)不同時(shí)間戳來支持基于SFA的操作和基于REST的操作之間的整合功能性。具體而言,因?yàn)榛赗EST的操作依賴于樂觀并發(fā)性模型,所以在文件上執(zhí)行基于SFA的操作時(shí),ETAG時(shí)間戳需要被更新。如此,在執(zhí)行基于SFA的操作時(shí),SFA-REST接口支持更新ETAG連同其他時(shí)間戳。在具有條件基于REST操作的示例性場(chǎng)景中,如果已使用基于SFA的操作更新了文件,則后續(xù)條件基于REST的操作需要確定經(jīng)更新的ETAG存在以確認(rèn)條件基于REST的操作是否可被執(zhí)行。
元數(shù)據(jù)組件可被配置成支持與數(shù)據(jù)內(nèi)容有關(guān)的描述性信息?;赗EST的API允許任意名稱和值對(duì)的小集合與文件相關(guān)聯(lián)?;赟FA的API具有可與文件相關(guān)聯(lián)的擴(kuò)展屬性。名稱約束基于比典型REST協(xié)議更加受限(長(zhǎng)度和有效字符)的SMB協(xié)議。為使SFA協(xié)議和REST協(xié)議兼容,基于REST的API已經(jīng)使用元數(shù)據(jù)可用的有限名稱來實(shí)現(xiàn)。
命名和參考組件可以支持訪問文件服務(wù)資源??苫诿Q或參考句法來訪問文件服務(wù)資源。存儲(chǔ)賬戶可包含零個(gè)或更多個(gè)共享。共享包含屬性、元數(shù)據(jù)以及零個(gè)或更多個(gè)文件或目錄。目錄可包含屬性以及零個(gè)或更多個(gè)文件或目錄。文件可以是包括二進(jìn)制數(shù)據(jù)、屬性以及元數(shù)據(jù)的任何單個(gè)實(shí)體。
參考共享名稱,文件服務(wù)共享名稱規(guī)則可以在SFA-REST接口的API中比SFA協(xié)議更加受限地實(shí)現(xiàn)。如此,用于團(tuán)塊服務(wù)的API和REST接口的API可以共享相似命名約定以用于團(tuán)塊容器和文件共享。
參考目錄名和文件名,SFA-REST接口進(jìn)一步支持對(duì)大小寫不敏感且保留大小寫的API。所允許的文件和目錄名長(zhǎng)度是針對(duì)基于REST的API中的每一單獨(dú)的分量(斜杠之間的部分)來限定的,并且基于REST的API的路徑名的總長(zhǎng)允許比REST協(xié)議中指示的更長(zhǎng)和更深的名稱。名稱和參考組件包括不再支持REST協(xié)議中通常合法的字符(因?yàn)檫@些字符現(xiàn)在不合法)的基于REST的API,并且在REST中通常不合法的SFA協(xié)議字符現(xiàn)在在基于REST的API中是合法的。在一個(gè)實(shí)施例中,REST協(xié)議中不支持但現(xiàn)在在名稱和參考組件的基于REST的API中得到支持的字符可在基于REST的API中被換碼(escape)。將字符換碼包括使用十六進(jìn)制碼對(duì)所選字符進(jìn)行編碼。本發(fā)明的各實(shí)施例設(shè)想了對(duì)不合法REST協(xié)議字符進(jìn)行編碼以使它們?cè)诨赗EST的API中合法的其他變型和組合。
路徑名包括由正斜杠字符“/”分開的一個(gè)或多個(gè)路徑名分量(目錄或文件名)。最后路徑名分量之外的所有路徑名分量可以表示目錄。最后路徑名分量表示文件的目錄。路徑名的長(zhǎng)度可以不超過預(yù)定數(shù)目(例如,1024)個(gè)字符。路徑名可包括由正斜杠字符“/”分開的一個(gè)或多個(gè)路徑名分量。子目錄深度可被配置成不超過預(yù)定義深度(例如,250)。文件不能與目錄共享相同路徑且反之亦然,即同一名稱不能被用于共享同一父目錄的文件或目錄。示例:具有名稱“數(shù)據(jù)”的文件和目錄不能存在于同一父路徑之下。
用于共享或文件資源的元數(shù)據(jù)可被存儲(chǔ)為與資源相關(guān)聯(lián)的名-值對(duì)。目錄可被實(shí)現(xiàn)而沒有元數(shù)據(jù)。元數(shù)據(jù)名稱可以基于用于C#標(biāo)識(shí)符的命名規(guī)則。元數(shù)據(jù)名稱可以保留用來創(chuàng)建它們的大小寫,但在被設(shè)置或讀取時(shí)是大小寫不敏感的。如果具有相同名稱的兩個(gè)或更多個(gè)元數(shù)據(jù)報(bào)頭被提交用于一資源,則文件服務(wù)返回狀態(tài)碼400(Bad Request(壞請(qǐng)求))。
SFA-REST接口可以支持用于共享、目錄或文件的統(tǒng)一資源標(biāo)識(shí)符(“URI”)參考。每一文件服務(wù)資源可具有參考資源自身的對(duì)應(yīng)的基本URI。對(duì)于存儲(chǔ)賬戶,基本URI可只包括該賬戶的名稱。對(duì)于共享,基本URI可包括賬戶的名稱以及共享的名稱。對(duì)于目錄,基本URI可包括賬戶的名稱、共享的名稱、以及該目錄的路徑。對(duì)于文件,基本URI包括賬戶的名稱、共享的名稱、以及該文件的路徑。URI可唯一性地實(shí)現(xiàn)URI。因?yàn)槊恳毁~戶名稱是唯一性的,所以兩個(gè)賬戶可具有帶相同名稱的共享。然而,在給定存儲(chǔ)賬戶內(nèi),每一共享可以用唯一性名稱來實(shí)現(xiàn)。給定共享或目錄內(nèi)的文件也可具有該共享或目錄內(nèi)的唯一性名稱。嘗試創(chuàng)建具有違反命名規(guī)則的名稱的共享、目錄或文件,該請(qǐng)求可以失敗且具有狀態(tài)碼400(Bad Request)。
字節(jié)范圍鎖組件可以支持用于SFA-REST接口的字節(jié)范圍鎖?;赟FA的API可允許SFA客戶機(jī)請(qǐng)求對(duì)文件的范圍的獨(dú)占性訪問以及對(duì)文件的范圍的讀訪問。這確保在該范圍內(nèi)沒有其他寫,但允許諸讀取者。字節(jié)范圍鎖組件可被配置成當(dāng)存在與SFA字節(jié)范圍鎖的邏輯的沖突時(shí),拒絕通過基于REST的API進(jìn)行讀或?qū)?。基于SFA的API允許字節(jié)范圍鎖管理對(duì)文件的諸區(qū)域的讀和寫訪問,基于REST的API可不將這一能力用于特定實(shí)現(xiàn)。如此,相反,基于REST的API可能需要對(duì)整個(gè)文件的寫訪問。這還意味著如果SFA客戶機(jī)具有該文件內(nèi)的任何范圍上的鎖,則基于REST的操作可能失敗。然而,基于REST的操作可以用支持字節(jié)范圍鎖的基于REST的API來實(shí)現(xiàn)。
訪問組件負(fù)責(zé)支持基于兩個(gè)不同協(xié)議端點(diǎn)的對(duì)文件服務(wù)的訪問。訪問組件提供用于SFA協(xié)議的端點(diǎn)點(diǎn)和用于REST協(xié)議的分開的端點(diǎn)。就此,用于SFA客戶機(jī)的請(qǐng)求和響應(yīng)是經(jīng)由SFA協(xié)議端點(diǎn)來傳遞的,且用于REST客戶機(jī)的請(qǐng)求和協(xié)議是從REST協(xié)議端點(diǎn)傳遞的。
鎖定組件負(fù)責(zé)管理文件鎖。鎖定組件被配置成處理基于SFA的操作并使用操作修飾符執(zhí)行該操作并且基于參考操作修飾符來處理基于REST的操作。操作修飾符可以是指示訪問模式和共享模式的鎖修飾符。作為示例,SFA客戶機(jī)可以裝載共享作為文件共享。使用SFA-REST接口,SFA客戶機(jī)可以將文件系統(tǒng)鎖機(jī)制用于鎖定組件管理對(duì)共享文件的訪問。用于訪問文件的基于SFA的操作可包括操作修飾符。通過鎖定組件,操作修飾符可以是請(qǐng)求整個(gè)文件訪問共享來用于讀、寫以及刪除或字節(jié)范圍鎖以管理對(duì)單個(gè)文件內(nèi)的諸區(qū)域的讀和寫訪問的鎖修飾符。在SFA客戶機(jī)打開文件時(shí),用于打開文件的基于SFA的操作包括具有文件訪問和共享模式的鎖修飾符。以下文件訪問鎖修飾符通常由SFA客戶機(jī)使用:讀:打開文件以只用于讀。寫:打開文件以只用于寫訪問。讀/寫:以讀/寫許可來打開文件。刪除:打開文件以只用于刪除訪問。
以下文件共享鎖修飾符通常由SFA客戶機(jī)使用:無:拒絕當(dāng)前文件的共享。打開該文件的任何請(qǐng)求將失敗,直至該文件被關(guān)閉。共享讀:允許該文件的后續(xù)打開以用于讀。如果這一標(biāo)志未被指定,則打開該文件以用于讀的任何請(qǐng)求將失敗,直至該文件被關(guān)閉。共享寫:允許該文件的后續(xù)打開以用于寫。如果這一標(biāo)志未被指定,則打開該文件以用于寫的任何請(qǐng)求將失敗,直至該文件被關(guān)閉。共享讀/寫:允許該文件的后續(xù)打開以用于讀或?qū)?。如果這一標(biāo)志未被指定,則打開該文件以用于讀或?qū)懙娜魏握?qǐng)求將失敗,直至該文件被關(guān)閉。共享刪除:允許文件的后續(xù)刪除。如果這一標(biāo)志未被指定,則刪除該文件的任何請(qǐng)求將失敗,直至該文件被關(guān)閉。
SFA客戶機(jī)共享可通過以下示例被進(jìn)一步解說:例如,沒有共享違反的文件打開:客戶機(jī)A使用FileAccess.Read和FileShare.Write打開文件(在打開時(shí)拒絕后續(xù)讀/刪除)??蛻魴C(jī)B使用FileShare.Write使用FileAccess.Read打開文件(在打開時(shí)拒絕后續(xù)寫/刪除)。結(jié)果:這是允許的,因?yàn)槲募L問和文件共享模式之間沒有沖突。
由于文件訪問的共享違反:客戶機(jī)A使用FileShare.Write和FileAccess.Read打開文件(在打開時(shí)拒絕后續(xù)寫/刪除)??蛻魴C(jī)B使用FileShare.Write使用FileAccess.Write打開文件(在打開時(shí)拒絕后續(xù)讀/刪除)。結(jié)果:客戶機(jī)B遇到共享違反,因?yàn)樗付ū豢蛻魴C(jī)A先前指定的共享模式所拒絕的文件訪問。
由于共享模式的共享違反:客戶機(jī)A使用FileAccess.Write和FileShare.Write打開文件(在打開時(shí)拒絕后續(xù)讀/刪除)。客戶機(jī)B使用FileShare.Write使用FileAccess.Read打開文件(在打開時(shí)拒絕后續(xù)寫/刪除)。結(jié)果:客戶機(jī)B遇到共享違反,因?yàn)樗付ň芙^對(duì)仍然打開以用于寫訪問的文件的寫訪問的共享模式。
具有REST的操作可不使用操作修飾符來打開文件。然而,基于REST的操作尊重為SFA客戶機(jī)上打開的任何文件指定的共享模式。與SMB共享模式交互的基于REST的操作可通過以下示例來進(jìn)一步解說。REST獲取文件共享違反:SFA客戶機(jī)使用FileAccess.Read和FileShare.Write打開文件(在打開時(shí)拒絕后續(xù)讀/刪除)。REST客戶機(jī)隨后對(duì)文件執(zhí)行Get File((REST API,獲取文件)操作(從而使用在上表中指定的FileAccess.Read)。結(jié)果:REST客戶機(jī)的請(qǐng)求失敗且具有狀態(tài)碼409(沖突)和錯(cuò)誤碼SharingViolation(共享違反),因?yàn)镾FA客戶機(jī)在拒絕讀/刪除訪問時(shí)仍然使文件打開。
REST安置范圍共享違反:SFA客戶機(jī)使用FileShare.Write和FileAccess.Read打開文件(在打開時(shí)拒絕后續(xù)寫/刪除)。REST客戶機(jī)隨后對(duì)文件執(zhí)行Put Range((REST API,安置范圍)操作(從而使用在上表中指定的FileAccess.Write)。結(jié)果:REST客戶機(jī)的請(qǐng)求失敗且具有狀態(tài)碼409(沖突)和錯(cuò)誤碼SharingViolation(共享違反),因?yàn)镾FA客戶機(jī)在拒絕寫/刪除訪問時(shí)仍然使文件打開。
設(shè)想了SFA客戶機(jī)共享模式可具有與基于REST的操作有關(guān)的實(shí)現(xiàn)。取決于在SFA客戶機(jī)打開文件時(shí)指定的共享模式,文件服務(wù)返回具有錯(cuò)誤碼Sharing Violation的沖突(例如,狀態(tài)碼409)是可能的。文件由于文件在SFA客戶機(jī)上被打開而返回共享違反。作為示例,SFA客戶機(jī)文件共享模式可以是共享讀,它拒絕寫和刪除。如此,創(chuàng)建文件、設(shè)置文件屬性、設(shè)置文件元數(shù)據(jù)、刪除文件、以及安置范圍基于REST的操作失敗且具有共享違反指示。文件服務(wù)可由于文件在SFA客戶機(jī)上打開而返回共享違反。
刪除組件負(fù)責(zé)管理刪除。刪除組件被配置成處理基于SFA的刪除操作并使用操作修飾符執(zhí)行該操作并且基于參考操作修飾符來處理基于REST的刪除操作。在SFA客戶機(jī)打開文件以用于刪除時(shí),它將該文件標(biāo)記為待刪除,直至該文件上的所有其他SFA客戶機(jī)打開句柄被關(guān)閉。在文件被標(biāo)記為待刪除時(shí),文件上的任何基于REST的操作將返回狀態(tài)碼沖突與錯(cuò)誤碼標(biāo)識(shí)符(例如,SMBDeletePending)。狀態(tài)碼404未被返回,因?yàn)镾FA客戶機(jī)在關(guān)閉文件之前移除待決刪除標(biāo)志是可能的。換言之,在文件已被移除時(shí),狀態(tài)碼404(未找到)是預(yù)期的。此外,在文件處于SMB待刪除狀態(tài)時(shí),它可不被包括在List Files(列出文件)結(jié)果中。設(shè)想了基于REST的刪除文件和刪除目錄操作被原子地提交并且不導(dǎo)致待刪除狀態(tài)。
屬性組件被配置用于管理與基于REST的操作的文件屬性暗示。使用基于SFA的操作的SFA客戶機(jī)可以讀和設(shè)置包括存檔、只讀、隱藏、以及系統(tǒng)的文件屬性。如果文件或目錄設(shè)置了只讀屬性(即使它在SMB中以讀共享來打開),則嘗試對(duì)文件進(jìn)行寫的任何基于REST的操作可能失敗且具有狀態(tài)碼412(前提失敗)和錯(cuò)誤碼標(biāo)識(shí)符(例如,ReadOnlyAttribute(只讀屬性))。這些基于REST的操作可包括:創(chuàng)建文件、設(shè)置文件屬性、設(shè)置文件元數(shù)據(jù)、以及安置范圍。此外,設(shè)想了文件屬性可不從REST客戶機(jī)設(shè)置或讀取。一旦使得文件是只讀的,REST客戶機(jī)就將不能對(duì)文件進(jìn)行寫,直至SFA客戶機(jī)移除只讀屬性。
繼續(xù)參考圖2D,文件服務(wù)支持文件服務(wù)模式資源270。相應(yīng)地,SFA-REST接口促進(jìn)基于該模式來訪問文件。SFA客戶機(jī)或REST客戶機(jī)可各自分別生成基于SFA的操作或基于REST的操作,這些操作使用基于SFA-REST接口實(shí)現(xiàn)的模式來訪問文件系統(tǒng)。就此,各模式字段包括SFA-REST接口的支持對(duì)文件系統(tǒng)的并行的基于SFA和基于REST的訪問的諸元素。
該模式可以是邏輯模式。設(shè)想了該模式的物理表示可以不同以考慮底層數(shù)據(jù)庫(kù)的細(xì)微差別。該模式的物理表示也可被更改以向后兼容。該模式可以基于多個(gè)表。在一個(gè)實(shí)現(xiàn)中,該模式包括8個(gè)文件訪問表和共享表。主表可以是命名空間表,其中文件和目錄是基于它們的名稱來存儲(chǔ)的。命名空間表可包括共享的名稱。命名空間表可以是分層的,原因在于文件和目錄是作為它們的父目錄的子目錄來存儲(chǔ)的。文件或目錄的完整路徑是基于命名空間表中的多個(gè)查找來確定的。文件可包括表中的ID,它被用來在另一訪問表中查找與文件有關(guān)的信息。
該模式可進(jìn)一步包括信息表。信息表可被用來存儲(chǔ)與文件的內(nèi)容有關(guān)的信息。該信息表不存儲(chǔ)文件本身的內(nèi)容。這一表的鍵是文件ID。
該模式還可支持頁(yè)范圍表。頁(yè)范圍表可被用來存儲(chǔ)所存儲(chǔ)的文件的實(shí)際數(shù)據(jù)。該頁(yè)范圍表的鍵包括文件ID和作為所存儲(chǔ)的頁(yè)范圍的大小的偏移。
該模式可進(jìn)一步支持句柄表。句柄表可被用來表示在文件上打開的句柄。句柄表支持打開或創(chuàng)建返回到文件系統(tǒng)中的文件的句柄的文件。在句柄被返回時(shí),客戶機(jī)可以使用該句柄來對(duì)文件進(jìn)行讀和寫。
該模式還支持租賃表。租賃表可被用于支持基于操作修飾符來提供文件高速緩存的SMB租賃。具體而言,租賃表可被用來基于與對(duì)應(yīng)的文件相關(guān)聯(lián)的基于SFA的操作的操作修飾符來存儲(chǔ)租賃狀態(tài)。
兩個(gè)附加訪問表可被配置在該模式中以用于存儲(chǔ)針對(duì)目錄的變更通知設(shè)置和事件。這兩個(gè)表可以是變更通知表和變更通知事件表。具體而言,變更通知表可以在操作指示檢測(cè)目錄內(nèi)的變更時(shí)被更新。每次對(duì)文件執(zhí)行寫操作,執(zhí)行對(duì)應(yīng)操作以檢查變更通知表來確定數(shù)據(jù)是否需要被錄入事件表。
字節(jié)鎖表可被用來存儲(chǔ)文件的字節(jié)范圍鎖。字節(jié)范圍鎖可通過文件服務(wù)來獲取。字節(jié)范圍鎖指的是其中SFA客戶機(jī)請(qǐng)求對(duì)文件的某一范圍的獨(dú)占性訪問以及對(duì)文件的某一范圍的讀訪問的場(chǎng)景。這確保在該范圍內(nèi)沒有其他寫,但允許諸讀取者。
繼續(xù)參考圖2D,多個(gè)負(fù)載平衡器(未示出)可針對(duì)跨云計(jì)算基礎(chǔ)結(jié)構(gòu)的各分區(qū)來實(shí)現(xiàn)。原子地執(zhí)行的事務(wù)是在單個(gè)分區(qū)內(nèi)執(zhí)行的。作為背景,原子事務(wù)指的是全部發(fā)生或全不發(fā)生的數(shù)據(jù)庫(kù)操作序列。原子性的保證防止對(duì)數(shù)據(jù)庫(kù)的更新只部分地發(fā)生,部分地發(fā)生與徹底拒絕整個(gè)序列相比會(huì)造成更大的問題。原子性指的是不可分割性和不可縮減性。在一個(gè)實(shí)施例中,該模式在共享級(jí)被分割。就此,共享上的事務(wù)可以在單個(gè)分區(qū)內(nèi)實(shí)現(xiàn)。該模式可進(jìn)一步允許增加作為分區(qū)鍵的一部分的鍵的數(shù)目,使得模式可被存儲(chǔ)在多個(gè)分區(qū)中。這可允許單個(gè)共享由多個(gè)后端節(jié)點(diǎn)來服務(wù),這造成更好的性能。
文件服務(wù)支持實(shí)現(xiàn)快照以快速且容易地備份文件存儲(chǔ)的快照組件。該模式促進(jìn)快照。該模式中的共享表支持快照操作。具體而言,新變更可按寫時(shí)復(fù)制型模式來被寫入,使得舊版本在每次快照時(shí)可在稍后時(shí)間被訪問。在拍攝快照之前的正常狀態(tài)中,共享表可具有用于每一共享的條目。共享表模式包括該共享的訪問許可、一行是有效還是無效的指示、最后修改時(shí)間、以及期滿事件、以及促進(jìn)執(zhí)行快照操作的快照版本。
共享快照可以基于3個(gè)操作。更新操作更新共享表以指示快照將被創(chuàng)建。創(chuàng)建更新操作包括添加具有快照版本標(biāo)識(shí)符的新行并使用快照版本標(biāo)識(shí)符更新該行以包括該快照的時(shí)間戳。此時(shí),如果存在對(duì)該共享進(jìn)行寫入的任何客戶機(jī),則該寫入以快照版本0繼續(xù)。如果快照失敗,則該操作在它1天后期滿時(shí)清理快照版本0。寫通知操作包括通知支持共享開始對(duì)該共享的新快照版本進(jìn)行寫入的節(jié)點(diǎn)。同樣,如果發(fā)生失敗,則這將導(dǎo)致對(duì)舊快照版本的寫入,并且清理可稍后發(fā)生。第三操作是更新共享表以指示快照成功完成的完成更新操作。文件服務(wù)可以向客戶機(jī)發(fā)送快照成功完成的通知。如果變更不能在表上提交,則客戶機(jī)將向版本1(它也是有效的)寫入。
快照組件進(jìn)一步支持垃圾收集??梢栽诳煺詹僮魇≈H對(duì)共享表執(zhí)行垃圾收集。例如,具有失敗的快照版本的行可在預(yù)定義時(shí)段之后自動(dòng)清理自己。同樣,快照組件創(chuàng)建另一快照,該表可被更新,并且對(duì)共享進(jìn)行寫入的節(jié)點(diǎn)可以對(duì)快照版本2進(jìn)行寫入。
快照組件可進(jìn)一步支持原子快照、非原子快照、以及跨共享原子快照??煺战M件可以與各節(jié)點(diǎn)通信以創(chuàng)建原子快照。每一節(jié)點(diǎn)能夠修改文件模式的分區(qū)。具體而言,每一節(jié)點(diǎn)能夠原子地修改一分區(qū)。快照組件可以將通知發(fā)送給各節(jié)點(diǎn)。原子快照過程包括兩個(gè)通知。阻塞通知指導(dǎo)一個(gè)或多個(gè)節(jié)點(diǎn)阻塞對(duì)所選分區(qū)的寫入。阻塞通知可包括阻塞對(duì)所選分區(qū)的寫入的固定時(shí)間量。寫入通知指導(dǎo)一個(gè)或多個(gè)節(jié)點(diǎn)開始對(duì)新快照版本進(jìn)行寫入。如果寫入操作因?yàn)槿恳粋€(gè)或多個(gè)節(jié)點(diǎn)不能在固定時(shí)間量?jī)?nèi)開始對(duì)新版本進(jìn)行寫入而不能完成,則快照組件可使該快照失敗。快照組件可以在失敗之際嘗試另一快照操作。新快照操作可以創(chuàng)建新快照作為新版本。
快照組件還可促進(jìn)創(chuàng)建非原子快照。非原子快照可以使用單個(gè)寫通知來創(chuàng)建??煺战M件可以傳遞指導(dǎo)一個(gè)或多個(gè)節(jié)點(diǎn)開始對(duì)新快照版本進(jìn)行寫入的通知??煺战M件隨后在一個(gè)或多個(gè)節(jié)點(diǎn)全部使用快照的新版本時(shí)可更新共享表。
快照組件還可促進(jìn)創(chuàng)建跨共享原子快照??绻蚕碓涌煺湛梢灾缚煽缍鄠€(gè)共享擴(kuò)展的快照??煺战M件執(zhí)行用于執(zhí)行跨共享原子快照的操作序列??煺战M件可以向共享的表添加作為快照的一部分的新行。共享組件隨后傳遞指導(dǎo)與快照的各共享相對(duì)應(yīng)的一個(gè)或多個(gè)節(jié)點(diǎn)來開始對(duì)新快照版本進(jìn)行寫入的寫入通知??煺战M件隨后可更新共享表。SFA客戶機(jī)或REST客戶機(jī)可以基于與快照版本相關(guān)聯(lián)的時(shí)間戳來引用快照版本。相同時(shí)間戳可被指派給來自多個(gè)共享的諸快照版本。就此,具有相同時(shí)間戳的快照版本的諸共享可被建設(shè)性地鏈接。
現(xiàn)在轉(zhuǎn)向圖3,提供了示出用于訪問分布式文件系統(tǒng)中的文件的方法300的流程圖。最初,在框300,接收具有針對(duì)分布式文件系統(tǒng)中的文件的操作修飾符的基于SFA的操作?;赟FA的操作是基于文件表述性狀態(tài)轉(zhuǎn)移(REST)接口來定義的。SFA-REST接口包括SFA協(xié)議和REST協(xié)議的整合功能性。在框310,針對(duì)分布式文件系統(tǒng)中的文件的基于REST的操作,基于REST的操作是基于SFA-REST接口來定義的。在框330,使用操作修飾符執(zhí)行基于SFA的操作。在框340,參考操作修飾符以執(zhí)行基于REST的操作?;赟FA-REST接口執(zhí)行基于REST的操作。
現(xiàn)轉(zhuǎn)至圖4,提供了解說用于對(duì)文件共享進(jìn)行快照的方法400的流程圖。最初,在框410,更新包括文件共享的共享表。更新共享表包括向共享表添加一行,該行與文件共享的新版本相關(guān)聯(lián)。在框420,將指導(dǎo)節(jié)點(diǎn)開始對(duì)文件共享的新版本進(jìn)行寫入的通知傳遞給與該文件共享相關(guān)聯(lián)的節(jié)點(diǎn)。在框430,確定該節(jié)點(diǎn)正對(duì)文件共享的新版本進(jìn)行寫入。在框440,更新共享表以指示快照成功完成。
轉(zhuǎn)向圖3,提供了示出用于訪問分布式文件系統(tǒng)中的文件的方法500的流程圖。最初,在框510,從SFA客戶機(jī)接收針對(duì)分布式文件系統(tǒng)中的文件的基于SFA的操作。該基于SFA的操作具有指示該基于SFA的操作的機(jī)會(huì)鎖的操作修飾符。該基于SFA的操作是基于SFA-REST接口來定義的。在框520,基于參考基于SFA的操作的操作修飾符來對(duì)文件執(zhí)行基于REST的操作。在框530,從REST客戶機(jī)接收針對(duì)分布式文件系統(tǒng)中的文件的基于REST的操作。基于REST的操作是基于SFA-REST接口來定義的。在框540,基于參考基于SFA的操作的操作修飾符來對(duì)文件執(zhí)行基于REST的操作。
圖中的流程圖可通過示例來被進(jìn)一步描述。如上所述,SMB機(jī)會(huì)鎖(Oplock)是SFA客戶機(jī)可請(qǐng)求以改進(jìn)性能并減少網(wǎng)絡(luò)傳輸?shù)母咚倬彺鏅C(jī)制。如此,特定文件或目錄的最新狀態(tài)可被高速緩存在SMB客戶端上。存在多個(gè)機(jī)會(huì)鎖類型,稱為SMB租賃類型:讀(R):在被獲取時(shí),客戶機(jī)可以從本地高速緩存讀??;寫(W):在被獲取時(shí),客戶機(jī)可以在本地寫而無需將數(shù)據(jù)轉(zhuǎn)儲(chǔ)清除回到SMB服務(wù);句柄(H)在被獲取時(shí),客戶機(jī)在句柄關(guān)閉發(fā)生時(shí)不必立即通知SMB服務(wù)。這在應(yīng)用使用相同的訪問和共享模式持續(xù)打開和關(guān)閉文件的情況下是有用的。重要的是注意到,以上SMB租賃類型獨(dú)立于所指定的訪問和共享模式。通常,每當(dāng)它對(duì)文件打開新句柄時(shí),SMB客戶機(jī)都嘗試獲取所有租賃類型,而不管訪問和共享模式如何。
取決于所調(diào)用的REST操作,請(qǐng)求中斷現(xiàn)有機(jī)會(huì)鎖可能是必要的。在寫機(jī)會(huì)鎖的情況下,SMB客戶機(jī)必須將所高速緩存的變更轉(zhuǎn)儲(chǔ)清除到文件服務(wù)。在此是每一類型的機(jī)會(huì)鎖需要中斷的一些情況:每當(dāng)發(fā)起寫操作(例如,Put Range(安置范圍))時(shí),讀(R)機(jī)會(huì)鎖需要中斷;每當(dāng)發(fā)起讀操作(例如,Get File(獲取文件))時(shí),寫(W)機(jī)會(huì)鎖需要中斷;每當(dāng)客戶機(jī)發(fā)出刪除操作時(shí),句柄(H)機(jī)會(huì)鎖需要中斷,因?yàn)槲募?wù)需要如果刪除操作要成功則沒有句柄能打開。在REST操作面對(duì)與現(xiàn)有SMB句柄(參見上表)的共享違反以驗(yàn)證句柄仍然實(shí)際上被客戶機(jī)上的應(yīng)用打開時(shí),句柄機(jī)會(huì)鎖也被中斷。
中斷機(jī)會(huì)鎖可需要轉(zhuǎn)儲(chǔ)清除所高速緩存的SMB客戶機(jī)變更,這可造成操作響應(yīng)時(shí)間的延遲或可使操作失敗且具有狀態(tài)碼408(請(qǐng)求超時(shí))和錯(cuò)誤碼ClientCacheFlushDelay(客戶機(jī)高速緩存轉(zhuǎn)儲(chǔ)清除延遲)。下文是其中機(jī)會(huì)鎖被中斷的一些場(chǎng)景:
在第一示例中,需要機(jī)會(huì)鎖中斷和SMB客戶機(jī)轉(zhuǎn)儲(chǔ)清除并且REST客戶機(jī)體驗(yàn)到延遲:(1)SMB客戶機(jī)打開文件,獲取RWH機(jī)會(huì)鎖并將數(shù)據(jù)寫在本地。(2)REST客戶機(jī)發(fā)送Get File請(qǐng)求。(2)(i)文件服務(wù)中斷寫(W)機(jī)會(huì)鎖,從而使客戶機(jī)留有RH機(jī)會(huì)鎖。(2)(ii)SMB客戶機(jī)將其高速緩存的數(shù)據(jù)轉(zhuǎn)儲(chǔ)清除到文件服務(wù)并對(duì)機(jī)會(huì)鎖中斷進(jìn)行確收。(2)(iii)文件服務(wù)處理Get File請(qǐng)求,并用所請(qǐng)求的數(shù)據(jù)作出回應(yīng)。在以上示例中,REST客戶機(jī)可體驗(yàn)到由機(jī)會(huì)鎖中斷造成的延遲以及SMB客戶機(jī)將其數(shù)據(jù)轉(zhuǎn)儲(chǔ)清除到文件服務(wù)所花的時(shí)間。注意,對(duì)Get File的后續(xù)調(diào)用將不體驗(yàn)到任何附加延遲,因?yàn)閷?W)機(jī)會(huì)鎖已經(jīng)被中斷。
在第二示例中,需要機(jī)會(huì)鎖中斷但REST客戶機(jī)沒有體驗(yàn)到延遲。(1)SMB客戶機(jī)獲取了RH機(jī)會(huì)鎖。(2)REST客戶機(jī)發(fā)送Put Range請(qǐng)求。(2)(i)文件服務(wù)向SMB客戶機(jī)發(fā)送機(jī)會(huì)鎖中斷請(qǐng)求但不等待響應(yīng)。(2)(ii)文件服務(wù)處理Put Range請(qǐng)求。在以上示例中,雖然需要機(jī)會(huì)鎖中斷,但Put Range請(qǐng)求將不會(huì)體驗(yàn)到任何附加延遲,因?yàn)樵谥袛嘧x機(jī)會(huì)鎖時(shí)不需要響應(yīng)。
存在若干操作,其中文件服務(wù)針對(duì)每一REST的操作的行為是基于已獲取同一文件上的句柄的SMB客戶機(jī)的機(jī)會(huì)鎖狀態(tài)的,并且假定SMB句柄訪問和共享不與REST操作相沖突。如果存在沖突,則句柄機(jī)會(huì)鎖也被中斷以確保句柄真正仍然在客戶機(jī)上打開。在阻塞機(jī)會(huì)鎖中斷的情況下,文件服務(wù)可等待中斷成功的確收。在非阻塞機(jī)會(huì)鎖中斷的情況下,它不必等待。
在需要阻塞機(jī)會(huì)鎖中斷的情況下,如果中斷在指定請(qǐng)求超時(shí)內(nèi)或在30秒內(nèi)(以先到者為準(zhǔn))沒有成功,則REST存在將失敗且具有狀態(tài)碼408(請(qǐng)求超時(shí))和錯(cuò)誤碼ClientCacheFlushDelay。設(shè)想了Delete File(刪除文件)請(qǐng)求也需要指定機(jī)會(huì)鎖句柄(H)租賃。這確保在REST客戶機(jī)調(diào)用Delete File時(shí),任何文件句柄仍然實(shí)際上被SMB客戶機(jī)上的應(yīng)用打開。如果存在共享違反,則該請(qǐng)求失敗且具有狀態(tài)碼409(沖突)和錯(cuò)誤碼SharingViolation(共享違反)。
轉(zhuǎn)向圖6,提供了示出用于訪問分布式文件系統(tǒng)中的文件的方法500的流程圖。最初,在框610,從SFA客戶機(jī)接收針對(duì)分布式文件系統(tǒng)中的文件的基于SFA的操作。該基于SFA的操作具有指示該基于SFA的操作的訪問共享模式的操作修飾符。該基于SFA的操作是基于SFA-REST接口來定義的。在框620,基于參考基于SFA的操作的操作修飾符來對(duì)文件執(zhí)行基于REST的操作。在框630,從REST客戶機(jī)接收針對(duì)分布式文件系統(tǒng)中的文件的基于REST的操作?;赗EST的操作是基于SFA-REST接口來定義的。在框640,基于參考基于SFA的操作的操作修飾符來對(duì)文件執(zhí)行基于REST的操作。
圖中的流程圖可通過示例來被進(jìn)一步描述。在SMB客戶機(jī)使用FileShare.Write(而非FileShare.Read,它將意味著其他客戶機(jī)同時(shí)被允許讀該文件)打開文件時(shí),可發(fā)生REST獲取文件共享違反。REST客戶機(jī)隨后對(duì)文件執(zhí)行Get File((REST API)操作(從而使用在上表中指定的FileAccess.Read)。這導(dǎo)致REST客戶機(jī)的請(qǐng)求以狀態(tài)碼409(沖突)和錯(cuò)誤碼SharingViolation(共享違反)失敗,因?yàn)镾MB客戶機(jī)在拒絕讀/刪除訪問時(shí)仍然使文件打開。
參考表1,在接收到基于REST的操作時(shí),可確定若干不同SMB訪問模式,以使得基于訪問模式來執(zhí)行基于REST的操作。
表1
表2
如上表1所示,列出文件(List Files,REST API)、獲取文件屬性(Get File Properties,REST API)以及獲取文件元數(shù)據(jù)(Get File Metadata,REST API)沒有操作SMB文件內(nèi)容且不需要對(duì)文件的讀訪問(即,即使SMB客戶機(jī)使文件打開用于獨(dú)占性讀訪問,這些操作也仍將成功)。
進(jìn)一步設(shè)想了取決于在SMB客戶機(jī)打開文件時(shí)指定的共享模式,REST訪問返回狀態(tài)碼409(沖突)與錯(cuò)誤碼SharingViolation是可能的,如表2中描述的。
參考各具體實(shí)施例描述了本發(fā)明的各實(shí)施例,各具體實(shí)施例在所有方面都旨在是說明性的而非限制性的。不偏離本發(fā)明范圍的情況下,各替換實(shí)施例對(duì)于本發(fā)明所屬領(lǐng)域的技術(shù)人員將變得顯而易見。
從前面的描述可以看出,本發(fā)明很好地適用于實(shí)現(xiàn)上文所闡述的所有目的和目標(biāo),并且具有對(duì)于該結(jié)構(gòu)是顯而易見且固有的其他優(yōu)點(diǎn)。
可以理解,某些特征和子組合是有用的,并且可以在不參考其他特征或子組合的情況下使用。這由權(quán)利要求所構(gòu)想的,并在權(quán)利要求的范圍內(nèi)。