2012-12-19 68 views
7

目前我正在編寫一個可以估算Azure應用程序成本的程序。爲此,我有想法攔截將(間接)調用(Azure)服務器的所有方法。並且對於每種方法決定它屬於哪個方面的成本(例如(存儲 - 交易,服務總線 - 交易,令牌請求等))跟蹤特定的方法調用

其中一個困難是我也想在類/方法被模擬時攔截方法調用,所以程序也可以在開發Azure應用程序的過程中用於(單元)測試。

所以我想知道是否有一種方法來'訂閱'的方法類。當這個方法被調用時,事件將被觸發。 或者還有其他(更好的)解決方案來攔截存儲事務,服務總線事務,令牌請求等,也用於發送例如存儲事務但被嘲笑的類?

在此先感謝

編輯1: 有誰知道,如果有一些(助手)類/包含/知道所有的類/方法是影響一個Azure應用程序的成本庫或引用?

編輯2 這是一個很好的方法來實現上述問題?還是有其他選擇?

+1

並非所有的呼叫都是相同的,因此您可能難以建立每個呼叫成本的基礎。 –

+2

要擴展Dave的評論,對錶服務查詢上的.ToList的調用可能會創建對底層REST API的許多調用,具體取決於返回的行數,並且大部分成本可能是數據傳輸成本,具體取決於它是在同一個數據中心運行或不運行 – knightpfhor

+0

您可以輕鬆的登錄應用程序運行。在谷歌和我們的表格有很多關於這個信息 – TN888

回答

3

創建一個HTTP代理並讓您的應用程序通過該代理。這樣,你可以真正攔截每個請求到Windows Azure存儲/服務總線/ ...

雖然AOP是一個很好的解決方案,它不會滿足您的需求。以CloudBlob.UploadFile方法爲例。從AOP的角度來看,這是一個單一的調用,但是如果你看一下HTTP事務的數量,這可能比1次調用多(大文件被分塊並通過多個HTTP請求發送)。

這就是爲什麼如果要監視對Windows Azure服務的所有調用,則需要使用HTTP代理等較低級別的原因。

+0

但是,如果它不止一個HTTP調用,它有什麼關係?他應該測量的是從他的代碼(根據時間和處理器花費)中的每個調用的成本,而不一定是基礎細節。就個人而言,我只是使用Visual Studio代碼分析器來獲得一般意義,但它僅在Ultimate版本AFAIK中可用。 ANTS Profiler也可以工作。 –

+0

這不是問題。他明確表示他想測量Azure相關成本,而不是時間/ CPU成本。 –

+0

感謝您的回答。我一直在使用http-proxy解決方案進行原型開發......我有一個問題,如何從Azure跟蹤Azure TSQL和SQL Reporting服務。與Service Bus一樣的東西(並非服務總線中的所有內容都會導致http(REST)調用)。你知道如何跟蹤這些嗎?最終你可以通過郵件與我聯繫(見個人資料)。 – mrtentje

0

您可以使用dynamic proxy生成有關的呼叫,再往前就是攔截對底層對象的調用類,記錄的詳細信息他們。

我不確定你是怎麼把它連接起來的,但希望這會讓你朝着正確的方向前進。

+0

我也不知道我將如何連接這一切......但這是我的第一個也是唯一的想法來實現這個...你知道是否有一些Azure特定的幫助類這可能會幫助我呢? – mrtentje

0

您正在尋找面向方面的解決方案。像PostSharp應該爲你工作。我用它取得了很好的成功。不確定是否有其他可用的免費選項。

+1

城堡動態代理是另一個:http://www.castleproject.org/projects/dynamicproxy/ Spring.NET有一個AOP部分:http://www.springframework.net/doc-latest/reference/html/ aop.html –

0

我們使用Trace API來跟蹤方法調用 - 我建議您閱讀Using Trace in Windows Azure Cloud Applications。在Azure表中捕獲數據後,可以輕鬆報告正在跟蹤的數據(類似於診斷報告)。

+0

該解決方案解決了問題以確定哪些方法是Azure特定的。但是,這個問題也適用於被嘲笑的類/方法嗎? (例如MoQ) – mrtentje

+0

嘲笑 - 您將不得不從您正在運行測試的機器上獲取跟蹤日誌/ – viperguynaz

0

我做了一些我認爲是現代C#設計的工作,包括基於接口的代理生成和動態方法調用。博客解釋了它是如何工作的以及如何使用它。

我很確定這適用於您的方案。

相關的鏈接,可以發現:

Decorator proxies

和更通用的動態方法調用,可以發現:

Dynamic method invocation

+0

此解決方案面臨的唯一問題是我必須確定Azure的所有成本相關方法。 .. – mrtentje

0

您可以創建日誌文件。寫出時間和錯誤或反應。這是很好的解決方案。我有一半?