2012-12-19 22 views
7

Şu anda bir Azure uygulamasının maliyetlerini tahmin edebilecek bir program yazıyorum. Bunun için (Azure) sunucusuna yapılan bir çağrıyı (dolaylı olarak) yapacak olan tüm yöntemleri engelleme fikrim var. Ve yöntemlerin her biri için, maliyetin hangi yönüne ait olduğuna karar verilir (örneğin (depolama-işlem, servicebus-işlemleri, belirteç-istekleri vs.))Özel yöntem aramalarını izleme

Bunun zorluklarından biri de sınıf/yöntem alay edildiğinde bir yöntem çağrısını engellemek için program, bir Azure uygulamasının geliştirilmesi sırasında (birim-) testlerinde de kullanılabilir.

Bu yüzden bir sınıfın yöntemine 'abone olmanın' bir yolu olup olmadığını merak ediyordum. Ve bu yöntem çağrıldığında bir etkinlik başlatılacak. Veya depolama işlemleri, servis işlemleri, jeton talebi vb. Işlemlerin engellenmesi için başka (daha iyi) çözümler var mı? peşin

Teşekkür

DÜZENLEME 1: /Bir Azure uygulama Maliyetleri etkileyen tüm sınıfları/yöntemleri bilir içeren bazı (yardımcı) sınıfları/kütüphaneler veya referanslar varsa herkes biliyor mu?

EDIT 2 Yukarıdaki problemi başarmak için iyi bir yaklaşım mı? Yoksa alternatifler var mı?

+1

Tüm çağrılar eşit olarak oluşturulmadığından, arama başına maliyet temelini belirlemeyi zor bulabilirsiniz. –

+2

Dave'in yorumunu genişletmek için, bir tablo hizmet sorgusunda .ToList'e yapılan bir çağrı, kaç satırın döndüğüne bağlı olarak temel REST API'sine çok sayıda çağrı oluşturabilir ve maliyetin daha büyük bir kısmı, veri aktarımının maliyetinin ne kadar olduğuna bağlı olarak veri aktarımı maliyetleri olabilir. Aynı veri merkezinde çalışan ya da değil – knightpfhor

+0

kolayca uygulama kaydı yapabilirsiniz. Google ve formumuz bu – TN888

cevap

3

Bir HTTP proxy oluşturun ve uygulamanızın bu proxy'den geçmesini sağlayın. Bu şekilde, her isteği Windows Azure Depolama/Hizmet Veri Yolu'na engelleyebilirsin ...

AOP iyi bir çözüm olsa da, gereksinimlerinize uymaz. Örneğin CloudBlob.UploadFile yöntemini kullanın. AOP perspektifinden bu tek bir çağrıdır, ancak HTTP işlemlerinin sayısına bakarsanız, bu, 1'den fazla çağrı olabilir (büyük dosyalar yığılır ve birden çok HTTP isteği üzerinden gönderilir). Bu nedenle, tüm çağrıları Windows Azure hizmetlerine izlemek istiyorsanız, HTTP proxy gibi düşük düzeyli bir şey kullanmanız gerekir.

+0

Tek bir HTTP çağrısından daha fazlası var mıdır? Ölçmesi gereken şey, kodun her çağrısının maliyetidir (zaman ve işlemci açısından). Şahsen ben Visual Studio kod profiler kullanarak genel bir fikir edinmek için kullanacağım, ancak sadece AFAIK Ultimate versiyonunda mevcut. ANTS Profiler de çalışırdı. –

+0

Bu soru değil. Azure ile ilgili maliyeti ölçmek istediğini açıkça belirtiyor, zaman/CPU maliyetini değil. –

+0

Cevabınız için teşekkür ederiz. Bir süredir http-proxy çözümü ile prototip yapıyorum ... Azure TSQL ve SQL Reporting servislerini Azure'dan takip etme konusunda bir sorum var. Service Bus ile aynı şey (servis otobüsündeki her şey bir http (REST) ​​çağrısıyla sonuçlanmaz). Bunları nasıl izleyeceğini biliyor musun? Sonunda bana mail ile ulaşabilirsiniz (profile bak). – mrtentje

3

Aspect Oriented Programming (AOP.) 'Ya atıfta bulunursunuz AOP, nesneler ile bunların yöntemleri ve özellikleri arasındaki gönderim iletilerini kesmeyi içerir. Çağrıların içeriğine bağlı olarak mantık yürütülür. İşte

.NET AOP çerçeveler üzerinde bir soru:

What is the best implementation for AOP in .Net?

+0

hakkında bir sürü bilgi var Teşekkürler, yön yönelimli programlama terimi hiç duymadım. Ona dalacağım ... – mrtentje

0

Sen ileriye sonra çağrı ve yaklaşık yatan nesnelere çağrıları önünü sınıfları, kayıt ayrıntılarıyla oluşturmak için dynamic proxy kullanabilmek için olabilir onlar.

Tam olarak nasıl bağlayacağınızdan tam olarak emin değilim, ama umarım bu doğru yönde ilerlemenizi sağlar.

+0

Ayrıca bunu nasıl kuracağımı da bilmiyorum ... ama bunu uygulamaya koyduğum ilk ve tek fikir ... Azure'a özgü yardımcı sınıflar olup olmadığını biliyor musunuz? Bu bana yardımcı olabilir? – mrtentje

0

Bir yönelimli çözüm arıyorsanız. PostSharp gibi bir şey sizin için çalışmalıdır. İyi bir başarı ile kullandım. Diğer ücretsiz seçeneklerin mevcut olup olmadığından emin değil.

+1

Kale Dinamik Proxy bir diğeri: http://www.castleproject.org/projects/dynamicproxy/ Spring.NET'in bir AOP bölümü vardır: http://www.springframework.net/doc-latest/reference/html/ aop.html –

0

Yöntem çağrılarını izlemek için Trace API'sini kullanıyoruz - Using Trace in Windows Azure Cloud Applications numaralarını okumanızı öneririz. Azure Tablolarında yakalanan verilere sahip olduğunuzda, izlediğiniz veriler hakkında rapor vermek kolaydır (teşhis raporlarına benzer şekilde).

+0

Bu çözüm, hangi yöntemleri Azure özgü olduğunu belirlemek için sorunu çözer. Ancak bu sorun, alay edilen sınıflar/yöntemler için de çalışır? (Örneğin MoQ için) – mrtentje

+0

alay için - test çalıştırmakta olduğunuz makineden izleme günlüklerini/ – viperguynaz

0

Arayüzlere dayanan proxy üretimi ve dinamik yöntem çağırma da dahil olmak üzere Modern C# tasarımını düşündüğüm bazı işler yaptım. Blog, nasıl çalıştığını ve nasıl kullanılacağını açıklar.

Bu durumun senaryo için çalıştığından eminim.

alakalı bağlantı

bulunabilir:

Decorator proxies

ve daha genel dinamik metot çağrımı bulunabilir:

Dynamic method invocation

+0

almam gerekirdi. Bu çözümle karşılaştığım tek sorun, Azure'un maliyet ile ilgili tüm yöntemlerini tanımlamak zorunda olduğumdur. .. – mrtentje

0

Sen günlük dosyası oluşturabilirsiniz. Zaman ve hata veya tepki yazın. Bu iyi bir çözümdür. Yarısı ben