本發(fā)明涉及云存儲領域,具體涉及一種基于容器技術的存儲訪問方法及系統(tǒng)。
背景技術:
:隨著paas云計算技術的發(fā)展,對存儲的使用也越來越廣泛,不同場景下對存儲的要求區(qū)別也很大,因此衍生出了多樣化的存儲類別,總體來講大致分為三種類型:塊設備存儲,文件存儲和對象存儲。而且不同的paas技術實現框架(比如最主要的三種實現技術:mesos,kubernetes和swarm)對存儲的實現和調用也迥異,這就導致了paas云平臺訪問接口無法統(tǒng)一,開發(fā)、使用和維護存儲設備過程中需要多次適配,更缺乏針對存儲卷的權限及狀態(tài)管理,用戶使用非常不方便。目前大多數的paas云平臺都是基于docker存儲卷的方式進行存儲的管理和訪問,docker存儲卷是以plugin的方式,提供了存儲的連接,掛載,卷創(chuàng)建,查詢,刪除等有限的功能接口。而且不同類型的卷驅動有各自不同的實現,這些功能接口不能完整的涵蓋和反映這些卷驅動的特點,因此某些情況下需要直接使用這些卷的驅動所提供的功能,這就造成了云平臺在對存儲的管理上,既要使用docker所提供的接口,又要直接使用各種存儲卷驅動所提供的接口,不同采用統(tǒng)一的存儲管理接口?,F有的容器存儲的方案有以下問題:對不同類型存儲的支持方式不統(tǒng)一。比如對塊設備,文件存儲和對象存儲,需要分別開發(fā)不同的存儲管理組件,才能完成存儲設備的連接,存儲卷的申請,創(chuàng)建,掛載,刪除等工作。而不同的云平臺框架,比如mesos和kubernetes,也有各自實現存儲管理的接口,非?;靵y,難以做到統(tǒng)一的管理,開發(fā)和維護非常不方便。缺乏對存儲卷的權限管理?,F有的存儲管理方案,缺乏對權限的控制。缺乏對存儲卷狀態(tài)的管理。現有的存儲管理方案,缺乏對存儲卷狀態(tài)的監(jiān)控和管理。缺乏對存儲連接狀態(tài)的管理和冗余?,F有的存儲卷管理方案,主要是依靠命令行和服務的方式對存儲設備進行連接,缺乏對存儲連接狀態(tài)的管理,更沒有對存儲連接的高可用冗余方案。因此,構建一種基于容器技術的存儲訪問方法及系統(tǒng),以解決現有技術中的以上問題很有必要。技術實現要素:本發(fā)明實施例提供了一種基于容器技術的存儲訪問方法及系統(tǒng),統(tǒng)一了不同存儲類型的連接和訪問,統(tǒng)一了不同云平臺技術對存儲的接口。本發(fā)明實施例提供的一種基于容器技術的存儲訪問系統(tǒng),包括:卷管理模塊,用戶通過界面或api發(fā)送創(chuàng)建卷的請求,實現不同類型卷的創(chuàng)建,并對所創(chuàng)建的卷進行管理;存儲驅動管理模塊,接收到所述卷管理模塊發(fā)送的創(chuàng)建卷的請求,該存儲驅動管理模塊生成特定的卷驅動所對應的容器編排配置文件,調用容器編排模塊,在計算節(jié)點上生成相應的存儲連接管理容器;通過所述容器編排模塊來監(jiān)控各容器的狀態(tài)來反映各計算節(jié)點上存儲連接的狀態(tài),并且通過所述存儲連接管理容器,來接受存儲卷管理的管理請求;權限管理模塊,所述權限管理模塊調用keystone的接口,實現用戶的認證和權限管理,同時兼容ldap和kerberos;容器編排模塊,所述容器編排模塊將各存儲驅動以容器的方式,運行在相應的計算節(jié)點;各存儲驅動提供針對不同編排框架的配置文件,編排模塊調用編排框架的api來實現各存儲驅動的容器化和調度。所述卷管理模塊,進一步包括:用戶通過界面或api發(fā)送創(chuàng)建卷的請求;該請求會先經過所述權限管理模塊的處理,判斷用戶是否具有創(chuàng)建卷的權限,如果沒有,退出并返回權限不夠;如果權限驗證通過,會調用卷驅動模塊查詢并返回已安裝的存儲驅動;用戶選擇列出的存儲驅動并填入詳細的卷參數信息;系統(tǒng)對傳入的所述卷參數信息進行校驗,如果失敗返回上一步讓用戶重新修改參數;參數校驗通過,發(fā)送最終的卷創(chuàng)建命令并返回結果給用戶。所述權限管理模塊,進一步包括:用戶通過ui或者api傳入用戶名和密碼到認證模塊,認證通過后返回token;用戶使用該token向卷驅動模塊發(fā)出查詢請求;所述卷驅動模塊向所述認證模塊請求,驗證該用戶傳來的token是否具有查詢卷驅動的權限;驗證通過后,向所述卷管理模塊發(fā)出創(chuàng)建卷請求;所述卷管理模塊向所述認證模塊發(fā)送請求,驗證該token是否具有創(chuàng)建卷的權限;驗證成功后創(chuàng)建卷,并向卷驅動模塊返回創(chuàng)建成功;卷驅動模塊收到后,執(zhí)行創(chuàng)建卷的操作,并向用戶返回操作成功。本發(fā)明實施例提供的一種基于容器技術的存儲訪問方法,包括:用戶通過界面或api發(fā)送創(chuàng)建卷的請求,實現不同類型卷的創(chuàng)建,并對所創(chuàng)建的卷進行管理;接收到上述創(chuàng)建卷的請求,生成特定的卷驅動所對應的容器編排配置文件,調用容器編排模塊,在計算節(jié)點上生成相應的存儲連接管理容器;通過所述容器編排模塊來監(jiān)控各容器的狀態(tài)來反映各計算節(jié)點上存儲連接的狀態(tài),并且通過所述存儲連接管理容器,來接受存儲卷管理的管理請求;調用keystone的接口,實現用戶的認證和權限管理,同時兼容ldap和kerberos;將各存儲驅動以容器的方式,運行在相應的計算節(jié)點;各存儲驅動提供針對不同編排框架的配置文件,編排模塊調用編排框架的api來實現各存儲驅動的容器化和調度。所述用戶通過界面或api發(fā)送創(chuàng)建卷的請求,實現不同類型卷的創(chuàng)建,并對所創(chuàng)建的卷進行管理,進一步包括:用戶通過界面或api發(fā)送創(chuàng)建卷的請求;該請求會先經過處理,判斷用戶是否具有創(chuàng)建卷的權限,如果沒有,退出并返回權限不夠;如果權限驗證通過,會調用卷驅動模塊查詢并返回已安裝的存儲驅動;用戶選擇列出的存儲驅動并填入詳細的卷參數信息;系統(tǒng)對傳入的所述卷參數信息進行校驗,如果失敗返回上一步讓用戶重新修改參數;參數校驗通過,發(fā)送最終的卷創(chuàng)建命令并返回結果給用戶。所述調用keystone的接口,實現用戶的認證和權限管理,同時兼容ldap和kerberos,進一步包括:用戶通過ui或者api傳入用戶名和密碼到認證模塊,認證通過后返回token;用戶使用該token向卷驅動模塊發(fā)出查詢請求;所述卷驅動模塊向所述認證模塊請求,驗證該用戶傳來的token是否具有查詢卷驅動的權限;驗證通過后,向卷管理模塊發(fā)出創(chuàng)建卷請求;所述卷管理模塊向所述認證模塊發(fā)送請求,驗證該token是否具有創(chuàng)建卷的權限;驗證成功后創(chuàng)建卷,并向卷驅動模塊返回創(chuàng)建成功;卷驅動模塊收到后,執(zhí)行創(chuàng)建卷的操作,并向用戶返回操作成功。本發(fā)明具有以下技術效果:統(tǒng)一了不同存儲類型(塊設備,文件存儲,對象存儲)的連接和訪問,統(tǒng)一了不同云平臺技術對存儲的接口。內部通過存儲驅動管理模塊,存儲卷管理模塊和容器編排模塊的協同工作,完成了外部api訪問的統(tǒng)一。實現了存儲卷的權限管理。該方案通過內部的權限管理模塊,對接目前外部通用的openstack技術,可以進一步實現對ldap,kerberos等被廣泛使用的認證和權限管理功能的兼容。實現了對存儲卷狀態(tài)的管理。該方案通過內部的存儲卷狀態(tài)管理模塊,通過卷驅動管理模塊以及數據庫模塊,將存儲卷的狀態(tài)持久化,實現了存儲卷的狀態(tài)管理。實現了對存儲連接狀態(tài)的管理和冗余。該方案通過容器編排技術,實現了存儲卷的連接管理和狀態(tài)管理的容器化,通過容器狀態(tài)來反映具體計算節(jié)點上存儲卷的連接情況,同時依賴這些編排技術的高可用和彈性伸縮技術,實現了存儲卷連接狀態(tài)的管理和高可用。附圖說明為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域的普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。圖1是本發(fā)明一個實施例所述的系統(tǒng)邏輯架構圖圖2是本發(fā)明一個實施例所述的系統(tǒng)技術架構圖圖3為本發(fā)明一個實施例所述的模塊調用圖圖4為本發(fā)明一個實施例所述的卷創(chuàng)建流程圖圖5為本發(fā)明一個實施例所述的模塊設計圖交互圖圖6為本發(fā)明一個實施例所述的交互圖圖7為本發(fā)明一個實施例所述的方法的電子設備的硬件結構連接示意圖具體實施方式為了使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本發(fā)明作進一步地詳細描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。下面結合附圖詳細說明本發(fā)明的優(yōu)選實施例。實施例1本方案采用容器技術,集成了多種存儲類型的驅動(包括塊設備,文件系統(tǒng),對象存儲),實現了存儲連接以及存儲卷的狀態(tài)監(jiān)控,權限管理,對外提供統(tǒng)一的restapi接口,同時利用容器編排技術的高可用功能,實現了存儲連接狀態(tài)的高可用冗余,使得存儲設備的開發(fā),維護和使用非常簡單高效。1.宏觀業(yè)務邏輯介紹(1)系統(tǒng)邏輯架構(如圖1所示):系統(tǒng)從邏輯結構上大致分為以下幾個模塊:1)restfulapi:提供統(tǒng)一的存儲訪問接口服務,并將api請求結合存儲驅動管理模塊的相關信息,路由到最終的存儲驅動容器中去執(zhí)行。2)存儲驅動管理:負責各類型存儲驅動的狀態(tài)和配置管理。3)卷狀態(tài)管理:負責卷的管理,包含創(chuàng)建,查詢,掛載,刪除等操作。4)容器編排:負責將各類卷驅動以容器的方式發(fā)布到各計算節(jié)點,并且監(jiān)控卷驅動的運行狀態(tài)和高可用狀態(tài)。(2)系統(tǒng)技術架構(如圖2所示)本方案的技術架構如下:1)restfulapi模塊提供統(tǒng)一的訪問接口,因此無論是mesos,kubernetes還是swarm都可以直接調用該統(tǒng)一接口,克服了原有方案針對某一平臺需要開發(fā)特定接口的弊端。2)存儲驅動管理模塊兼容絕大多數的塊存儲,文件存儲和對象存儲驅動,同時抓取卷驅動的狀態(tài)并持久化。3)卷管理模塊獲取卷的狀態(tài)信息并持久化。4)權限管理模塊調用主流的openstackkeystone認證接口,可以外接ldap,kerberos等三方認證技術。5)容器編排模塊使用常規(guī)的容器編排技術,如mesos和kubernetes,將存儲驅動以容器的方式發(fā)布到計算節(jié)點,從而實現存儲卷驅動的狀態(tài)監(jiān)控和高可用實現。2.微觀代碼邏輯介紹(1)存儲驅動管理模塊a)數據庫表volume_drivers表:volume_regist_info表:名稱屬性說明driveridvarchar(36)存儲驅動idhostidvarchar(36)主機iddriverinstalltimedatetime驅動安裝時間driveruninstalltimedatetime驅動卸載時間b)模塊調用(如圖3所示)用戶通過ui或系統(tǒng)對外提供的api接口,申請創(chuàng)建不同類型的卷,創(chuàng)建請求發(fā)送至卷驅動管理模塊,該模塊生成特定的卷驅動所對應的容器編排配置文件,調用容器編排模塊,在計算節(jié)點上生成相應的存儲連接管理容器。通過容器編排模塊來監(jiān)控各容器的狀態(tài)來反映各計算節(jié)點上存儲連接的狀態(tài),并且通過這些存儲連接管理容器,來接受存儲卷管理的管理請求。(2)卷管理模塊a)數據庫表volume表:b)卷創(chuàng)建流程圖(如圖4所示)以卷創(chuàng)建的流程為例說明如下:1)用戶通過界面或api發(fā)送創(chuàng)建卷的請求2)該請求會先經過權限模塊的處理,判斷用戶是否具有創(chuàng)建卷的權限,如果沒有,退出并返回權限不夠。3)如果權限驗證通過,會調用卷驅動模塊查詢并返回已安裝的存儲驅動。4)用戶選擇列出的存儲驅動并填入詳細的卷參數信息(卷名稱,大小,其他附加信息)。5)系統(tǒng)對傳入的參數進行校驗,如果失敗返回上一步讓用戶重新修改參數。6)參數校驗通過,發(fā)送最終的卷創(chuàng)建命令并返回結果給用戶。(3)權限管理模塊a)模塊設計(如圖5所示)權限管理模塊調用keystone的接口,實現用戶的認證和權限管理,同時兼容ldap和kerberos。在系統(tǒng)內部,卷驅動管理和卷管理模塊都需要與權限模塊進行交互,實現卷驅動和卷管理過程中的認證和授權。b)交互圖(如圖6所示)以創(chuàng)建卷為例,說明各相關模塊與認證模塊的交互順序:1)用戶通過ui或者api傳入用戶名和密碼到認證模塊,認證通過后返回token。2)用戶使用該token向卷驅動模塊發(fā)出查詢請求。3)卷驅動模塊向認證模塊請求,驗證該用戶傳來的token是否具有查詢卷驅動的權限。驗證通過后,向卷管理模塊發(fā)出創(chuàng)建卷請求。4)卷管理模塊向認證模塊發(fā)送請求,驗證該token是否具有創(chuàng)建卷的權限。驗證成功后創(chuàng)建卷,并向卷驅動模塊返回創(chuàng)建成功。5)卷驅動模塊收到后,執(zhí)行創(chuàng)建卷的操作,并向用戶返回操作成功。(4)容器編排模塊容器編排模塊負責將各存儲驅動以容器的方式,運行在相應的計算節(jié)點。該模塊可以支持多種編排框架,包含但不僅限于目前通用的swarm,mesos,kubernetes。各存儲驅動提供針對不同編排框架的配置文件,編排模塊調用編排框架的api來實現各存儲驅動的容器化和調度。下面以mesos的編排框架為例說明各存儲驅動的相關配置文件,以支持nfs和glusterfs的convoy存儲驅動為例:marathon_config.json:marathon.json.mustache:實施例2一種電子設備,包括:至少一個處理器;以及,與所述至少一個處理器通信連接的存儲器;其中,所述存儲器存儲有可被所述一個處理器執(zhí)行的指令,所述指令被所述至少一個處理器執(zhí)行,以使所述至少一個處理器能夠執(zhí)行以下方法步驟:用戶通過界面或api發(fā)送創(chuàng)建卷的請求,實現不同類型卷的創(chuàng)建,并對所創(chuàng)建的卷進行管理;接收到上述創(chuàng)建卷的請求,生成特定的卷驅動所對應的容器編排配置文件,調用容器編排模塊,在計算節(jié)點上生成相應的存儲連接管理容器;通過所述容器編排模塊來監(jiān)控各容器的狀態(tài)來反映各計算節(jié)點上存儲連接的狀態(tài),并且通過所述存儲連接管理容器,來接受存儲卷管理的管理請求;調用keystone的接口,實現用戶的認證和權限管理,同時兼容ldap和kerberos;將各存儲驅動以容器的方式,運行在相應的計算節(jié)點;各存儲驅動提供針對不同編排框架的配置文件,編排模塊調用編排框架的api來實現各存儲驅動的容器化和調度。所述用戶通過界面或api發(fā)送創(chuàng)建卷的請求,實現不同類型卷的創(chuàng)建,并對所創(chuàng)建的卷進行管理,進一步包括:用戶通過界面或api發(fā)送創(chuàng)建卷的請求;該請求會先經過處理,判斷用戶是否具有創(chuàng)建卷的權限,如果沒有,退出并返回權限不夠;如果權限驗證通過,會調用卷驅動模塊查詢并返回已安裝的存儲驅動;用戶選擇列出的存儲驅動并填入詳細的卷參數信息;系統(tǒng)對傳入的所述卷參數信息進行校驗,如果失敗返回上一步讓用戶重新修改參數;參數校驗通過,發(fā)送最終的卷創(chuàng)建命令并返回結果給用戶。所述調用keystone的接口,實現用戶的認證和權限管理,同時兼容ldap和kerberos,進一步包括:用戶通過ui或者api傳入用戶名和密碼到認證模塊,認證通過后返回token;用戶使用該token向卷驅動模塊發(fā)出查詢請求;所述卷驅動模塊向所述認證模塊請求,驗證該用戶傳來的token是否具有查詢卷驅動的權限;驗證通過后,向卷管理模塊發(fā)出創(chuàng)建卷請求;所述卷管理模塊向所述認證模塊發(fā)送請求,驗證該token是否具有創(chuàng)建卷的權限;驗證成功后創(chuàng)建卷,并向卷驅動模塊返回創(chuàng)建成功;卷驅動模塊收到后,執(zhí)行創(chuàng)建卷的操作,并向用戶返回操作成功。實施例3本申請實施例提供了一種非易失性計算機存儲介質,所述計算機存儲介質存儲有計算機可執(zhí)行指令,該計算機可執(zhí)行指令可執(zhí)行上述任意方法實施例中的方法。實施例4圖7是本實施例提供的所述方法的電子設備的硬件結構示意圖,如圖7所示,該設備包括:一個或多個處理器710以及存儲器720,圖6中以一個處理器710為例。智能方法的設備還可以包括:輸入裝置730和輸出裝置740。處理器710、存儲器720、輸入裝置730和輸出裝置740可以通過總線或者其他方式連接,圖6中以通過總線連接為例。存儲器720作為一種非易失性計算機可讀存儲介質,可用于存儲非易失性軟件程序、非易失性計算機可執(zhí)行程序以及模塊,如本申請實施例中的方法對應的程序指令/模塊。處理器710通過運行存儲在存儲器720中的非易失性軟件程序、指令以及模塊,從而執(zhí)行服務器的各種功能應用以及數據處理,即實現上述方法實施例方法。存儲器720可以包括存儲程序區(qū)和存儲數據區(qū),其中,存儲程序區(qū)可存儲操作系統(tǒng)、至少一個功能所需要的應用程序;存儲數據區(qū)可存儲根據方法中使用所創(chuàng)建的數據等。此外,存儲器720可以包括高速隨機存取存儲器,還可以包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他非易失性固態(tài)存儲器件。輸入裝置730可接收輸入的數字或字符信息,以及產生與電子設備的用戶設置以及功能控制有關的鍵信號輸入。輸出裝置740可包括顯示屏等顯示設備。所述一個或者多個模塊存儲在所述存儲器720中,當被所述一個或者多個處理器710執(zhí)行時,執(zhí)行上述任意方法實施例中的方法。縮略語的中英文全稱iaas--基礎架構即服務paas--平臺即服務docker--一個開源的應用容器引擎,讓開發(fā)者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的linux機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。openstack--一個開源的云計算管理平臺項目,由幾個主要的組件組合起來完成具體工作。openstack支持幾乎所有類型的云環(huán)境,項目目標是提供實施簡單、可大規(guī)模擴展、豐富、標準統(tǒng)一的云計算管理平臺。mesos--是一個通用的集群管理器[1],起源于google的數據中心資源管理系統(tǒng)borg。kubernetes--是google開源的容器集群管理系統(tǒng)。它構建于docker技術之上,為容器化的應用提供資源調度、部署運行、服務發(fā)現、擴容縮容等整一套功能。swarm--是docker公司在2014年12月初新發(fā)布的容器管理工具。iscsi--是一種新儲存技術,該技術是將現有scsi接口與以太網絡(ethernet)技術結合,使服務器可與使用ip網絡的儲存裝置互相交換資料。nfs--即網絡文件系統(tǒng),是freebsd支持的文件系統(tǒng)中的一種,它允許網絡中的計算機之間通過tcp/ip網絡共享資源。在nfs的應用中,本地nfs的客戶端應用可以透明地讀寫位于遠端nfs服務器上的文件,就像訪問本地文件一樣。ceph--ceph是一種為優(yōu)秀的性能、可靠性和可擴展性而設計的統(tǒng)一的、分布式文件系統(tǒng)。glusterfs--是一個大尺度文件系統(tǒng)。它是各種不同的存儲服務器之上的組合,這些服務器由以太網或無限帶寬技術infiniband以及遠程直接內存訪問rdma互相融匯,最終所形成的一個大的并行文件系統(tǒng)網絡。cinder--是虛擬基礎架構中必不可少的組件,是存儲虛擬機鏡像文件及虛擬機使用的數據的基礎。keystone–openstack中的認證授權模塊,提供了用戶信息管理和完成各個模塊認證服務。ldap--是輕量目錄訪問協議,英文全稱是lightweightdirectoryaccessprotocol,一般都簡稱為ldap。kerberos--是一種網絡認證協議,其設計目標是通過密鑰系統(tǒng)為客戶機/服務器應用程序提供強大的認證服務。上述產品可執(zhí)行本申請實施例所提供的方法,具備執(zhí)行方法相應的功能模塊和有益效果。未在本實施例中詳盡描述的技術細節(jié),可參見本申請實施例所提供的方法。本發(fā)明實施例的終端以多種形式存在,包括但不限于:(1)移動通信設備:這類設備的特點是具備移動通信功能,并且以提供話音、數據通信為主要目標。這類終端包括:智能手機(例如iphone)、多媒體手機、功能性手機,以及低端手機等。(2)超移動個人計算機設備:這類設備屬于個人計算機的范疇,有計算和處理功能,一般也具備移動上網特性。這類終端包括:pda、mid和umpc設備等,例如ipad。(3)便攜式娛樂設備:這類設備可以顯示和播放多媒體內容。該類設備包括:音頻、視頻播放器(例如ipod),掌上游戲機,電子書,以及智能玩具和便攜式車載導航設備。(4)服務器:提供計算服務的設備,服務器的構成包括處理器、硬盤、內存、系統(tǒng)總線等,服務器和通用的計算機架構類似,但是由于需要提供高可靠的服務,因此在處理能力、穩(wěn)定性、可靠性、安全性、可擴展性、可管理性等方面要求較高。(5)其他具有數據交互功能的電子裝置,例如電視機、車載大屏等。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上??梢愿鶕嶋H的需要選擇其中的部分或者全部模塊來實現本實施例方案的目的。通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到各實施方式可借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件?;谶@樣的理解,上述技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品可以存儲在計算機可讀存儲介質中,如rom/ram、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執(zhí)行各個實施例或者實施例的某些部分所述的方法。最后應說明的是:以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發(fā)明各實施例技術方案的精神和范圍。當前第1頁12