2

Я пытаюсь реализовать статистическую отчетность для внутренних компонентов веб-приложения OLTP. Например, я хочу отслеживать почти в реальном времени использование или производительность таких вещей, как: количество успешных/неудачных логинов, количество сеансов nhibernate, время для обслуживания HTTP-запроса, количество транзакций разных типов (заказы, обращения и т. Д.). Все эти данные отправляются через UDP на сервер statsd (https://github.com/etsy/statsd) и отображаются в виде графиков с графитом.Обработка сквозных проблем, таких как внутренняя статистика отчетов для компонентов веб-приложения

Приложение использует инъекцию зависимости для внутренних компонентов проводки. Я хочу централизовать статистическую отчетность по отношению к серверу statsd в собственном классе и скрыть его под интерфейсом. Тем не менее, мне хочется вводить экземпляр класса/интерфейса отчетности по статистике в каждом компоненте приложения, который сообщает об эффективности производительности или данных об использовании. Мне кажется, что отчеты о представлении отчетов должны быть чем-то вроде проблем с перекрестными ссылками, в значительной степени похожими на ведение журнала.

Как вы относитесь к внутреннему дизайну для такого запроса? Подходите ли вы к инсталляции конструктора, статическим методам (например, PerformanceCounters.Increment («name.of.counter»)), которые называются моими отслеживаемыми компонентами или как?

Если это какая-либо помощь для контекста, приложение выполняется на C# и использует ASP.NET и Castle Windsor в качестве IoC.

Спасибо, Роберт

+1

Это сквозная проблема, как и регистрация. См. Этот ответ: http://stackoverflow.com/questions/7905110/logging-aspect-oriented-programming-and-dependency-injection-trying-to-make/7906547#7906547 –

ответ

1

Я использую Spring.NET что-то вроде этого. Весна очень похожа на замок Виндзор для IoC, насколько я слышал, а Spring использует CastleWindsor для создания динамических прокси. Эти, которые вы можете использовать для АОП, который поддерживается весной. Кривая обучения коротка, структура очень хорошо документирована. Как только ваш аспект производительности настроен, применение его к вашим методам должно быть более чем простым. Дайте мне знать, если вы хотите небольшой образец.

+0

Вопрос не в выборе контейнера на основе IoC по своей сути, речь идет о проектировании решения с архитектурной точки зрения. Во всяком случае, как выглядит код при приближении к запросу с Spring.NET? –

1

Образец дизайна, я думаю, вы имеете в виду Aspect Oriented Programming. Castle Windsor поддерживает АОП, как и большинство других контейнеров IoC.

Вы не вводите экземпляр класса/интерфейса представления статистики в каждый компонент, как вы говорите. Скорее, в вашей конфигурации вы завершаете каждый компонент перехватчиком. Компонент ничего не знает о статистических отчетах; перехватчик вызывается до и после каждого вызова вашего компонента и может решить, отправлять ли и куда отправлять информацию трассировки. Он идеально подходит для таких вещей, как ведение журнала, отслеживание, подсчет производительности, отказоустойчивость и все те сквозные проблемы, которые вы упомянули.

+0

Я понимаю, что это сквозная проблема, но это не что-то вроде ведения журнала, который «обертывает» вызов метода. Не представляется правильным считать успешный или неудачный вход с помощью подхода перехватчиков/декораторов АОП. Например, если я обрабатываю логику входа в действие контроллера (ASP.NET MVC), как я могу определить, что логин успешно или нет, чтобы увеличить счетчик? –

+0

@Robert Служба входа в систему, которую вы используете, предположительно возвращает значение, устанавливает какое-то состояние или бросает исключение, чтобы указать, был ли вход в систему успешным или нет. В вашем перехватчике вы просто проверяете это после вызова функции и действуете соответствующим образом. Это абсолютно подходящее использование перехватчиков в моем сознании. И, хотя перехватчики «обертывают» вызовы базовым объектам, вам, очевидно, не нужно делать что-либо до и после: в этом случае ваш перехватчик просто добавит к вызову. –

 Смежные вопросы

  • Нет связанных вопросов^_^