Высокопроизводительный сайт ASP.NET (> 1000 запросов / сек) - PullRequest
16 голосов
/ 21 марта 2012

Я пишу высокопроизводительный Json API ASP.NET с более чем 1000 запросов / сек. Вся моя логика и обработка выполняются в IHttpHandler. Я измерил через класс секундомера, и обработчик завершил запрос примерно за 0,1 - 0,5 миллисекунды.

Но кажется, что IIS и / или другие HTTPHandlers (Модули?) Снижают производительность. Могу ли я измерить это как-то? Сколько накладных расходов будет вызывать запрос в IIS при настройке на лучшую производительность?

Поможет ли удаление всех этих HTTPHandlers или есть другие способы ускорить его? Мне не нужна большая часть ASP.NET Featureset кроме Session (может даже обойти это, если это даст значительное повышение производительности).

Ответы [ 2 ]

11 голосов
/ 21 марта 2012

Измерение производительности веб-сервера не является тривиальной задачей. Несколько вещей для рассмотрения:

  • Найдите фактическое узкое место. Это может быть память, доступ к диску, кеширование, доступ к базе данных, задержка в сети и т. Д. Воспользуйтесь профилировщиком памяти или другим профилировщиком производительности , чтобы узнать.
  • Используйте WireShark , чтобы найти разницу между продолжительностью запроса на вашем компьютере и продолжительностью выполнения кода.
  • Попробуйте другие конфигурации. Дайте ASP.NET больше памяти. Обновите тестовую систему. То есть переход от 8 ГБ / 2,5 ГГц с 600 запросами в секунду к 16 ГБ / 3,0 ГГц может дать 6500 запросов в секунду. Рост производительности часто не линейный. См. этот документ от Microsoft .
  • Рассмотрите возможность добавления дополнительной машины. Это может привести к повышению производительности до 50 или даже больше в зависимости от того, как вы его настроили. Снова посмотрите этот документ от MS.
  • Проверьте эти подсказки Джона Скита . В ветке комментариев также выявляются некоторые неочевидные потенциальные узкие места.

ПРИМЕЧАНИЕ 1. Знайте свои инструменты. ASP.NET выполняет каждый запрос в своем собственном потоке. Обмен потоками происходит быстрее, чем обмен процессами, но все же требует времени. Если другие обработчики занимают время из-за того, что находятся в цепочке запросов, полезно их отключить.

ПРИМЕЧАНИЕ 2. Одной из первоначальных побочных целей stackoverflow было создание сайта в ASP.NET, который имел бы высокую производительность на макс. 2 серверах и мог обрабатывать> 1 млн посетителей в час. Им удалось это сделать. Я думаю, что они написали некоторые посты на нем, но я не помню, где они.

5 голосов
/ 21 марта 2012

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

Что я успешно сделал, так это выяснил, какие HttpModules зарегистрированы (с помощью IIS Manager), и отключил все из них, от которых я мог бы избавиться.Стандартный конвейер ASP.NET имеет множество настроенных модулей и функциональных возможностей.

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

...