Windows Azure遷移計劃詳解
Windows Azure是一個由微軟數據中心提供的一個Internet級別的計算和服務平臺。因為通過使用Windows Azure,微軟會維護所有底層的操作系統、硬件、網絡、存儲資源并且會不斷的更新這個平臺,因此開發和系統管理人員不再需要為底層的軟件和硬件基礎構架操心。
由于Windows Azure和企業內平臺有很大的區別。我們強烈推薦您在將程序遷移到云端之后,就像新部署程序時一樣對程序進行功能和性能的測試。您需要在實現遷移的過程中考慮下述重要部分:
- 構建驗證測試環境
- 同步數據庫以減少轉移時間
- 備份和還原
- 轉移到Windows Azure
本篇主題的重點是Windows Azure Cloud Services.而關于將SQL Server遷移到Windows Azure虛擬機的初步指導,請參閱Migrating with Windows Azure Virtual Machines。
構建驗證測試環境
在將程序遷移到云端的時候,您必須知道如何測試和調試您的程序以便保證您的程序在云端和在本地一致。下述列表展示了您可以用于測試您的程序的方法:
- Windows Azure Tools for Microsoft Visual Studio:在您創建程序后,您可以使用計算和存儲模擬器在本地對程序進行調試。這使得您可以在將程序發布到Windows Azure之前在本地開發程序。Windows Azure Tools for Microsoft Visual Studio對Visual Studio 2010進行擴展使得額外添加的計算和擴展模擬器包含了Windows Azure的大部分功能,從而您可以在本地對程序進行測試。我們推薦您在功能測試的早期就進行這類測試。更多信息,請參閱:Windows Azure Tools for Microsoft Visual Studio。
- SQL Server數據工具:SQL Server Data Tools (SSDT) 在Visual Studio 2010中提供了集成開發環境,您可以使用這個工具來設計數據庫、創建和編輯數據庫對象和數據,或是對其支持的所有SQL平臺執行查詢語句;這包括在云端的Windows Azure SQL Database和非云端的Microsoft SQL Server 2012。這個工具允許您檢查程序中數據訪問模塊。無論這部分數據是本地默認數據庫還是Windows Azure SQL Database,這個工具都可以用來測試您的數據庫項目解決方案。更多信息,請參閱SQL Server Data Tools:注意:Windows Azure Tools for Microsoft Visual Studio和SSDT都可以用于對在線和離線的數據源進行基本的功能和兼容性測試。但是為了真正從功能、性能可擴展性的角度測試運行在云端的程序,您還需要在您程序運行的Windows Azure上進行測試。
- 自動化測試框架:很多程序已經存在可以用來保證程序的模塊和功能正常工作的自動化測試框架。當程序在Windows Azure上運行時,這類自動化測試框架是否可以正常運行取決于這類框架是如何設計的。如果這類框架需要在企業內部運行但可以通過定義好的端點連接Windows Azure,這類框架就有可能在云端正常工作。否則,我們建議您將自動化測試框架和程序本身都遷移到Windows Azure上以避免丟失連接和網絡延遲問題。
- Visual Studio負載測試:如果程序當前并不存在自動化測試框架,我們推薦您創建一個新的自動化測試框架并使用Visual Studio負載測試來模擬多用戶負載。更多信息,請參閱:Using Visual Studio Load Tests in Windows Azure Roles。
同步數據庫以減少轉移時間
您應該盡量減少在測試、數據移動和生產之間的轉換時間。將企業內部的數據上傳到Windows Azure可能會需要數個小時甚至數天。您不會希望在這段時間內您的程序不可用。這也是為什么您需要一個減少停機時間的計劃。注意轉移時間意味著將企業內部程序遷移到Windows Azure的最終步驟所需的時間。在轉移之前,看看哪些表中的數據在遷移過程中不改變而哪些表中的數據在遷移的過程中可能改變。對于靜態數據來說,您不需要在轉移時間內轉移這部分數據,如果您不能確定某些特定表中的數據是否會在轉移時間內改變,您應該在系統中添加將改變的數據遷移到云端的程序。我們還推薦您考慮是否所有企業內部的數據都需要遷移到云端才能使得在Windows Azure上的程序上線。如果您的程序只有部分數據存在云端就能上線,那就會大大減少停機時間。
但如果是程序在Windows Azure上線之前,云端數據需要和企業內部數據保持一致,那就考慮減少在轉移時間內所轉移的數據量。在某些情況下,可以在轉移時間之前就先轉移部分數據,在實際的轉移時間內轉移另外一部分數據。在這種情況下,您需要區分哪些數據是可以提前轉移的,而哪部分數據需要在轉移時間內轉移,這樣做的好處是允許您的程序在Windows Azure中上線的過程中因為只轉移部分數據而減少停機時間,您可以使用下述方式在轉移時間之前同步數據:
Windows Azure SQL Data Sync
Windows Azure SQL 數據同步服務提供了為Windows Azure SQL Databases同步數據的功能,這個服務目前有兩個主要功能:
- 同步企業內部的SQL Server數據庫和Windows Azure SQL Database實例之間的數據,使得企業內部和基于云端的程序可以使用相同的數據。
- 同步Windows Azure SQL Database實例之間的數據,被同步的實例可以在同一個數據中心,不同的數據中心,甚至是不同的區域。
對于下述情況,用Windows Azure SQL 數據同步服務來同步企業內部數據庫和Windows Azure SQL Database實例之間的數據是一個很好的選擇:
- 您需要對程序進行并行測試。
- 在將企業內部的所有數據遷移到Windows Azure之前您的程序需要繼續運行,在遷移之后將這部分改變的數據遷移到Windows Azure。
- 在遷移到Windows Azure之前,您企業內部的程序需要繼續運行,同時還需要減少停機時間。
- 程序同時使用了云端和企業內部數據庫作為混合解決方案的。
值得注意的是,SQL Data同步服務使用改變跟蹤表用于跟蹤被改變的表來使得這些改變的數據被同步。當使用SQL數據同步服務時,您必須為這個改變跟蹤表預留空間。除此之外,您***不要修改被同步表的表結構或是主鍵,除非您重新初始化同步組。但對于需要中介和實時數據同步的情況下SQL Data同步服務就不是那么理想了,更多信息,請參閱SQL Data Sync。警告:SQL Data Sync當前僅僅是預覽版,僅僅是為了未來的版本收集反饋信息,所以不應該被用到生產環境中。
復制、鏡像、事務日志傳送
您可以使用復制、鏡像、事務日志來將企業內部的一個SQL Server實例中的數據同步到另一個企業內部的SQL Server實例或是Windows Azure虛擬機上的實例。但是這些選項都不能將數據移入或移出Windows Azure SQL Database中。更多信息,請參閱:Replication and Log ShippingandDatabase Mirroring and Log Shipping。
自定義抽取、轉換、裝載(ETL)
為了減少在轉移時間內轉移數據所需的時間,您應該盡量在轉移時間之前盡可能多的轉移數據。您可以使用自定義ETL job來將那些被改變的數據從企業內部的SQL Server轉移到Windows Azure環境中。當從SQL Server 2008之后的版本中遷出數據時,我們推薦使用CDC功能來確保僅僅那些改變的數據從企業內部的數據庫中轉移到Windows Azure SQL Database實例中。更多關于CDC的信息,請參閱BOL上的Track Data Changes。但對于那些沒有CDC的數據庫,您需要創建一個數據跟蹤系統來追蹤那些被遷移之后改變的數據。總之,在實際的轉移時間遷移最小量的數據會大大減少停機時間。
導出數據層應用程序(DAC)
通過DAC,您可以將SQL Server實例中的數據導出并將其存入Windows Azure Blob 存儲中并稍后還原到Windows Azure SQL Database。通過DAC,您可以設置只有需要的表被導入或導出的表級別過濾器,但無法設置行級別的過濾器。這也是為什么DAC適合整個表都在單獨數據庫中的情況而不適合聯合數據庫。DAC還不適合需要實時同步的程序,更多信息,請在BOL中參閱Export a Data-tier Application。
備份和還原
創建數據庫備份是為了從管理錯誤、程序錯誤以及數據中心中出問題導致的數據丟失中進行還原。在Windows Azure SQL Database中備份和還原數據和在企業內部的SQL Server中并不一樣,因此需要和可用的資源和工具共同使用。因此為了進行可靠的恢復而進行的備份還原Windows Azure SQL Database就需要一個的備份和還原策略。需要Windows Azure SQL Database進行數據恢復的場景主要分為下述三類:
- 基礎構架和硬件失敗:數據中心可能出現硬件故障,比如說為您的數據提供Windows Azure SQL Database服務的硬件節點故障。
- 程序或用戶所產生的問題和故障:用戶或程序有可能對數據產生意料之外的操作,這類操作需要進行恢復。比如說,某個用戶錯誤的修改了一個客戶的信息,等等。
- 數據中心設備損壞:當前的Windows Azure SQL Database服務協議指定了在微軟控制之外的原因比如說災難發生所導致的問題是免責的。在災難發生時,數據中心可能出現數據庫無法從復制或是在線備份中恢復的損害。
最終您需要決定對于存儲在Windows Azure SQL Database數據中心的數據能夠損失的程度。有關可用備份和還原工具以及圍繞其所建立的災難恢復策略,請參閱MSDN中的Business Continuity in SQL Database。
轉移到Windows Azure
當您真正開始將您的程序遷移到Windows Azure時,您可以遵循下述兩種方式:
- 并行運行:使用這種方式,您的程序同時在企業內部和Windows Azure上運行。這使得您可以在程序完全依賴云端運行之前在Windows Azure進行在線測試。您的測試應該包含但不僅限于:功能測試,性能測試,擴展性測試。當完成對Windows Azure上新系統的完整測試后,將剩余部分數據遷移到云端,最終關閉企業內部的系統。
- 暫停和轉移:這種方式適用于系統在Windows Azure上線之前所有的數據都需要被同步。使用這種方式需要首先完成在Windows Azure上的功能和性能測試,然后使用上面提到的數據同步方式將數據同步到Windows Azure。我們推薦本地和云端的數據盡量保持一致以減少最終數據同步或ETL操作所需的時間。最終轉移到Windows Azure時,關閉企業內的系統,并做***一次數據同步,然后將Windows Azure上的程序上線。
本文翻譯自Windows Azure官方指南,全部系列翻譯完后會集結成PDF放在Technet的Community Content中。