2012-12-19 5 views
7

현재 Azure 응용 프로그램의 비용을 예측할 수있는 프로그램을 작성하고 있습니다. 이를 위해 (Azure) 서버에 대한 호출을 (간접적으로) 수행 할 모든 방법을 가로 채기위한 아이디어가 있습니다. 그리고 각각의 방법에 대해 그것이 속한 비용의 측면을 결정합니다 (예 : (스토리지 트랜잭션, 서비스 버스 트랜잭션, 토큰 요청 등)특정 메서드 호출 추적

이것의 어려움 중 하나는 또한 클래스/메소드가 조롱 될 때 메소드 호출을 가로 채기 위해 Azure 어플리케이션을 개발하는 동안 (유닛) 테스트에서 프로그램을 사용할 수도 있습니다.

그래서 클래스의 메소드에 '구독'할 수있는 방법이 있는지 궁금합니다. 이 메서드가 호출되면 이벤트가 시작됩니다. 저장소 트랜잭션, 서비스 버스 트랜잭션, 토큰 요청 등을 가로 채기위한 다른 (더 나은) 솔루션이 있습니까? 예를 들어 저장소 트랜잭션을 보내지 만 조롱을받는 클래스의 경우? 사전에

감사

편집 1 : /는 푸른 응용 프로그램의 비용에 영향을 미치는 모든 클래스/메소드를 알고 포함 일부 (헬퍼) 클래스/라이브러리 나 참조가있는 경우 누구나 알고 있나요?

편집 2 위의 문제를 해결하는 좋은 접근 방법입니까? 아니면 대안이 있습니까?

+1

모든 통화가 동일하게 생성되는 것은 아니므로 통화 당 비용 기반을 설정하기가 어려울 수 있습니다. –

+2

Dave의 의견을 확대하기 위해 테이블 ​​서비스 쿼리에서 .ToList를 호출하면 반환되는 행 수에 따라 기본 REST API에 대한 호출이 많이 생성 될 수 있으며 큰 부분은 데이터 전송 비용이 될 수 있습니다. 같은 데이터 센터에서 실행하거나 – knightpfhor

+0

당신은 쉽게 로그 응용 프로그램을 실행할 수 있습니다. 구글과 우리의 양식은 이것에 관한 많은 정보를 가지고 있습니다. – TN888

답변

3

HTTP 프록시를 만들어 응용 프로그램에서 해당 프록시를 통과하게하십시오. AOP가 좋은 해결책이지만 당신이 정말로 윈도우 Azure 스토리지/서비스 버스/각 요청을 가로 챌 수있는 방법은 ...

, 그것은 당신의 요구에 맞게하지 않습니다. 예를 들어 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 서비스를 추적하는 방법에 대한 질문이있다. 서비스 버스 (서비스 버스의 모든 것이 http (REST) ​​호출로 이어지는 것은 아닙니다)와 동일합니다. 이걸 추적하는 방법을 알고 있습니까? 최종적으로 우편으로 저에게 연락 할 수 있습니다 (프로필 참조). – mrtentje

0

당신은 앞으로 다음 호출과에 대한 기본 객체에 대한 호출을 가로 클래스, 기록 정보를 생성하는 dynamic proxy를 사용할 수 있습니다 그들.

정확히 어떻게 연결해야할지 모르겠지만 올바른 방향으로 갈 수 있기를 바랍니다.

+0

나는 이것 모두를 연결시킬 줄도 모른다. 그러나 이것은 이것을 구현하는 나의 최초의 유일한 생각이다. Azure 특정 도우미 클래스가 있는지 안다. 이걸로 나를 도울 수 있을까? – mrtentje

0

당신은 aspect 지향적 인 솔루션을 찾고 있습니다. 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

(mock 용) - 테스트를 실행중인 시스템에서 추적 로그를 가져와야합니다./ – viperguynaz

0

프록시 생성 및 인터페이스 기반의 동적 메서드 호출을 포함하여 Modern C# 디자인을 고려했습니다. 블로그는 어떻게 작동하고 어떻게 사용하는지 설명합니다.

나는이 시나리오가 적절하다고 확신한다.

관련 링크

을 찾을 수 있습니다

Decorator proxies

하고,보다 일반적인 동적 메소드 호출을 찾을 수를 :

Dynamic method invocation

+0

이 솔루션에 직면 한 유일한 문제는 Azure의 모든 비용 관련 방법을 식별해야한다는 것입니다. .. – mrtentje

0

당신은 로그 파일을 만들 수 있습니다. 시간과 오류 또는 반응을 씁니다. 이것은 좋은 해결책입니다. 반 은요?