Состояние приложения ASP.NET - создание счетчика «запросов в минуту»

1

Это должно быть легко, но мой мозг отказывается его обработать.

В ASP.net он прямо намерен создать глобальный "счетчик запросов страницы", используя состояние приложения. Просто добавьте переменную приложения:

Application("Hitcount") = Application("HitCount") + 1 

или что-то еще. Но как я могу измерить только те образы, полученные в прошлую минуту? Мне требуется постоянный счетчик обращений к приложениям за предыдущие 60 секунд, чтобы позволить мне управлять трафиком входящих запросов. Например, если текущая нагрузка превышает 1000 ударов в минуту, то перенаправление где-нибудь.

  • 1
    Вставьте в базу данных (или приложение) «запись попадания» вместе с отметкой времени. Тогда ваш запрос будет получать среднее количество запросов в минуту за последние 10 минут или около того.
  • 0
    Через Windows уже доступно много метрик (хотя они, как правило, в секунду, а не в минуту). Существует довольно много сайтов с рекомендациями, какие из них, вероятно, наиболее значимы и почему, например, Важные счетчики IIS7 .
Теги:
state
counter

2 ответа

2
Лучший ответ

Возможно, вы сможете сделать это, используя кеш памяти. Это вычислило бы число запросов на выполнение в течение 10 минут. Однако я не проверял производительность этого.

public BaseController() : base() 
{
    CacheItemPolicy policy = new CacheItemPolicy();
    policy.AbsoluteExpiration = DateTime.UtcNow.AddMinutes(10);

    MemoryCache.Default.Add(Guid.NewGuid(), "RequestCount", policy);
}

public int RequestCountPerMinute
{
    get
    {
        return MemoryCache.Default
           .Where(kv => kv.Value.ToString() == "RequestCount").Count() / 10;
    }
}
  • 0
    Ссылаясь на http://stackoverflow.com/a/16689455/1115360, мне кажется, что это не выдержит перезапуска пула приложений и, возможно, не будет чрезмерным давлением памяти.
  • 0
    @AndrewMorton Перезагрузка пула приложений не такая уж большая проблема. Это займет всего 10 минут, чтобы создать скользящее среднее. Если нас беспокоит только «последняя минута», вы можете изменить политику кэширования на 60 секунд.
Показать ещё 1 комментарий
2

Вероятно, вам лучше использовать инструмент анализа журналов, который даст вам статистику, анализируя журнал запросов, используя более широкое временное окно. Есть несколько хороших, которые позволяют переключаться между историческими окнами времени просмотра и просматривать ваш пиковый трафик в день, неделю, месяц.

Я рекомендую вам не вставлять запись о хите в базу данных, если ваш уровень сайта невелик. Избегайте связывать задержку запроса с базой данных, если вы не уверены, что служебные данные производительности превышают допустимые допуски. Инструментарий должен стремиться не влиять на сервер, который он измеряет, за исключением очень мягких накладных расходов, и именно поэтому анализ журнала после того, как этот факт работает хорошо.

Первый порядок ведения бизнеса - настроить IIS, чтобы добавить некоторые нестандартные поля, которые являются частью стандартного формата ведения журнала W3C.

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/676400bc-8969-4aa7-851a-9319490a9bbb.mspx?mfr=true

Изображение 174551

Один из способов настройки этих дополнительных полей - через диспетчер IIS, под → Журнал регистрации → Выбрать поля

Поля, подобные байтам recvd/sent и timepent, необходимы для использования одного из сторонних анализаторов для получения хороших диаграмм.

  • 0
    Как OP будет выполнять перенаправление на основе данных из журналов IIS?
  • 0
    @Shoe - Как перенаправления связаны с анализом трафика сайта?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню