Ruddy Lee 分享空間

Emergent Design 演化設計

開發Windows Azure 程式的小偏方 tips and tricks

leave a comment »

把回答大陸網友的幾個問題綜合一下,在這裡跟大家報告了。

(喔!  提醒一下: Silverlight 在Loading 時,若你想用MessageBox.Show作 debug,這是不一定會 Work的。  )

如果你認為Windows Azure 的Unittest 不 Work了,那你就錯了!

請試著在方案之下加入一個新的專案(記著: 只能挑選Console 應用程式,因為當程式上傳到了雲端只有他不會造成錯誤而使得整個專案不能正常工作,通常就是完全沒有回應了,也就是著名的雲端白畫面),然後運用這個專案去呼叫你想要測試的邏輯物件。這個時候;你會發現又可以使用Visual Studio自動幫我們創建的測試專案了,然後;在專案裡挑選你想測的 function 接著按下右鍵,一如往常地交給Visual Studio去創建你的測試專案及測試程式了。

一直覺得把專案變成雲端程式後,一切的執行動作都變得慢了下來!

這是因為你一直執行在 Development Fabric 的離線模擬狀態下,因為多了一層模擬環境,所以執行起來會慢一些。建議你在正要開發的程式下按右鍵,選擇它做為啟動程式,而不要把雲端專案設為啟動程式,這樣就會快上許多,尤其當你只是在撰寫邏輯元件時,請務必這麼做,而且應該運用 Console程式來進行單元測試。

將既有程式轉成雲端程式後,就必須維護二套程式了嗎?

這是程式人員在作業上的迷失。實際上;你可以在Visual Studio內切換『啟動程式』的方式來做腳色的更換。當然囉! 如果一旦你開始採用雲端才有的功能或是元件時,這一點是無法避免的,勢必會漸行漸遠,產出二套不同的程式碼,也使的維護上變得較麻煩許多。

但是有一點你必須記住的,就是在架構的設計上運用SOA的技巧,讓服務成為比較能夠獨立運作的單元,總是盡量採用鬆耦合(loosely couple)的方式來設計介面,如此可以避免在雲端與非雲端的 相同功能程式 的部分去維護二套不同服務的程式庫,這一點正是微軟在2004年所提出來的 Software Plus Services( S+S 請參考: http://en.wikipedia.org/wiki/Software_plus_services). 這一點尤其在軟體公司大事將既有的程式搬上雲端時更應該要注意的事,也就是;先把架構弄對了,接著一切就都可以輕鬆處理了。

如何確定既有程式已經能在雲端上正確無誤的運行了呢?!

上回在北京講 TechEd2010 的時候,有題到將既有程式搬到雲端的幾個等級,

(A).最初級的就是,將 ASP.net程式的一堆呼叫到的相關程式庫都搬到雲端上頭,讓程式可以在 Windows Azure上執行起來,就認為大功告成了。這是最多也是普遍的一種方式。老實說;還真是可以稱它為: 身在雲端而沒有享用雲端功能的程式。因為這種轉換的方式,並不能享受到橫向擴充instance時的運算能力,為甚麼呢? 不急,看看第二級就能意會。

(B). 第二級的做法就是把state 再考慮進來,除了把web 程式搬到雲端去執行以外,在統一將原本屬於IIS session manager 負責的狀態及變數資料一併改成雲端的provider 來處理(那就是將他們放到SQL Azure上或是Blob 的Table 內去統一儲存)。這麼做是為了Windows Azure 的前端自動做 Load Balance 的關係,因此資料一定要統一存取。(請參考: http://blogs.globallogic.com/aspnet-application-migration-to-windows-azure,MSDN上也有完整的說明: http://msdn.microsoft.com/zh-tw/windowsazure/gg442342)

(C). 再高一級的話就是將原來的架構,改寫成雲端 Web Role 及 Worker Role 分開處理 UI及邏輯運算的方式,這才是真正能夠發揮 Windows Azure 效能的一種正確方式(當然還是有人把這種架構運用得錯的一蹋糊塗,例如: 把WF4 放到Work Role 裏頭去)。
當然,絕對不只這三種等級了,雲端程式的架構是比傳統程式更需要嚴謹的加以規畫的,這一點我們有空再聊。

覺得意猶未盡的人可以參考: SOA with .NET & Windows Azure Realizing Service-Orientation with the Microsoft Platform這本書,是 Prentice Hall 出版的: http://www.amazon.com/NET-Windows-Azure-Service-Orientation-ebook/dp/B003V4ATGW 寫得好極了。

至於要怎樣來確定搬上去的程式已經能在雲端上正確無誤的運行了呢? 那當然只有一種方法能夠確定了,那就是對它進行【測試】。

MSDN有一篇好文章: 使用 IntelliTrace 偵錯已部署的服務: http://msdn.microsoft.com/zh-tw/library/ff683671.aspx

Written by ruddyllee

2011 年 01 月 29 日 於 21:31:32

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: