專利名稱:升級(jí)期間的在線數(shù)據(jù)庫可用性的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及升級(jí)期間的在線數(shù)據(jù)庫可用性。
背景技術(shù):
基于web的在線服務(wù)包括位于web服務(wù)器上的文件以及存儲(chǔ)在數(shù)據(jù)庫中的數(shù)據(jù)。 例如,存在大量位于不同網(wǎng)絡(luò)中的服務(wù)器,以處理針對(duì)該服務(wù)的通信。與應(yīng)用相關(guān)聯(lián)的數(shù)據(jù)庫的升級(jí)可能導(dǎo)致數(shù)據(jù)庫在一段時(shí)間內(nèi)不可用。對(duì)某些服務(wù)而言,升級(jí)過程可能給該服務(wù)的顧客帶來嚴(yán)重干擾。
發(fā)明內(nèi)容
提供概述以便以簡(jiǎn)化形式介紹在以下具體實(shí)施方式
中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并非旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。在線服務(wù)包括被升級(jí)同時(shí)仍然處理請(qǐng)求的數(shù)據(jù)庫。例如,在web服務(wù)器被升級(jí)的同時(shí),web服務(wù)器繼續(xù)請(qǐng)求對(duì)該數(shù)據(jù)庫進(jìn)行操作。該數(shù)據(jù)庫的模式在web服務(wù)器被升級(jí)之前升級(jí)以利用升級(jí)后的模式。對(duì)升級(jí)后的模式所作的改變是與在升級(jí)過程期間使用的模式向后兼容的。對(duì)升級(jí)過程期間對(duì)數(shù)據(jù)庫執(zhí)行的操作施加限制。在升級(jí)模式之后,該在線服務(wù)的web服務(wù)器被升級(jí)以使用升級(jí)后的模式。
圖1示出了用于管理與諸如內(nèi)容管理服務(wù)之類的在線服務(wù)相關(guān)聯(lián)的網(wǎng)絡(luò)的云管理器系統(tǒng);圖2示出了包括管理器和相關(guān)聯(lián)的數(shù)據(jù)庫的云管理器;圖3示出了存儲(chǔ)在數(shù)據(jù)庫的行內(nèi)的示例性作業(yè)記錄;圖4示出了用于網(wǎng)絡(luò)的示例系統(tǒng),該網(wǎng)絡(luò)包括用于在線服務(wù)的前端和后端服務(wù)器;圖5示出計(jì)算機(jī)的計(jì)算機(jī)架構(gòu);以及圖6-7示出了用于在仍然處理請(qǐng)求的同時(shí)升級(jí)在線服務(wù)的數(shù)據(jù)庫的過程。
具體實(shí)施例方式現(xiàn)將參考附圖來描述各實(shí)施例,在附圖中類似的標(biāo)號(hào)代表類似的元素。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、組件、數(shù)據(jù)結(jié)構(gòu)和其它類型的結(jié)構(gòu)。也可使用其它計(jì)算機(jī)系統(tǒng)配置,包括手持式設(shè)備、多處理器系統(tǒng)、基于微處理器或可編程消費(fèi)電子產(chǎn)品、小型計(jì)算機(jī)、大型計(jì)算機(jī)等等。也可使用在其中任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行的分布式計(jì)算環(huán)境。在分布式計(jì)算環(huán)境中,程序模塊可位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備兩者中。
圖1示出了用于管理與在線服務(wù)相關(guān)聯(lián)的網(wǎng)絡(luò)的云管理系統(tǒng)。系統(tǒng)100示出了云管理器105,該云管理器105被連接到可能分布在世界各地的不同網(wǎng)絡(luò)并對(duì)其進(jìn)行管理。網(wǎng)絡(luò)中的每個(gè)網(wǎng)絡(luò)被配置成為一個(gè)或多個(gè)承租人(例如客戶端、顧客)提供內(nèi)容服務(wù)。這些網(wǎng)絡(luò)可以被主存(host)在云服務(wù)內(nèi)和/或內(nèi)部部署(on-premises)數(shù)據(jù)中心內(nèi)。云管理器105用于對(duì)這些網(wǎng)絡(luò)進(jìn)行部署、配置和管理。云管理器被配置為通過可容忍間歇性網(wǎng)絡(luò)故障的冪等且異步的應(yīng)用web服務(wù)應(yīng)用編程接口(API) 150來接收請(qǐng)求。如所示的,云管理器105包括工作管理器110、機(jī)器管理器115、應(yīng)用專用管理器 120、腳本130以及諸如數(shù)據(jù)存儲(chǔ)140(例如,數(shù)據(jù)庫)之類的中央儲(chǔ)存庫。未包括在所示管理器之一內(nèi)的功能可以駐留在云管理器的某個(gè)其他位置。根據(jù)一個(gè)實(shí)施例,應(yīng)用管理器120 是SharePoint承租人管理器,該管理器包括SharePoint專用邏輯。工作管理器110管理任務(wù)的執(zhí)行,并且啟用對(duì)較長(zhǎng)時(shí)間運(yùn)行的任務(wù)的調(diào)度和重試。工作管理器110啟動(dòng)存儲(chǔ)在作業(yè)隊(duì)列112中的作業(yè)并且跟蹤運(yùn)行中的作業(yè)。當(dāng)已經(jīng)流逝了預(yù)定的時(shí)間時(shí),工作管理器110可以自動(dòng)地取消任務(wù)并且執(zhí)行與該任務(wù)相關(guān)的某些進(jìn)一步的處理。根據(jù)一個(gè)實(shí)施例,作業(yè)隊(duì)列112中的任務(wù)由工作管理器110通過調(diào)用一個(gè)或多個(gè)腳本130來執(zhí)行。例如,可以使用諸如微軟的PowerShell 之類的腳本語言來對(duì)由工作管理器110執(zhí)行的任務(wù)進(jìn)行編程。每個(gè)腳本可以作為新進(jìn)程運(yùn)行。盡管將每個(gè)腳本作為新進(jìn)程來執(zhí)行可以具有相當(dāng)高的CPU開銷,但是該系統(tǒng)是可伸縮的,并且有助于為每次腳本執(zhí)行確保干凈的環(huán)境,加上在腳本完成時(shí)進(jìn)行完全的清理。機(jī)器管理器115被配置成管理網(wǎng)絡(luò)(例如網(wǎng)絡(luò)1、網(wǎng)絡(luò)2、網(wǎng)絡(luò)3)中的物理機(jī)器。 一般而言,機(jī)器管理器115理解網(wǎng)絡(luò)、物理機(jī)器、虛擬機(jī)(VM)、VM鏡像(VHD)等等。機(jī)器管理器不必牢固綁定于網(wǎng)絡(luò)內(nèi)運(yùn)行的特定服務(wù),而是按照“角色”跟蹤網(wǎng)絡(luò)中的各種組件。例如,可以通過API 150請(qǐng)求機(jī)器管理器115在網(wǎng)絡(luò)3上部署具有版本12. 34. 56. 78的“你0” 型VM。響應(yīng)于對(duì)云管理器105的請(qǐng)求,機(jī)器管理器115對(duì)位于網(wǎng)絡(luò)3上的合適物理機(jī)器進(jìn)行定位,并且根據(jù)與VM的角色相關(guān)聯(lián)的VM鏡像來配置VM。使用具有版本12. 34. 56. 78的類型為Foo的VHD來配置物理機(jī)器,該VHD被存儲(chǔ)在諸如數(shù)據(jù)存儲(chǔ)140之類的數(shù)據(jù)存儲(chǔ)內(nèi)。 在網(wǎng)絡(luò)內(nèi)使用的鏡像也可以存儲(chǔ)在其他位置處,諸如用于所述網(wǎng)絡(luò)中的一個(gè)或多個(gè)網(wǎng)絡(luò)的本地?cái)?shù)據(jù)共享中??梢赃\(yùn)行腳本來執(zhí)行VHD在物理機(jī)器上的安裝以及用于執(zhí)行任何部署后的配置。機(jī)器管理器115跟蹤每個(gè)網(wǎng)絡(luò)的機(jī)器配置。例如,機(jī)器管理器115可以跟蹤VM的角色(VM的類型)、VM的狀態(tài)(供應(yīng)中(ftOvisioning)、運(yùn)行中、已停止、故障)、版本以及 VM是否存在于給定場(chǎng)中(這隱含了其網(wǎng)絡(luò))。腳本130被配置為存儲(chǔ)將要執(zhí)行以便既本地地為云管理器105執(zhí)行工作又遠(yuǎn)程地在所述網(wǎng)絡(luò)中的一個(gè)或多個(gè)網(wǎng)絡(luò)上執(zhí)行工作的腳本。腳本130中的一個(gè)或多個(gè)還可以存儲(chǔ)在其他位置。例如,要在網(wǎng)絡(luò)(例如網(wǎng)絡(luò)1、網(wǎng)絡(luò)2、網(wǎng)絡(luò)3)上執(zhí)行的腳本可以本地地存儲(chǔ)到該網(wǎng)絡(luò)。這些腳本可用于許多不同的目的。例如,所述腳本可以用于執(zhí)行對(duì)所述網(wǎng)絡(luò)中的一個(gè)或多個(gè)網(wǎng)絡(luò)中的機(jī)器的配置,改變之前配置的機(jī)器上的設(shè)定,添加新的VM,添加新的數(shù)據(jù)庫,將數(shù)據(jù)從一個(gè)機(jī)器移動(dòng)到另一個(gè),移動(dòng)承租人,改變模式等。根據(jù)一個(gè)實(shí)施例,這些腳本是微軟的PowerShell 腳本。也可以使用其他編程實(shí)施方式。例如,可以使用編譯和/ 或前期綁定編程語言來實(shí)現(xiàn)該功能。然而,腳本是一種表達(dá)要執(zhí)行的任務(wù)中的許多個(gè)的相當(dāng)精確的語言。用諸如C#的編程語言對(duì)其等價(jià)物進(jìn)行編程將常常需要冗長(zhǎng)得多的實(shí)施方式。腳本還被后期綁定,這意味著可以以多個(gè)版本的底層代碼庫為目標(biāo),而不必不斷地鏈接到不同的接口 DLL。使用PowerShell腳本將允許進(jìn)程由云管理器105本地地啟動(dòng),這進(jìn)而可以啟動(dòng)遠(yuǎn)程機(jī)器(即,所附連的網(wǎng)絡(luò)之一中的物理機(jī)器)上的進(jìn)程。還可以使用其他技術(shù)來啟動(dòng)遠(yuǎn)程機(jī)器上的進(jìn)程,諸如安全Shell (SSH)等。云管理器105正在管理的應(yīng)用專用信息由應(yīng)用管理器120來執(zhí)行。根據(jù)一個(gè)實(shí)施例,應(yīng)用專用信息與微軟SharePoint 有關(guān)。由此,應(yīng)用管理器120被配置為了解 SharePoint承租人、站點(diǎn)集合等。每個(gè)網(wǎng)絡(luò)可以被配置成用于承租人的專用網(wǎng)絡(luò)和/或服務(wù)于一個(gè)以上客戶端的多承租人網(wǎng)絡(luò)。網(wǎng)絡(luò)可以包括變化數(shù)目的物理機(jī)/虛擬機(jī),物理機(jī)/虛擬機(jī)的配置在部署之后也變化。一般而言,只要未超過聯(lián)網(wǎng)極限(例如,負(fù)載平衡器和網(wǎng)絡(luò)交換機(jī)),網(wǎng)絡(luò)就可以繼續(xù)增長(zhǎng)。例如,網(wǎng)絡(luò)可以從十個(gè)服務(wù)器開始,并且之后擴(kuò)張為一百個(gè)或更多個(gè)服務(wù)器??梢韵蚓W(wǎng)絡(luò)內(nèi)的物理機(jī)器分配類或類型。例如,所述機(jī)器中的某些機(jī)器可以是計(jì)算機(jī)器(用于web前端和應(yīng)用服務(wù)器),而其他機(jī)器可以是與計(jì)算機(jī)器相比配備有更多存儲(chǔ)的存儲(chǔ)機(jī)器。根據(jù)一實(shí)施例,云管理器105用多個(gè)版本的鏡像文件來配置網(wǎng)絡(luò)內(nèi)的機(jī)器。根據(jù)一實(shí)施例,場(chǎng)常常具有相同版本的鏡像文件。根據(jù)一個(gè)實(shí)施例,在網(wǎng)絡(luò)內(nèi)由云管理器系統(tǒng)100通過虛擬化機(jī)器并且管理該網(wǎng)絡(luò)內(nèi)部獨(dú)立地行動(dòng)的“場(chǎng)”來管理軟件限制。每個(gè)網(wǎng)絡(luò)可以包括一個(gè)或多個(gè)場(chǎng)(例如,參見網(wǎng)絡(luò)1)。根據(jù)一個(gè)實(shí)施例,網(wǎng)絡(luò)被認(rèn)為是經(jīng)網(wǎng)絡(luò)負(fù)載平衡的機(jī)器的單個(gè)群集,所述機(jī)器向外部世界展示一個(gè)或多個(gè)VIP(虛擬IP)并且可以將通信路由到網(wǎng)絡(luò)內(nèi)的任何機(jī)器。網(wǎng)絡(luò)中的機(jī)器通常是緊耦合的,并且具有最小等待時(shí)間(即< Ims的查驗(yàn)(ping)等待時(shí)間)。場(chǎng)是用于對(duì)需要緊密綁定關(guān)系的應(yīng)用進(jìn)行協(xié)調(diào)的機(jī)器的基本分組。例如,內(nèi)容場(chǎng)可以部署在每個(gè)網(wǎng)絡(luò)內(nèi)以用于諸如Microsoft SharePoint 的內(nèi)容管理應(yīng)用。一般而言,每一個(gè)場(chǎng)中的那組機(jī)器一起提供web服務(wù)和應(yīng)用服務(wù)器功能。通常,場(chǎng)內(nèi)的機(jī)器運(yùn)行相同構(gòu)建(build)的應(yīng)用(即a^rePoint)并且共享公共配置數(shù)據(jù)庫以服務(wù)特定的承租人和站點(diǎn)集合。場(chǎng)可以包含異構(gòu)的虛擬機(jī)組。云管理器105在數(shù)據(jù)存儲(chǔ)140內(nèi)維護(hù)“場(chǎng)目標(biāo)”, 該場(chǎng)目標(biāo)是每個(gè)場(chǎng)的每種角色的機(jī)器的目標(biāo)數(shù)目。一些角色包括內(nèi)容前端(Content Front End)、內(nèi)容中央管理員(Content Central Admin)、內(nèi)容計(jì)時(shí)器服務(wù)(Content Timer Service)、聯(lián)合中央管理員(Federated Central Admin)、聯(lián)合應(yīng)用服務(wù)器(Federated App Server)等。例如,內(nèi)容場(chǎng)是處理傳入的消費(fèi)者請(qǐng)求的基本SiarePoint場(chǎng)。聯(lián)合服務(wù)場(chǎng)包含可以跨場(chǎng)操作的諸如搜索和簡(jiǎn)檔存儲(chǔ)這樣的SiarePoint服務(wù)。場(chǎng)可以用于主存大容量公共因特網(wǎng)站點(diǎn)。某些場(chǎng)可以包含一組活動(dòng)目錄服務(wù)器和供應(yīng)端口監(jiān)控程序(Provisioning Daemon)。云管理器105自動(dòng)地部署網(wǎng)絡(luò)中的虛擬機(jī)和/或停用網(wǎng)絡(luò)中的虛擬機(jī),以幫助滿足所定義的目標(biāo)。這些場(chǎng)目標(biāo)可以自動(dòng)地和/或手動(dòng)地來配置。例如,場(chǎng)目標(biāo)可以響應(yīng)于活動(dòng)和容量需求的改變而改變。網(wǎng)絡(luò)場(chǎng)——每個(gè)網(wǎng)絡(luò)存在一個(gè)包含可以作為整個(gè)網(wǎng)絡(luò)的資源容易地橫向擴(kuò)展的所有VM角色的網(wǎng)絡(luò)場(chǎng)。云管理器web服務(wù)API 150被設(shè)計(jì)為在可大規(guī)模伸縮的全局服務(wù)的上下文中工作。該API假定任何網(wǎng)絡(luò)請(qǐng)求可能失敗和/或在傳送中掛起。對(duì)云管理器105的調(diào)用被配置為是冪等的。換言之,可以對(duì)云管理器105進(jìn)行多次相同的調(diào)用(只要參數(shù)是相同的)而不改變結(jié)果。云管理器105被設(shè)計(jì)成在向任何給定的請(qǐng)求返回響應(yīng)之前進(jìn)行非常少的處理 (< 10ms, < 50ms)。云管理器105維護(hù)記錄以跟蹤當(dāng)前請(qǐng)求。例如,云管理器105更新本地?cái)?shù)據(jù)庫中的記錄,并且若需要?jiǎng)t稍后調(diào)度“作業(yè)”以執(zhí)行更長(zhǎng)的活動(dòng)。云管理器跟蹤作為用于在網(wǎng)絡(luò)內(nèi)部署新機(jī)器的模板的鏡像(諸如,虛擬盤鏡像)。 鏡像引用可以存儲(chǔ)在諸如數(shù)據(jù)庫140的數(shù)據(jù)庫中和/或某個(gè)其他位置。鏡像可以存儲(chǔ)在對(duì)其上將部署鏡像的網(wǎng)絡(luò)而言是本地的一個(gè)或多個(gè)共享的數(shù)據(jù)存儲(chǔ)中。根據(jù)一個(gè)實(shí)施例,每個(gè)鏡像都包括虛擬機(jī)(VM)角色類型,其指定鏡像可以部署的VM的類型;該鏡像應(yīng)當(dāng)使用的處理器的數(shù)目;將分配給該鏡像的RAM的量;用于找出附近安裝點(diǎn)的網(wǎng)絡(luò)ID(使得它們不會(huì)通過跨數(shù)據(jù)中心鏈接被反復(fù)地復(fù)制);以及部署代碼可以用于訪問VHD的共享路徑。一般而言,由云系統(tǒng)100所管理的網(wǎng)絡(luò)中的機(jī)器不是以傳統(tǒng)方式通過下載數(shù)據(jù)并且將該數(shù)據(jù)合并到機(jī)器上的現(xiàn)有軟件中來升級(jí)的。相反,機(jī)器是通過用更新后的VHD替換 VHD來更新的。例如,當(dāng)場(chǎng)需要新版本的軟件時(shí),部署安裝了該新版本的新場(chǎng)。當(dāng)部署新場(chǎng)時(shí),將承租人從舊場(chǎng)移動(dòng)到該新場(chǎng)。以此方式,由于升級(jí)造成的停機(jī)時(shí)間被最小化,并且場(chǎng)中的每個(gè)機(jī)器具有已被測(cè)試的相同版本。當(dāng)虛擬機(jī)需要升級(jí)時(shí),機(jī)器上的VM可以被刪除并且用被配置為運(yùn)行所需服務(wù)的VM代替。盡管對(duì)現(xiàn)有軟件的升級(jí)不是最優(yōu)的,但是網(wǎng)絡(luò)內(nèi)的某些服務(wù)器使用原地升級(jí)的傳統(tǒng)更新過程。例如,活動(dòng)目錄域控制器是通過更新服務(wù)器上的當(dāng)前軟件而不完全替換機(jī)器上的鏡像來升級(jí)的。在一些實(shí)例中,云管理器也可以原地升級(jí)。圖2示出了包括管理器和相關(guān)聯(lián)的數(shù)據(jù)庫的云管理器。如所示的,云管理器200 包括工作管理器210、工作數(shù)據(jù)庫215、機(jī)器管理器220、機(jī)器數(shù)據(jù)庫225、承租人管理器230、 承租人數(shù)據(jù)庫235、私密數(shù)據(jù)庫M5、以及web服務(wù)API 2400一般而言,將在云管理系統(tǒng)(例如系統(tǒng)100)內(nèi)使用的數(shù)據(jù)庫的大小調(diào)整為實(shí)現(xiàn)高性能。例如,數(shù)據(jù)庫(諸如,工作數(shù)據(jù)庫215、機(jī)器數(shù)據(jù)庫225、承租人數(shù)據(jù)庫235和私密數(shù)據(jù)庫對(duì)幻不能超過預(yù)定義的大小限制(例如30GB、50GB、100GB等)。根據(jù)一實(shí)施例,調(diào)整數(shù)據(jù)庫的大小以使得其小得足以放入物理機(jī)器的存儲(chǔ)器中。這有助于高讀取I/O性能。還可以基于對(duì)于一應(yīng)用程序(諸如,與SQL服務(wù)器交互時(shí))的性能來選擇數(shù)據(jù)庫的大小。還可以調(diào)整在場(chǎng)中使用的數(shù)據(jù)庫的大小以實(shí)現(xiàn)高性能。例如,它們的大小可以被調(diào)整為能放入主機(jī)的存儲(chǔ)器中和/或被調(diào)整大小以使得備份操作、移動(dòng)操作、復(fù)制操作、還原操作一般在預(yù)定的時(shí)間段內(nèi)執(zhí)行。云管理器200將云管理器數(shù)據(jù)劃分成四個(gè)數(shù)據(jù)庫。工作數(shù)據(jù)庫215用于工作管理器。機(jī)器數(shù)據(jù)庫225用于機(jī)器管理器220。承租人數(shù)據(jù)庫235用于承租人管理器230,并且私密數(shù)據(jù)庫245用于存儲(chǔ)敏感信息,諸如系統(tǒng)賬戶和口令信息、憑證、證書等。數(shù)據(jù)庫可以位于相同的服務(wù)器上,或者跨服務(wù)器分割。根據(jù)一實(shí)施例,每個(gè)數(shù)據(jù)庫被鏡像以獲得高可用性,并且每個(gè)數(shù)據(jù)庫是SQL數(shù)據(jù)庫。云管理器200被配置為使用縮減的SQL特征組與數(shù)據(jù)庫交互以便有助于在數(shù)據(jù)庫升級(jí)期間提供云管理器200的可用性。例如,嘗試避免外鍵或存儲(chǔ)過程。外鍵可能使模式變化變得困難并且導(dǎo)致意料之外的失敗情況。存儲(chǔ)過程將應(yīng)用中的更多個(gè)放置在數(shù)據(jù)庫本身中。
嘗試最小化與SQL服務(wù)器的通信,因?yàn)榕c底層操作的成本相比,往返可能是昂貴的。例如,如果當(dāng)前SQL服務(wù)器到單個(gè)數(shù)據(jù)庫的全部交互被包裝在單個(gè)往返中,則效率常常是高得多的。極少在數(shù)據(jù)庫015,225,235)內(nèi)使用限制條件。一般而言,限制條件在其有助于在沒有額外查詢的情況下提供具有正確類型的錯(cuò)誤處理的簡(jiǎn)單更新時(shí)是有益的。例如,完全合格的域名(FQDN)表具有對(duì)“名稱”施加的限制條件,以幫助防止承租人意外地嘗試主張與已經(jīng)被分配給不同承租人的FQDN相同的FQDN。當(dāng)添加索引時(shí)使用警告。索引通常以寫入操作的額外I/O為代價(jià)來改善讀取性能。由于數(shù)據(jù)庫內(nèi)的數(shù)據(jù)主要是駐留在RAM上的,因此即使全表掃描仍然是相對(duì)快的。根據(jù)一實(shí)施例,一旦查詢模式已經(jīng)穩(wěn)定就可以添加索引,并且可以根據(jù)所提出的索引來確定性能改善。根據(jù)一實(shí)施例,如果添加索引將可能花費(fèi)長(zhǎng)時(shí)間,則可以指定“ONLINE = ON(在線=開啟)”選項(xiàng),以使得在最初構(gòu)該建索引時(shí)表不被鎖定。根據(jù)一實(shí)施例,可以執(zhí)行對(duì)云管理器內(nèi)數(shù)據(jù)庫的升級(jí)而不導(dǎo)致云管理器系統(tǒng)停機(jī)。換言之,即使在云管理器升級(jí)期間,云管理器繼續(xù)處理已接收的請(qǐng)求。由此,對(duì)模式作出的改變應(yīng)與之前的模式兼容。在升級(jí)云管理器所使用的web服務(wù)器之前進(jìn)行SQL模式升級(jí)。當(dāng)web服務(wù)器升級(jí)時(shí),它們可以開始使用數(shù)據(jù)庫中所啟用的新特性。數(shù)據(jù)庫升級(jí)被限制以使得升級(jí)中所涉及的操作是快速和有效的。例如,可以添加表,并且可以向現(xiàn)有列添加新的可為空的列??梢栽诒淼慕Y(jié)尾處添加新的列。一般而言,避免對(duì)數(shù)據(jù)庫的耗時(shí)操作。 例如,在存在大量數(shù)據(jù)時(shí),在創(chuàng)建時(shí)間向新添加的列添加缺省值可能是非常耗時(shí)的操作。然而,添加可為空的列是非??焖俚牟僮鳌H缟厦嫠懻摰?,允許添加新的索引,但是在添加新的限制條件時(shí)應(yīng)當(dāng)采取警告,以幫助保證模式升級(jí)不會(huì)破除現(xiàn)有數(shù)據(jù)。例如,當(dāng)添加限制條件時(shí),該限制條件可以被設(shè)置為如下狀態(tài)該限制條件不被檢查并且避免對(duì)現(xiàn)有行和潛在的錯(cuò)誤進(jìn)行高成本的驗(yàn)證。舊表和未使用的列在新版本被使用并且云管理器不訪問這些表和列以后被移除。一般而言,每個(gè)數(shù)據(jù)庫中的單個(gè)行用于指示任務(wù)和/或所需狀態(tài)。例如,承租人數(shù)據(jù)庫235為每個(gè)承租人包括單個(gè)行。給定的承租人可以包括所需版本(Required Version) 記錄。該記錄用于幫助確保該承租人被放置在運(yùn)行所需版本的場(chǎng)上。例如,對(duì)于要停留在 SharePoint 14 SPl上的承租人1而言,該承租人的所需版本可以被設(shè)置為“ 14. 1”,并且包括14. 1的任何版本都將匹配并且任何其他版本(例如14. 2. xxxx)都將不匹配。承租人記錄可以包括其他項(xiàng)目,諸如已授權(quán)的用戶數(shù)目、限額(例如所允許的總數(shù)據(jù)使用率、每用戶的數(shù)據(jù)使用率等)、時(shí)間限制等。某個(gè)組織可能具有代表不同地理位置、組織或容量的多個(gè)承租人。根據(jù)一實(shí)施例,將承租人彼此隔開而沒有(經(jīng)由外聯(lián)網(wǎng)或其他特性)對(duì)用戶的明確邀請(qǐng)。根據(jù)一個(gè)實(shí)施例,每個(gè)承租人都被鎖定到一專用網(wǎng)絡(luò)中。承租人被保持為相對(duì)于一小組數(shù)據(jù)庫而言是本地化的。承租人或者是小的(小于將填充一個(gè)數(shù)據(jù)庫的程度),在這種情況下,該承租人處于與其他承租人共享的恰好一個(gè)數(shù)據(jù)庫中。這意味著共享該數(shù)據(jù)庫的所有承租人需要同時(shí)升級(jí)。當(dāng)承租人變大時(shí),其可被移動(dòng)到其自己的專用數(shù)據(jù)庫,并且現(xiàn)在可以具有一個(gè)以上、但是不與其他承租人共享的數(shù)據(jù)庫。在一個(gè)或多個(gè)專用數(shù)據(jù)庫中維護(hù)大承租人有助于減少需要在單次升級(jí)中同時(shí)升級(jí)的數(shù)據(jù)庫的數(shù)目。
類似地,工作數(shù)據(jù)庫215對(duì)于每個(gè)作業(yè)包括單個(gè)行。機(jī)器數(shù)據(jù)庫225可包括關(guān)于每個(gè)物理機(jī)器、VM、場(chǎng)等的行。例如,機(jī)器管理器數(shù)據(jù)庫225可以包括版本串。根據(jù)一實(shí)施例,網(wǎng)絡(luò)內(nèi)的每個(gè)VHD、場(chǎng)和VM具有相關(guān)聯(lián)的版本串。根據(jù)一個(gè)實(shí)施例,云管理器包括簡(jiǎn)單日志系統(tǒng),該簡(jiǎn)單日志系統(tǒng)可以被配置為為每個(gè)web服務(wù)調(diào)用記錄日志條目??梢詫?shí)現(xiàn)包括如所期望的那樣少和/或多的特性的日志系統(tǒng)。一般而言,日志系統(tǒng)被用于度量使用和性能剖析。根據(jù)一實(shí)施例,web服務(wù)API 240是使用具有ASP. net的SOAP構(gòu)建的。API中的各種web方法遵循兩種主要模式——獲取和更新。一般而言,更新方法將數(shù)據(jù)結(jié)構(gòu)作為輸入,并且返回相同的結(jié)構(gòu)作為輸出。輸出結(jié)構(gòu)返回?cái)?shù)據(jù)庫中底層對(duì)象的當(dāng)前狀態(tài),其中如果驗(yàn)證或其他業(yè)務(wù)邏輯改變了某些屬性或者以其他方式填充了附加的屬性(例如記錄ID或由云管理器計(jì)算出的其他值),則該底層對(duì)象可能不同于輸入對(duì)象。更新方法用于初始對(duì)象創(chuàng)建以及后續(xù)的更新。換言之,對(duì)web服務(wù)API 240的調(diào)用者可以簡(jiǎn)單地請(qǐng)求它們想要的配置并且它們不需要跟蹤對(duì)象是否已經(jīng)存在。另外,這意味著更新是冪等的,因?yàn)橄嗤母抡{(diào)用可以進(jìn)行兩次,其中效果相同使其僅僅發(fā)生一次。根據(jù)一實(shí)施例,更新方法可以包括 LastUpdated(最近更新)屬性。當(dāng)存在LastUpdated屬性時(shí),若LastUpdated的值與當(dāng)前存儲(chǔ)在數(shù)據(jù)庫中的值不匹配,則云管理器200拒絕更新。某些更新方法包括在對(duì)方法的第一次調(diào)用時(shí)被設(shè)置的并且在對(duì)方法的其他調(diào)用時(shí)未被設(shè)置的屬性。云管理器200被配置為避免使用回調(diào)(callback)。由于回調(diào)可能是不可靠的,因此與云管理器200交互的客戶端可以在他們想要檢查更新的狀態(tài)時(shí)使用web服務(wù)API來檢查對(duì)象狀態(tài)。根據(jù)實(shí)施例,對(duì)更新方法的調(diào)用導(dǎo)致云管理器200將底層對(duì)象的狀態(tài)設(shè)置為 “供應(yīng)中(Provisioning)”,并且當(dāng)更新完成時(shí),狀態(tài)被設(shè)置為“活動(dòng)(Active)”。圖3示出了存儲(chǔ)在數(shù)據(jù)庫的行內(nèi)的示例性作業(yè)記錄。如所示的,記錄300包括作業(yè)標(biāo)識(shí)符302、類型304、數(shù)據(jù)306、所有者308、步驟310、上一次運(yùn)行312、期滿時(shí)間314、下次時(shí)間316、狀態(tài)318以及狀況320。一般而言,針對(duì)所請(qǐng)求執(zhí)行的每個(gè)任務(wù),云管理器在數(shù)據(jù)庫350 (例如,圖2中的工作數(shù)據(jù)庫215)中創(chuàng)建記錄。作業(yè)標(biāo)識(shí)符302用于為所請(qǐng)求的任務(wù)指定唯一標(biāo)識(shí)符。類型304指定要執(zhí)行的任務(wù)。例如,類型可以包括將要執(zhí)行的腳本的名稱。例如,當(dāng)任務(wù)是要運(yùn)行名稱為“D印loyVM. psl"的腳本時(shí),數(shù)據(jù)306則可以包括標(biāo)識(shí)符(例如 "-VMID 123”)。這允許將新任務(wù)類型添加到系統(tǒng),而不需要對(duì)該系統(tǒng)的已編譯或其他二進(jìn)制部分進(jìn)行任何改變。數(shù)據(jù)306用于存儲(chǔ)與任務(wù)相關(guān)聯(lián)的數(shù)據(jù)。例如,數(shù)據(jù)可以對(duì)其上將執(zhí)行該任務(wù)的承租人、機(jī)器、網(wǎng)絡(luò)、VM等等設(shè)置。數(shù)據(jù)306還可以存儲(chǔ)數(shù)據(jù)庫中的值所被設(shè)置成的一個(gè)或多個(gè)值。執(zhí)行任務(wù)的過程可以注意作業(yè)記錄以查看所需機(jī)器數(shù)目被設(shè)置為何值。腳本使用數(shù)據(jù)庫中的值來執(zhí)行操作。所有者308指定過程/執(zhí)行該過程的機(jī)器。例如,當(dāng)云管理器機(jī)器開始執(zhí)行作業(yè)時(shí),該機(jī)器使用機(jī)器的ID來更新記錄的所有者308部分。步驟310提供對(duì)當(dāng)前腳本的步驟的指示。例如,腳本可以將任務(wù)劃分成任何數(shù)目的步驟。當(dāng)該進(jìn)程完成該腳本的步驟時(shí),步驟310被更新。進(jìn)程還可以查看步驟310以確定在腳本中要執(zhí)行什么步驟并且避免必須重新執(zhí)行之前已完成的步驟。上一次運(yùn)行312提供上一次啟動(dòng)腳本的時(shí)間。每次啟動(dòng)腳本時(shí),更新上一次運(yùn)行時(shí)間。期滿時(shí)間314是指示該進(jìn)程應(yīng)當(dāng)何時(shí)終止的時(shí)間。根據(jù)實(shí)施例,期滿時(shí)間是在進(jìn)程被啟動(dòng)之后的預(yù)定的時(shí)間量(例如5分鐘、10分鐘...)。期滿時(shí)間可以通過經(jīng)由web服務(wù)API的請(qǐng)求進(jìn)程來更新。下次時(shí)間316是指示任務(wù)下次應(yīng)當(dāng)何時(shí)執(zhí)行的時(shí)間。例如,進(jìn)程可以在完成某步驟之后停止,并且被指示等待直到所指定的下次時(shí)間316以恢復(fù)處理。狀態(tài)318指示當(dāng)前狀態(tài),并且狀況320指示作業(yè)的狀況(例如,已創(chuàng)建、已掛起、已恢復(fù)、執(zhí)行中、已刪除)。如果數(shù)據(jù)庫中的重復(fù)行具有相同的任務(wù)類型和數(shù)據(jù)值,則它們可以在執(zhí)行之前被移除。例如,可以進(jìn)行多個(gè)請(qǐng)求以執(zhí)行存儲(chǔ)在數(shù)據(jù)庫的多個(gè)行中的相同的任務(wù)。作業(yè)可以具有與其相關(guān)聯(lián)的一個(gè)或多個(gè)鎖355。如果鎖不可用,則作業(yè)將不被調(diào)度運(yùn)行,直到鎖可用。這些鎖可以以許多不同的方式來配置。例如,鎖可以基于互斥、信號(hào)量等。一般而言,互斥防止代碼被一個(gè)以上線程同時(shí)執(zhí)行,并且信號(hào)量將共享資源的同時(shí)使用的數(shù)目限制在最大數(shù)目。根據(jù)實(shí)施例,鎖是表示資源的字符串。該資源可以是任何類型的資源。例如,鎖可以是場(chǎng)、機(jī)器、承租人等。一般而言,鎖被用于延遲一個(gè)或多個(gè)任務(wù)的執(zhí)行。每個(gè)作業(yè)可以指定其在運(yùn)行以前需要的一個(gè)或多個(gè)鎖。作業(yè)可以在其操作期間的任何時(shí)間釋放鎖。當(dāng)存在鎖時(shí),作業(yè)不被調(diào)度。需要一個(gè)以上鎖的作業(yè)一次請(qǐng)求所需的全部鎖。 例如,已經(jīng)持有鎖的作業(yè)不可以請(qǐng)求附加的鎖。這樣的模式有助于防止由多個(gè)作業(yè)間的循環(huán)鎖依賴性造成的可能的死鎖情況。圖4示出了用于網(wǎng)絡(luò)的示例系統(tǒng)400,該網(wǎng)絡(luò)包括用于在線服務(wù)的前端和后端服務(wù)器。示例系統(tǒng)400包括客戶端402和404、網(wǎng)絡(luò)406、負(fù)載平衡器408、WFE服務(wù)器410、412、 414以及后端服務(wù)器416-419??墒褂酶嗷蚋俚目蛻舳恕FE、后端服務(wù)器、負(fù)載平衡器和網(wǎng)絡(luò)。另外,由系統(tǒng)400中的組件所提供的功能中的某些可以由其他組件來執(zhí)行。例如, 某些負(fù)載平衡可以在WFE中執(zhí)行。在示例實(shí)施例中,客戶端402和404是諸如臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、終端計(jì)算機(jī)、個(gè)人數(shù)字助理或蜂窩電話設(shè)備的計(jì)算設(shè)備??蛻舳?02和404可包括輸入/輸出設(shè)備、 中央處理單元(“CPU”)、數(shù)據(jù)存儲(chǔ)設(shè)備和網(wǎng)絡(luò)設(shè)備。在本申請(qǐng)中,術(shù)語客戶端和客戶端計(jì)算機(jī)互換地使用。WFE 410,412和414可由客戶端402和404經(jīng)由負(fù)載平衡器408通過網(wǎng)絡(luò)406訪問。如所討論的,服務(wù)器可以在場(chǎng)中配置。后端服務(wù)器416對(duì)WFE 410、412和414是可訪問的。負(fù)載平衡器408是專用網(wǎng)絡(luò)設(shè)備和/或一個(gè)或多個(gè)服務(wù)器計(jì)算機(jī)。負(fù)載平衡器408、420、 WFE 410,412和414以及后端服務(wù)器416可包括輸入/輸出設(shè)備、中央處理單元(“CPU”)、 數(shù)據(jù)存儲(chǔ)設(shè)備和網(wǎng)絡(luò)設(shè)備。在示例實(shí)施例中,網(wǎng)絡(luò)406是因特網(wǎng),并且客戶端402和404可以遠(yuǎn)程地訪問WFE 410,412和414以及連接到WFE 410,412和414的資源。在示例實(shí)施例中,系統(tǒng)400是在線的、基于瀏覽器的文檔協(xié)作系統(tǒng)。在線的、 基于瀏覽器的文檔協(xié)作系統(tǒng)的一個(gè)示例是來自美國(guó)華盛頓州雷蒙德市的微軟公司的 Microsoft Sharepoint 。在系統(tǒng)400中,后端服務(wù)器416-419中的一個(gè)或多個(gè)是SQL服務(wù)器,例如,來自美國(guó)華盛頓州雷蒙德市的微軟公司的SQL服務(wù)器。WFE 410、412和414提供客戶端402和404與后端服務(wù)器416-419之間的接口。 負(fù)載平衡器408、420將請(qǐng)求從自客戶端402和404引導(dǎo)到WFE 410,412和414,以及從WFF 引導(dǎo)到后端服務(wù)器416-419。負(fù)載平衡器408使用諸如WFE利用率、到WFE的連接數(shù)目和總體WFE性能之類的因素來確定哪個(gè)WFE服務(wù)器接收客戶端請(qǐng)求。類似地,負(fù)載平衡器420 使用諸如后端服務(wù)器利用率、到服務(wù)器的連接數(shù)目和總體性能的因素來確定哪個(gè)后端服務(wù)器接收請(qǐng)求??蛻舳苏?qǐng)求的示例可以是訪問存儲(chǔ)在后端服務(wù)器之一上的文檔,編輯存儲(chǔ)在后端服務(wù)器(例如416-419)上的文檔,或者將文檔存儲(chǔ)在后端服務(wù)器上。當(dāng)負(fù)載平衡器408通過網(wǎng)絡(luò)406接收客戶端請(qǐng)求時(shí),負(fù)載平衡器408確定WFE服務(wù)器410、412和414中的哪個(gè)接收該客戶端請(qǐng)求。類似地,負(fù)載平衡器420確定后端服務(wù)器416-419中的哪一個(gè)從WFE 服務(wù)器接收請(qǐng)求。后端服務(wù)器可以被配置為存儲(chǔ)一個(gè)或多個(gè)承租人(即顧客)的數(shù)據(jù)。現(xiàn)在參考圖5,將描述在各實(shí)施例中利用的計(jì)算機(jī)500的說明性計(jì)算機(jī)體系結(jié)構(gòu)。 圖5所示的計(jì)算機(jī)體系結(jié)構(gòu)可被配置為服務(wù)器、臺(tái)式或移動(dòng)計(jì)算機(jī),并且包括中央處理單元5( “CPU”)、包括隨機(jī)存取存儲(chǔ)器9 ( “RAM”)和只讀存儲(chǔ)器(“ROM”)10的系統(tǒng)存儲(chǔ)器 7、以及將存儲(chǔ)器耦合至中央處理單元(“CPU”)5的系統(tǒng)總線12?;据斎?輸出系統(tǒng)存儲(chǔ)在ROM 10中,所述基本輸入/輸出系統(tǒng)包含幫助在諸如啟動(dòng)期間在計(jì)算機(jī)內(nèi)元件之間傳遞信息的基本例程。計(jì)算機(jī)500還包括大容量存儲(chǔ)設(shè)備 14,用于存儲(chǔ)操作系統(tǒng)16、應(yīng)用程序10、數(shù)據(jù)存儲(chǔ)24、文件、以及與云系統(tǒng)100的執(zhí)行和同云系統(tǒng)100的交互相關(guān)的云程序26。大容量存儲(chǔ)設(shè)備14通過連接至總線12的大容量存儲(chǔ)控制器(未示出)連接到 CPU 5。大容量存儲(chǔ)設(shè)備14及其相關(guān)聯(lián)的計(jì)算機(jī)可讀介質(zhì)為計(jì)算機(jī)500提供非易失性存儲(chǔ)。雖然此處包含的計(jì)算機(jī)可讀介質(zhì)的描述針對(duì)諸如硬盤或CD-ROM驅(qū)動(dòng)器等大容量存儲(chǔ)設(shè)備,但是計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)100可以訪問的任何可用介質(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、可擦除可編程只讀存儲(chǔ)器(“EPR0M”)、電可擦可編程只讀存儲(chǔ)器 (“EEPR0M”)、閃存或其它固態(tài)存儲(chǔ)器技術(shù)、⑶-ROM、數(shù)字多功能盤(“DVD”)或其它光存儲(chǔ)、 磁帶盒、磁帶、磁盤存儲(chǔ)或其它磁性存儲(chǔ)設(shè)備、或能用于存儲(chǔ)所需信息且可以由計(jì)算機(jī)500 訪問的任何其它介質(zhì)。根據(jù)各實(shí)施例,計(jì)算機(jī)500可以使用通過諸如因特網(wǎng)的網(wǎng)絡(luò)18至遠(yuǎn)程計(jì)算機(jī)的邏輯連接在聯(lián)網(wǎng)環(huán)境中操作。計(jì)算機(jī)500可以通過連接至總線12的網(wǎng)絡(luò)接口單元20來連接到網(wǎng)絡(luò)18。網(wǎng)絡(luò)連接可以是無線的和/或有線的。網(wǎng)絡(luò)接口單元20也可用于連接到其它類型的網(wǎng)絡(luò)和遠(yuǎn)程計(jì)算機(jī)系統(tǒng)。計(jì)算機(jī)500還可以包括用于接收和處理來自多個(gè)其他設(shè)備的輸入的輸入/輸出控制器22,這些設(shè)備包括鍵盤、鼠標(biāo)或者電子指示筆(圖5中未示出)。 類似地,輸入/輸出控制器22可以向顯示屏洲、打印機(jī)或其它類型的輸出設(shè)備提供輸出。如上面簡(jiǎn)要提到的,多個(gè)程序模塊和數(shù)據(jù)文件可以存儲(chǔ)在計(jì)算機(jī)500的大容量存儲(chǔ)設(shè)備14和RAM 9內(nèi),包括適于控制聯(lián)網(wǎng)計(jì)算機(jī)的操作的操作系統(tǒng)16,比如華盛頓州雷蒙德市的微軟公司的WINDOWS 操作系統(tǒng)。大容量存儲(chǔ)設(shè)備14和RAM 9還可以存儲(chǔ)一個(gè)或多個(gè)程序模塊。具體而言,大容量存儲(chǔ)設(shè)備14和RAM 9可以存儲(chǔ)諸如云程序沈的執(zhí)行與云系統(tǒng)相關(guān)的任務(wù)的一個(gè)或多個(gè)應(yīng)用程序?,F(xiàn)在參考圖6-7,將描述用在線服務(wù)升級(jí)數(shù)據(jù)庫的過程。當(dāng)閱讀對(duì)在此提供的例程的討論時(shí),應(yīng)當(dāng)理解,各實(shí)施例的邏輯操作被實(shí)現(xiàn)為(1) 運(yùn)行于計(jì)算系統(tǒng)上的一系列計(jì)算機(jī)實(shí)現(xiàn)的動(dòng)作或程序模塊,和/或(2)計(jì)算系統(tǒng)內(nèi)互連的機(jī)器邏輯電路或電路模塊。該實(shí)現(xiàn)是取決于實(shí)現(xiàn)本發(fā)明的計(jì)算系統(tǒng)的性能要求來選擇的。 因此,所例示的并且構(gòu)成此處所描述的實(shí)施例的邏輯操作被不同地表示為操作、結(jié)構(gòu)設(shè)備、 動(dòng)作或模塊。這些操作、結(jié)構(gòu)設(shè)備、動(dòng)作和模塊可用軟件、固件、專用數(shù)字邏輯以及它們的任何組合來實(shí)現(xiàn)?,F(xiàn)在參考圖6,在開始操作后,過程600流向操作610,在操作610中升級(jí)數(shù)據(jù)庫的請(qǐng)求被接收??梢酝ㄟ^許多不同源接收該請(qǐng)求。例如,可以通過API(諸如Web服務(wù)API)、 命令行接口、圖形用戶接口等等接收請(qǐng)求。移至操作620,與該數(shù)據(jù)庫相關(guān)聯(lián)的模式被升級(jí)。根據(jù)一實(shí)施例,對(duì)模式的升級(jí)是與云系統(tǒng)當(dāng)前正在使用的模式兼容的。一般而言,對(duì)模式的升級(jí)應(yīng)當(dāng)試圖避免要及時(shí)處理的操作。例如,對(duì)數(shù)據(jù)庫的寫入操作經(jīng)常是非常耗時(shí)的,而讀取操作一般執(zhí)行得快的多。根據(jù)一實(shí)施例,可以執(zhí)行對(duì)云管理器內(nèi)數(shù)據(jù)庫的升級(jí)而不導(dǎo)致云管理系統(tǒng)停工。 換言之,即便在云管理器使用的數(shù)據(jù)庫的升級(jí)期間,云管理器也繼續(xù)接收請(qǐng)求并對(duì)正被升級(jí)的數(shù)據(jù)庫執(zhí)行讀寫操作。一般而言,來自云管理器的SQL查詢被如此寫入以使得模式的改變不會(huì)影響它們。云管理器系統(tǒng)(例如系統(tǒng)100)被配置成使用縮減的SQL特征組與云管理器數(shù)據(jù)庫交互以便有助于在數(shù)據(jù)庫升級(jí)期間提供云管理器的可用性。例如,嘗試避免外鍵或存儲(chǔ)過程。外鍵可能使模式變化變得困難并且導(dǎo)致意料之外的失敗情況。存儲(chǔ)過程將應(yīng)用中的更多個(gè)放置在數(shù)據(jù)庫本身中。如上面討論的,極少在所述數(shù)據(jù)庫內(nèi)使用限制條件。移至操作620,用于該數(shù)據(jù)庫的模式被升級(jí)。SQL模式升級(jí)在云管理器使用的web 服務(wù)器上的web前端(WFE)被升級(jí)之前執(zhí)行。一般而言,當(dāng)對(duì)模式應(yīng)用升級(jí)時(shí),數(shù)據(jù)庫中的底層數(shù)據(jù)應(yīng)當(dāng)保持不被影響,以使不具有支持升級(jí)后的模式的新功能的WFE繼續(xù)正常運(yùn)轉(zhuǎn)。對(duì)數(shù)據(jù)庫模式的升級(jí)可包括增加一個(gè)或多個(gè)列、表、索引等等。一般而言,數(shù)據(jù)庫升級(jí)被如此限制以使得在升級(jí)期間與該數(shù)據(jù)庫交互的操作是快速而高效的。例如,可以添加新表,并且可以向現(xiàn)有表在末尾添加新的可為空的列。避免對(duì)數(shù)據(jù)庫的耗時(shí)操作。例如, 在存在大量數(shù)據(jù)時(shí),在創(chuàng)建列時(shí)添加需要值的輸入的新列可能是非常耗時(shí)的操作。許多表可具有很大數(shù)目的行。例如,向SiarePoint承租人表添加新列可具有數(shù)百萬行。必須用值來填充該列中的那些行中的每一行可能導(dǎo)致對(duì)數(shù)據(jù)庫的重大性能打擊,因?yàn)閿?shù)據(jù)庫寫入將必須命中(hit)每個(gè)頁來輸入值。然而向現(xiàn)有表添加可為空的列不需要觸及數(shù)據(jù)庫的每個(gè)頁。相反,添加不需要初始值的可為空的列是能被快速執(zhí)行的操作,不管表的大小如何都是這樣。當(dāng)模式包括新索引時(shí),它們應(yīng)當(dāng)被添加以使得索引是在添加之后在后臺(tái)計(jì)算的,并且直到該索引的后臺(tái)處理完成之后才使其可用。限制條件應(yīng)當(dāng)被添加而不經(jīng)檢驗(yàn)以使得在升級(jí)期間允許對(duì)數(shù)據(jù)庫的訪問。
移至操作630,被升級(jí)的數(shù)據(jù)繼續(xù)從WFE接收對(duì)數(shù)據(jù)庫操作的請(qǐng)求。升級(jí)過程期間云管理器系統(tǒng)的操作如同沒有執(zhí)行升級(jí)那樣行動(dòng)。決策框640處,對(duì)該模式升級(jí)是否完成作出判斷。當(dāng)該升級(jí)未完成時(shí),該升級(jí)過程繼續(xù)而該系統(tǒng)繼續(xù)接收和處理所接收的請(qǐng)求。當(dāng)該升級(jí)完成時(shí),該過程移至操作650,在操作650中包括用于與該數(shù)據(jù)庫交互的WFE的web服務(wù)器被升級(jí)以包括升級(jí)后的模式的新功能。WFE的升級(jí)可以使用不同方法來執(zhí)行。例如,新的WFE軟件可被安裝在同一 web服務(wù)器上和/或放置在不同的web服務(wù)器上。轉(zhuǎn)至操作660,傳入的請(qǐng)求被移動(dòng)至升級(jí)后的WFE。新的WFE的激活可以串行和/ 或并行地進(jìn)行。例如,可以在一個(gè)時(shí)間點(diǎn)上使WFE的一部分可用而在另一時(shí)間點(diǎn)上使另一部分可用。根據(jù)一實(shí)施例,使用允許參數(shù)被設(shè)定為將請(qǐng)求引導(dǎo)至升級(jí)后的軟件的ASP. net 功能。在轉(zhuǎn)換操作660之后,傳入到新的WFE的請(qǐng)求可能發(fā)現(xiàn)升級(jí)后的軟件有之前沒有發(fā)現(xiàn)的錯(cuò)誤。在此情形下,一種補(bǔ)救措施是降級(jí)到用升級(jí)后的模式操作的前一軟件版本。在一個(gè)實(shí)施例中,WFE被快速地原地降級(jí)到之前的軟件版本,同時(shí)針對(duì)升級(jí)后的模式操作。隨后該過程移至結(jié)束框并返回以處理其它動(dòng)作。圖7示出在模式升級(jí)已完成之后更新數(shù)據(jù)庫內(nèi)的數(shù)據(jù)。在啟動(dòng)操作之后,過程700流向操作710,在操作710中對(duì)數(shù)據(jù)庫的請(qǐng)求被接收。 一般而言,該請(qǐng)求來自web服務(wù)器上的各WFE之一,并且可以是與數(shù)據(jù)庫相關(guān)的任何類型的請(qǐng)求(例如,讀取、寫入、搜索等等……)。根據(jù)一實(shí)施例,讀取操作包括要從其讀取的明示的列。以此方式,即便在模式變化時(shí),數(shù)據(jù)內(nèi)的明示的列仍保持相同。移至決策操作740,對(duì)是否已從包括不具有指定值的可為空的列的數(shù)據(jù)庫讀取數(shù)據(jù)作出判斷。當(dāng)還沒有訪問可為空的列時(shí),該過程移至決策操作740。當(dāng)已訪問可為空的列時(shí),該過程流向操作730。在操作730,用于該可為空的列的值可被確定。例如,可選擇缺省值,或者可以從某個(gè)其他動(dòng)作確定用于該可為空的列的值(即,執(zhí)行計(jì)算、查找等)。以此方式,用于該可為空的列的值可隨著時(shí)間而被更新,而不是在它們被創(chuàng)建時(shí)在單個(gè)耗時(shí)操作中更新。當(dāng)列被訪問時(shí),它可被檢驗(yàn)以確定值是否為空,而且當(dāng)值為空時(shí),如果還不存在指定值則用缺省值取代該值。具體的代碼設(shè)計(jì)為檢驗(yàn)空(Null)以及可任選地若還不存在指定值則用缺省值取代。下面是示例性代碼片段
if(!Reader.IsDBNull(5)
{
this. State = Reader.GetString(5);
ι
else {
this. State == DefaultState. Active;
}
在用所確定的值寫入對(duì)象之后,空值消失了。移至決策操作740,對(duì)是否存在應(yīng)被清理的、任何未使用的表/列作出判斷。這一判斷可以在升級(jí)后的模式已運(yùn)行的預(yù)定時(shí)間段之后和/或通過某種其他輸入(例如,所接收的命令)進(jìn)行。根據(jù)一實(shí)施例,未使用的表和列在升級(jí)后的模式被使用并且云管理器不訪問這些表和列之后被移除。當(dāng)表或列不要被移除時(shí),該過程返回操作710。當(dāng)表或列要被移除時(shí),該過程移至操作750。在操作750,未使用的表和/或列被移除。隨后該過程移至結(jié)束框并返回以處理其它動(dòng)作。以上說明、示例和數(shù)據(jù)提供了對(duì)本發(fā)明的組成部分的制造和使用的全面描述。因?yàn)榭梢栽诓槐畴x本發(fā)明的精神和范圍的情況下做出本發(fā)明的許多實(shí)施例,所以本發(fā)明落在所附權(quán)利要求的范圍內(nèi)。
權(quán)利要求
1.一種用于升級(jí)仍然正在在線服務(wù)中訪問的數(shù)據(jù)庫的方法,包括啟動(dòng)在所述在線服務(wù)中使用的數(shù)據(jù)庫的升級(jí)過程,其中被升級(jí)的所述數(shù)據(jù)庫在整個(gè)升級(jí)過程期間繼續(xù)接收并處理來自web服務(wù)器的對(duì)數(shù)據(jù)庫操作的請(qǐng)求(610);將當(dāng)前正被利用的所述數(shù)據(jù)庫的模式升級(jí)為升級(jí)后的模式,其中所述升級(jí)后的模式與所述模式向后兼容(620);在升級(jí)當(dāng)前模式之后,升級(jí)所述在線服務(wù)的web服務(wù)器以使用所述升級(jí)后的模式 (650);以及升級(jí)后的web服務(wù)器使用所述升級(jí)后的模式訪問所述數(shù)據(jù)庫(660)。
2.如權(quán)利要求1所述的方法,其特征在于,升級(jí)所述數(shù)據(jù)庫的所述模式包括向表的末尾添加可為空的列(730)。
3.如權(quán)利要求2所述的方法,其特征在于,還包括當(dāng)對(duì)所述數(shù)據(jù)庫的后續(xù)請(qǐng)求訪問包括所述可為空的列的數(shù)據(jù)時(shí)向所述可為空的列添加值(730)。
4.如權(quán)利要求1所述的方法,其特征在于,升級(jí)所述數(shù)據(jù)庫的所述模式包括添加表 (620)。
5.如權(quán)利要求1所述的方法,其特征在于,升級(jí)所述數(shù)據(jù)庫的所述模式包括在所述升級(jí)過程期間添加索引并在所述升級(jí)過程完成后計(jì)算所述索引(620)。
6.如權(quán)利要求1所述的方法,其特征在于,還包括在所述數(shù)據(jù)庫模式的所述升級(jí)過程完成并且所述升級(jí)后的web服務(wù)器使用所述升級(jí)后的模式訪問所述數(shù)據(jù)庫之后,自動(dòng)確定何時(shí)從所述數(shù)據(jù)庫移除未使用的表和列(750)。
7.如權(quán)利要求1所述的方法,其特征在于,升級(jí)所述在線服務(wù)的所述web服務(wù)器包括升級(jí)所述web服務(wù)器上的軟件以使得在所述web服務(wù)器上的所述軟件的所述升級(jí)期間繼續(xù)履行對(duì)所述數(shù)據(jù)庫的請(qǐng)求(630)。
8.一種具有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可執(zhí)行指令用于升級(jí)當(dāng)前正在在線服務(wù)中使用的數(shù)據(jù)庫,包括啟動(dòng)在所述在線服務(wù)中使用的數(shù)據(jù)庫的升級(jí)過程;其中被升級(jí)的所述數(shù)據(jù)庫在所述升級(jí)過程期間繼續(xù)接收并處理來自web服務(wù)器的對(duì)數(shù)據(jù)庫操作的請(qǐng)求;其中所述在線服務(wù)包括文檔協(xié)作服務(wù);其中所述數(shù)據(jù)庫是SQL數(shù)據(jù)庫(610);將當(dāng)前正被利用的所述數(shù)據(jù)庫的模式升級(jí)為升級(jí)后的模式;其中所述升級(jí)后的模式與所述模式向后兼容,其中升級(jí)所述數(shù)據(jù)庫的所述模式包括向表的末尾添加可為空的列,并且在所述升級(jí)過程完成后當(dāng)對(duì)所述數(shù)據(jù)庫的后續(xù)請(qǐng)求訪問包括所述可為空的列的數(shù)據(jù)時(shí)向所述可為空的列添加值(620);當(dāng)所述數(shù)據(jù)庫的所述模式正被升級(jí)時(shí)對(duì)所述數(shù)據(jù)庫限制對(duì)與所述模式的所述升級(jí)過程有關(guān)的寫入操作(620);在升級(jí)所述當(dāng)前模式完成之后,升級(jí)所述在線服務(wù)的所述web服務(wù)器以使用所述升級(jí)后的模式(650);以及使用利用所述升級(jí)后的模式的升級(jí)后的web服務(wù)器訪問所述數(shù)據(jù)庫(660)。
9.一種用于升級(jí)當(dāng)前正在在線服務(wù)中使用的數(shù)據(jù)庫的系統(tǒng),包括包括web服務(wù)器、后端服務(wù)器和數(shù)據(jù)庫的網(wǎng)絡(luò);其中當(dāng)前模式與所述數(shù)據(jù)庫相關(guān)聯(lián) (400);處理器和計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(5);存儲(chǔ)在所述計(jì)算機(jī)可讀介質(zhì)上并在所述處理器上執(zhí)行的操作環(huán)境(16);以及升級(jí)管理器,用于啟動(dòng)所述數(shù)據(jù)庫的升級(jí)過程;其中所述數(shù)據(jù)庫在所述升級(jí)過程期間繼續(xù)接收和處理來自所述web服務(wù)器的對(duì)數(shù)據(jù)庫操作的請(qǐng)求;其中所述在線服務(wù)包括文檔協(xié)作服務(wù)(610);將當(dāng)前正被利用的所述數(shù)據(jù)庫的所述模式升級(jí)為升級(jí)后的模式;其中所述升級(jí)后的模式與所述模式向后兼容;其中升級(jí)所述數(shù)據(jù)庫的所述模式包括向表添加可為空的列, 并且在所述升級(jí)過程完成后當(dāng)對(duì)所述數(shù)據(jù)庫的后續(xù)請(qǐng)求訪問包括所述可為空的列的數(shù)據(jù)并且對(duì)所述可為空的列的檢驗(yàn)確定所述可為空的列的值為空時(shí)向所述可為空的列添加值 (620);在所述模式的所述升級(jí)完成之后,升級(jí)所述web服務(wù)器以使用所述升級(jí)后的模式 (650);以及使用利用所述升級(jí)后的模式的升級(jí)后的web服務(wù)器訪問所述數(shù)據(jù)庫(660)。
10.如權(quán)利要求9所述的系統(tǒng),其特征在于,升級(jí)所述在線服務(wù)的所述web服務(wù)器包括在所述web服務(wù)器上的所述軟件的所述升級(jí)的期間繼續(xù)履行對(duì)所述數(shù)據(jù)庫的請(qǐng)求并激活使用所述升級(jí)后的模式的一組web服務(wù)器并將請(qǐng)求引導(dǎo)到新的一組web服務(wù)器(630)。
全文摘要
本發(fā)明涉及升級(jí)期間的在線數(shù)據(jù)庫可用性。在線服務(wù)包括被升級(jí)同時(shí)仍然處理請(qǐng)求的數(shù)據(jù)庫。例如,在web服務(wù)器被升級(jí)的同時(shí),web服務(wù)器繼續(xù)請(qǐng)求對(duì)該數(shù)據(jù)庫進(jìn)行操作。該數(shù)據(jù)庫的模式在web服務(wù)器被升級(jí)之前升級(jí)以利用升級(jí)后的模式。對(duì)升級(jí)后的模式所作的改變是與在升級(jí)過程期間使用的模式向后兼容的。對(duì)升級(jí)過程期間對(duì)數(shù)據(jù)庫執(zhí)行的操作施加約束。在升級(jí)該模式之后,該在線服務(wù)的web服務(wù)器被升級(jí)以使用升級(jí)后的模式。
文檔編號(hào)G06F17/30GK102541987SQ20111033996
公開日2012年7月4日 申請(qǐng)日期2011年10月19日 優(yōu)先權(quán)日2010年10月20日
發(fā)明者A·霍普曼, B·馬列, E·R·萊爾馬, M·K·溫德爾, Z·羅森菲爾德 申請(qǐng)人:微軟公司