• Azure 網站服務正式提供備份還原功能

    原文發表於 Backup for Azure Web Sites is now generally available

    Azure 網站服務最近有了新的更新——網站的備份還原功能脫離預覽階段,正式對外提供服務。而正式推出後,也會增加一些功能。

    首先,備份的部份支援更大的網站內容,同時我們也排除了一些可能會造成備份失敗的狀況,像是備份時檔案被鎖定等等。

    而現在您也可以透過預覽的新 Azure 管理介面來操作網站備份及還原的服務,在網站頁面可以看到備份的狀態,並且直接啟動備份的功能。同時也能設定備份的保存時間,而不必手動或自己寫 script 來刪除舊的備份。

    另外一個重要的改良是你可以從任何一個備份來還原網站內容,提供更多的彈性。

    這些改變將提供您更有彈性地備份或還原您的網站服務。

  • 為什麼 ASP.NET 開發人員要瞭解 Azure 行動服務?

    原文發表於 Azure Mobile Services: why should ASP.NET developers care?

    Mobile Services for Web API Devs

    Azure 行動服務為行動應用程式開發人員提供了以雲平台為基礎的後端解決方案,現在這項服務除了可以使用 JavaScript (Node.js) 來客製化後端平台之外,也支援了使用 ASP.NET Web API 的技術來客製後端平台的運算邏輯,所以對於要開發給行動裝置應用程式 API 的 ASP.NET 開發人員來說,Azure 行動服務是相當有吸引力的:

    • 適用於所有行動平台的完整後端平台以及 SDK 解決方案。透過 Azure 行動服務,您可以迅速地為您的 iOS, Android, Windows, Windows Phone 或是 HTML app 加上一個有豐富功能的後端平台,即使是使用像是 Xamarin, Sencha 或 PhoneGap 這些跨行動裝置平台的開發套件也適用。我們同時為這些平台分別提供了 SDK,讓您在開發整合上更加方便。
    • 您 Mobile API 的最佳託管平台。雖然 Azure 行動服務本身就提供了 Web API 供行動應用程式界接,您仍然可以部署 Web API 控制器到 Azure 行動服務上做客製化,相對其它的託管服務,Azure 行動服務可以協助您監控及管理您自行部署的 Web API 控制器,如果 Web API 的執行環境發生了任何問題,我們也會自行修補或更新,除非是您的控制器程式發生問題,我們才會聯絡您。
    • 優質且多功能的行動後端平台。Azure 行動服務提供了許多立即可用的功能,您可以輕易地與 Web API 結合,像是使用 SignalR 即時發出推播通知(push notification)使用社交網路的機制做身份驗證同步離線資料等等。
    • 與企業系統結合。如果您是企業中的開發人員,Azure 行動服務也讓您可以使用 Active Directory 做身份驗證、透過 API 存取 SharePointOffice 365 的資料。除此之外,我們也提供了無縫整合的機制 (connectivity to on-premises assets),即使企業內部的系統或資料庫沒有直接曝露在 Internet 之下,您依然可以在 Azure 行動服務上連結它們。
    • 與 Visual Studio 整合。現在您可以直接在您最愛的 IDE 中直接操作及開發 Azure 行動服務相關的專案,Visual Studio 同時也是 Azure 行動服務最佳的開發、偵錯及發佈的工具。

    適用於所有行動平台的完整後端平台以及 SDK 解決方案

    開始使用 Azure 行動服務是很容易的,只要在 Azure 管理後台上建立一個新的行動服務,並且在第一個畫面記得在 BACKEND 欄位選擇「.NET」。一旦行動服務建立完成後,您可以到 Quickstart 的頁面,根據您要開發的行動平台下載一個起始專案來開發。

    如果您比較喜歡從 Visual Studio 開始,那也可以在新增一個新的 ASP.NET 專案時,選擇新增 Azure Mobile Service 專案範本,稍後再將它直接發佈到 Azure 上。請注意:這項功能是在 Visual Studio 2013 Update 2 之後新增的

    不論用哪一種方式,都會拿到一個 Mobile Service .NET 的專案範本,同時您也可以發現它其實是一個簡單的 Web API 專案(加上一些 NuGet 套件)。

    您可以打開 TodoItemController.cs 這個檔案,在 GetAllTodoitems() 處設定中斷點,這個控制器的程式碼也展示了要如何操作 Azure 行動服務上的資料:

    public class TodoItemController : TableController
    {
        protected override void Initialize(HttpControllerContext controllerContext)
        {
            base.Initialize(controllerContext);
            csharp_testContext context = new csharp_testContext();
            DomainManager = new EntityDomainManager(context, Request, Services);
        }
    
        // GET tables/TodoItem
        public IQueryable GetAllTodoItems()
        {
            return Query();
        }
    
        // GET tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
        public SingleResult GetTodoItem(string id)
        {
            return Lookup(id);
        }
    
        // PATCH tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
        public Task PatchTodoItem(string id, Delta patch)
        {
            return UpdateAsync(id, patch);
        }
    
        // POST tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
        public async Task PostTodoItem(TodoItem item)
        {
            TodoItem current = await InsertAsync(item);
            return CreatedAtRoute("Tables", new { id = current.Id }, current);
        }
    
        // DELETE tables/TodoItem/48D68C86-6EA6-4C25-AA33-223FC9A27959
        public Task DeleteTodoItem(string id)
        {
            return DeleteAsync(id);
        }
    }

    您可以看到這裡我們產生了所有的 CRUD 方法來處理 TodoItem,同時這個控制器使用了 EntityDomainManager,它為 Entity Framework 模型包裝了一層,讓您可以很容易地選擇不同的資料來源,像是:

    • MongoDB: 透過 NuGet 套件管理工具可以安裝使用 MongoDomainManager。詳情可參考這篇文章
    • Azure Table Storage: 透過 NuGet 套件管理工具可以安裝使用 StorageDomainManager。詳情可參考這篇文章

    現在 Azure 行動服務支援您可以在本地端進行偵錯(按 F5 執行),啟動的頁面將可以幫助您瞭解 Web API 送出的資料是否正確。按下頁面中的 GET tables/TodoItem 就可以開始進行測試;按下「try this out」的連結,並按下 send,就會觸發程式中的 GetAllTodoItems() 方法,由於剛才已經設定過中斷點,所以就可以在 IDE 裡進行偵錯。

    當您完成了 API 的開發,您可以立即從 Visual Studio 中將專案按右鍵發行至 Azure,而不必另外打開 Azure 管理介面來操作。

    一旦完成發行,Azure 行動服務便會立刻將您開發的 Web API 上線,同時進行監控。

    想要瞭解更多關於 Azure 行動服務的 .NET 支援,可以參考下列文章:

    您 Mobile API 的最佳託管平台

    如果您是一個有經驗的 Web API 開發人員,您也許會想瞭解把 Web API 服務放上 Azure 行動服務有什麼好處?下面舉出了一些好處:

    • 監控 (monitoring) 及診斷 (diagnostics)。Azure 行動服務提供了 SLA 99.9 的服務水準,並且透過內建的監控機制來確保您服務的穩定。如果是付費用戶,我們更會嚴密監控 HTTP 流量及 SQL 的連結,一旦有問題時便會與您聯絡。除此之外,我們也提供了許多自助監控的機制,像是服務端點監控以及警示功能。
    • 自動更新。我們平均每週都會更新或修補錯誤我們的伺服器平台,而更新的過程不會讓您停止服務或是需要重新部署應用程式。當然,我們會確保更新後的相容性,所有的更新都會向後相容(backward-compatible)。
    • 自動部署雲端服務。當您建立一個 Azure 行動服務時,我們也會自動設定 SQL 資料庫以及通知中樞(notification hub, 為了做推播通知),並且正確地連結好。同樣地,您也可以在管理後台上輕易地設定好與既有機房的連結,達到混合雲的使用情境。Azure 服務提供您公有雲的方便之外,也提供了與既有機房連結的彈性。

    優質且多功能的行動後端平台

    當您開時使用 Azure 行動服務打造應用程式時,您會發現 Azure 行動服務提供了許多有用的功能,這些功能可以為您省下好幾個禮拜的開發時間。

    • 統包的身份驗證方案。許多行動裝置應用程式都會有身份驗證的使用情境,Azure 行動服務已做好像是 Microsoft Account, Facebook, Twitter, Google 以及企業用的 AAD 身份驗證機制,您只需要透過 Azure 行動服務的 SDK/API 呼叫就能完成身份驗證的工作,而不必真的成為 OAuth 專家。詳情可以參考這份教學文件
    • 可延展的推播通知。有一些行動裝置應用程式有使用推播通知的情境,Azure 行動服務已經做好 Windows, iOS, Android 以及 Kindle 的推播機制,您可以只透過一套 Azure 行動服務的 API 便能完成全平台的推播通知機制,當然您也可以完全客製化推播通知的內容,這份文件可以讓您瞭解如何使用 Azure 行動服務的推播通知功能。
    • 同步離線資料。許多用戶希望在行動裝置離線時也能繼續使用,而 Azure 行動服務的 SDK 也提供了類似 SQLite 的離線資料庫機制,待裝置再度連上線後進行同步。詳情可參考這份文件
    • 即時。推播通知是一個與客戶接觸的好工具,但這使得您必須提供可延展且低延遲的網路環境,Azure 行動服務支援以 WebSocket, SignalR 為基礎的即時雙向通訊機制,使您的應用程式能更即時地傳送或接收訊息。而這一切都建構在 Azure 上可無縫延展的基礎架構上,同時也可以輕易地做身份驗證。更多的訊息請參考這篇文章

    與企業系統結合

    在企業系統的開發上,.NET 是很常見的開發平台,所以在 Azure 行動服務支援 .NET 程式語言後就有更多與企業系統結合的機會,您可以參考這一頁的資訊,看到更多的展示。

    • Active Directory 整合。在企業應用中,常會使用 Active Directory 來做身份驗證的機制,Azure 行動服務支援 AD 的登入機制後,也可以存取原本用 AD 做身份驗證的 SharePoint 以及 Office 365,更適合做企業的行動應用程式開發。更多 AD 整合的資訊請參考這份教學文件,而這部影片說明了如何設定 on-behalf-of 的機制。
    • 與既有機房連結。有時候企業的系統或資料庫並沒有曝露在 Internet 的環境下,Azure 行動服務依然支援設定與既有機房連結的機制,創造出「混合連結」的架構。可參考這部影片以及這份教學文件來進行設定。
    • Xamarin SDK。許多企業會選擇使用 Xamarin 的技術來開發多平台的行動裝置應用程式,Azure 行動服務也提供了 Xamarin SDK 讓以 Xamarin 開發應用程式的開發人員也能輕易使用 Azure 行動服務的功能。
    • 加速器。Azure 行動服務團隊針對特定產業的應用開發了一些範例,以加速特定產業的行動應用開發。這些加速器可在此下載

    與 Visual Studio 整合

    除了上述的功能之外,與 Visual Studio 開發工具的整合也是相當重要的,除了可以直接開發、偵錯及發行之外,您也可以在 Visual Studio 中產生像是表格控制器、自訂控制器或是排程工作等程式範本。

    同時我們也整合了遠端偵錯的功能,您只要在伺服器總管(Server Explorer)上連結到對應的 Azure 行動服務,按右鍵選擇「連結偵錯工具(Attach Debugger)」,這樣就可以直接在 Visual Studio 中進行偵錯已發行至 Azure 行動服務的程式碼(要是 Debug 編譯)。

    另一個很棒的功能是,您可以在伺服器總管(Server Explorer)上使用「檢視記錄(View Logs)」的功能看到 Azure 行動服務上的所有 log,也包含錯誤訊息堆疊等。

    我們衷心地希望這些新功能會吸引您在下一個專案來試用 Azure 行動服務。如果您有任何意見或是建議,歡迎透過 Twitter 連絡 @theYavor

  • 案例分享:遷移 Azure 服務至新區域資料中心的過程及步驟

    原文發表於 Migrating Azure services to new regions

    Azure Regions

    最近我們接到了需要將資料中心從美國中南部移到美東的客戶需求,該工作包括計劃一個適合的 SKU,以及有效利用地理複寫 (Geo-Replication) 的高可用性和可回復性。

    客戶試圖整合他們 Azure 服務,並遷移之,其中最重要的需求是資料庫的預期停機時間,他們希望停機時間越短越好,不可超過6小時。 

    客戶概觀

    此客戶是個社交手機遊戲 (可按地理位置搜尋) 的開發商,該遊戲存有世界各地知名的城鎮,玩家於遊戲中會選擇他們所在的地理位置。

    計畫

    從計畫的角度來看,我們考量了多個選項。這些都不是特別長的討論,但值得思考和關注的問題點,且通常都是必要的討論。

    • 資料庫多大?
    • 目前資料庫的 SKU 是?
    • 你能容忍的停機時間是多久?
    • 你可容忍多少資料於轉移過程中遺失?
    • 你的預算?
    • 你是否能容忍使用最近發佈或是仍在預覽階段的服務?
    • 對於資料移轉是否有什麼特別的顧忌?
    • 什麼是你不擔心的?

    該客戶是最重視的是移動性,因此我們必須擁有相當足夠地於經緯度數量。

    該資料庫約 35 GB,而其中約 5 GB 的資料被認為是於轉移過程中需保持 online 狀態,其餘的資料則可於 offline 狀態下進行添加。

    該資料庫是企業版的 SKU,且並沒有使用任何具體 Azure 功能。

    他們可以容忍長達 8 小時的停機時間,但若停機時間可小於 2 小時,是企業及消費者的期望。當然每週有特定的時間點是最適合停機的,因此停機時間控制是一個可被設計的需求。

    客戶是成本導向的,但願意瞭解屏除成本考量外的任何方案。

    客戶對於 DBCopy 過程是相當謹慎的,並認為資料的 import/export 時間若超過 10 小時,將造成嚴重損失。

    計算節點的轉移不是主要考量,也不是迫切地需要將現有的 Blob Storage Data 轉移,解決方案是建構像是 No Cross DC Logic,以便訪問現有的 Blobs。

    解決方案包括:

    • 作用中地理複寫功能
    • 中斷所有連線後,導出資料、複製文件,再將資料導入美東地區。
    • 創建DBCopy、導出資料、複製文件,並在美東地區恢復。

    首選是「啟用地理複寫功能」,原因是:

    1. 最短的停機時間。
    2. 於轉移過程中不會有資料遺失。
    3. 可使用 Rollback。
    4. 若執行失敗,於美國中南部的資料中心重新啟用是很簡單的。
    5. 總成本最低。
    6. 可符合未來計劃 (升級到Premium SKU)。

    比較值得注意的是,該服務是預覽版,但這被認為是一個容忍的風險。於分析歷史資料後,決定一個 P1 就足以滿足他們的需求。另外不可避免的風險是,複製過程是否會佔用過多資源,但這被視為是特殊事件,畢竟可預期的資源需求不高,故最後還是決定保有 P1,並隨時準備升級到 P2。

    於容量規劃過程中,客戶是參考「變更資料庫服務層和效能層級」決定 SQL Azure 資料庫的版本。

    執行

    客戶必須註冊為 Premium SKU 預覽,這必須通過 portal 花幾秒鐘的時間完成。

    一旦簽約,該資料庫可升級到 Premium,請參閱「更改資料庫服務層級和性能水平」。以下公式實際上是相當準確的,預估升級時間為 12 小時:

    3 * [ 5分鐘 + 資料庫大小 / (150 MB/分鐘) ]

    接下來的步驟是建立理想中的複製區域,即美國東地區,這部分較難預估需要多長時間,也較難預估即將開展的副本所需資源。這些步驟可參考「設定作用中地理複寫 (連續複製)」。

    值得注意的是,這個執行計劃是基於程式碼間的部署,若過程是純技術性的,大多於 24 小時內完成。但客戶選擇多等一兩天再執行計畫的下一步,其理由是完成特定程式碼的修改,而發生在現有的拓撲不是在一個新的數據中心。他們關心DDL更改是否會被複製。所有的更改都將被複製,除了於更新主資料庫後必要的更動,像是登入設定等。這些必須在每個環境中進行,而使用者的創建可在 source 完成,詳情請參見「作用中地理複寫的安全性」,將具體說明登入相關議題。

    最後一步是切換到新的區域。以下步驟是客戶特別分享的經驗談,提供給未來可能負責此工作的 IT 專業人員們。對於終止作用中地理複寫,可參考「終止連續複製關聯性」一文。

    1. 提前一週升級資料庫至 Premium 版本,並設定地理複寫到美東資料中心,這可能在同一天都可完成。花了不到 40 分鐘,可將一個 32 GB 的資料庫,從美國中南部完全複製到美東。
    2. 【轉移日】於美東創建名稱與美國中南部對應的 Blob Containers (我們沒有選擇移轉 Blob 資料,但你可以這麼做)。
    3. 部署新的 Web 和 Worker 角色到美東,並將美東的 DB 和 Blob Storage 指向新的部署。
    4. 於新環境中設定 SSL 憑證。
    5. 《停機時間開始》將舊的 Web 和新的 Web 都保持離線,我們於應用程式進行設定,顯示網站正在維護中。只有管理員可以正常進出 website / API。
    6. 更改 DNS 指向新的網站 IP 位置。
    7. 於舊資料中心部署新的程式碼,透過 connection strings 將 DB 和 Blob 指到新資料中心。
    8. 設置美東 DB,允許從美國中南部的 IP 位置連線 (可能不需要)。
    9. 將美國中南部資料庫設置新的部署 (於 staging 環境) 為離線模式,和 prod 環境交替。
    10. 停止 DB 作用中地理複寫功能 (連續複寫關係的終止)。
    11. 將美國中南部 DB 設成 Read-Only 模式。
    12. 於複製完成後將美東地區 DB 設成 read / write 模式 (非必要)。
    13. 《停機時間結束》於美國中南部和美東地區的資料中心重新啟用兩個 website / API。
    14. 於新的 DB 上設置 Azure DB 自動備份服務。
    15. 待 DNS 複製已於世界各地完成,刪除美國中南部地應用程式伺服器。

    以下為客戶完成此偉大工作後的經驗談:

    「轉移非常順利,我們停機約 1 小時,其餘大部分時間是在等待我們的新程式碼部署,配置更新和 prod / staging 的互換。中止 Azure DB 的複製和改變 read / write 模式是相當簡單的過程。」

    本文原始發表於 TechNet 台灣部落格

  • 在 Azure 上的 PHP 網站使用 Azure 的 Redis Cache 服務

    Redis Cache

    Microsoft Azure 的網站服務可以讓 PHP 網站開發人員架設網站(參考教學課程),如果要在網站系統中使用 Cache 來提升系統效能,可以考慮 Azure 上的 Redis Cache 服務(目前在預覽階段)。

    建立 Redis Cache 服務

    要使用 Redis Cache,目前需要到預覽中的新版 Azure 管理介面來操作,在新增服務的選項中選擇 Redis Cache。

    New Redis Cache service

    然後選擇要用哪一個訂閱、什麼方案(Basic or Standard)、還有快取服務要用哪一座資料中心(建議與您的服務放在同一座資料中心,以減少網路的延遲)來提供服務。

    Redis Cache plans

    建立完成後,Azure 需要一些時間把服務建立起來,一旦建立完成便能立即使用,而也可以在管理介面中看到它的一些狀態,可以點開 KEYS 來看金鑰或是 Properties 來看它的設定

    Cache properties

    點開 Properties 就會看到連線資訊,還有連接埠號碼。

    Cache information

    搭配 KEYS 裡面顯示的金鑰就可以來使用 Redis Cache 服務了。

    在網站服務上的 PHP 網站如何使用

    如果您使用 Azure 的網站服務來運作 PHP 網站,要連接 Redis Cache 服務也很容易,只要下面幾個步驟:

    1. 到這裡下載編譯好的,給 Windows 環境的 PHP Redis 擴充套件,記得要根據您網站上設定的 PHP 版本下載對應的版本,而且要下載 VC9 編譯、NTS (non-thread-safe) 的版本。(當然您也可以選擇熟悉的 PHP Redis 套件,這裡只是範例)
    2. 將下載的套件解開壓縮,將 php_redis.dll 放在您的 PHP 專案目錄下,比方說放在 bin/php_redis.dll 下。
    3. 在上傳部署套件之前,先到 Azure 網站服務的管理介面上,將 app settings 加一個 PHP_EXTENSIONS 的常數,然後指到擴充套件的位置(如:bin\php_redis.dll 要用 Windows 的目錄表示法),像是這樣(圖為新版管理介面的網站設定,在現在的管理介面可在設定頁籤中找到):

    4. 上傳擴充套件檔案、重新啟動網站就完成了。

    上面這個 PHP Redis Cache 是使用這個套件,它的連接方式像這樣:

    <?php
    $redis = new Redis();
    $redis->pconnect('您 Redis Cache 的 hostname');
    $redis->auth('在 KEYS 頁面中找到金鑰');
    
    #開始使用 $redis 做 cache 操作 ...
    

    您可以在專案的 GitHub 頁面上查詢它的使用方法。

    參考資料

  • 我們宣佈與 Google 及 Docker 合作以在 Microsoft Azure 上支援新的開源專案

    原文發表於 Announcing Collaboration with Google and Docker to Support New Open Source Projects on Microsoft Azure

    在上個月,我們宣佈支援部署 Docker 上 Azure 虛擬機器上,並且應用我們的技術,讓客戶能夠盡快地使用 Docker 的威力。為了持續為我們的客戶提供更好的支援,我們宣佈將與 Google 及 Docker 合作,預計將在 Microsoft Azure 上支援 Kubernetes 及 libswarm 這兩個開源專案。

    Kubernetes 這個專案發表於今年六月份,它是一種「宣告式容器管理解決方案」,原本是在 Google Compute Engine 上管理 Docker 的工具,在 Microsoft Open Technology 於這個專案的 GitHub 專案上的貢獻後,也讓這項工具支援在 Microsoft Azure 的 Linux 虛擬機器上運作。這讓使用 Microsoft Azure 來建置 Linux 虛擬機器的用戶多了一個管理工具的選項。

    同樣地,MS Open Tech 也開始貢獻 Docker 的命令式管理工具 -- libswarm 專案,Microsoft Azure 也有了原生的支援,能夠在 Azure 虛擬機器上部署 Docker 容器。

    這項宣佈呼應了我們 Microsoft Azure 一貫對客戶的承諾 -- 回應客戶的需要,並且支援多樣的系統、技術及語言(從 Windows, SQL, .NET 到 Python, Ruby, Node.js, Java, Hadoop, Linux, 以及 Oracle ),讓客戶能夠快速在 Microsoft Azure 提供的公有雲服務上建置及部署應用。同樣我們也持續打造 Microsoft Azure 為開放的平台,如同最近宣佈支援的 Puppet, Chef 及其它開源專案一樣。在 Microsoft,我們一向看重與開發人員、合作夥伴以及客戶在複雜 IT 環境的需求,也期待能從您的需求中瞭解什麼對您是最重要的事。