Оценки производительности сеанса ASP.NET

Я нашел много отличной информации, сравнивающей InProc, StateServer и SQLServer для управления состоянием ASP.NET, но я не могу найти сравнения производительности. Понятно, что InProc быстрее, чем StateServer, который, в свою очередь, быстрее, чем SQLServer, но не ясно, насколько быстрее. Я понимаю, что это будет сильно варьироваться в зависимости от приложения и окружающей среды, но относительное представление о том, как они сравниваются, было бы ценным.

Знаете ли вы какие-либо тесты, которые были выполнены, которые вы могли бы поделиться? или иметь личный опыт с этим? Спасибо!

Ответ 1

Там хорошие тесты DevOps Guys. http://www.slideshare.net/devopsguys/best-performing-aspnet-session-state-providers сравнение

  • ASP.Net In-Proc
  • Сервер состояний сеанса ASP.Net
  • Сервер ASP.NET Sql
  • CouchBase
  • MongoDb
  • RavenDb
  • Redis (этот, TheCloudlessSky, а не этот AngiesList)

AppHarbor также рекомендует memcached, но не имеет эталона. http://support.appharbor.com/kb/tips-and-tricks/using-memcached-backed-sessionprovider и предоставляет провайдера сеанса https://github.com/friism/Memcached-Providers

Ответ 2

У меня есть личный опыт, но нет контрольных показателей или фактических записанных показателей. Сначала мы создали сайт Asp.Net, в котором хранился пользовательский объект большего размера, чем обычный, с использованием метода InProc. Мы обнаружили, что размер объекта и характер наших библиотек обработки ошибок вызвали 2 нежелательных поведения. Первый - это рециркуляция пула приложений в произвольные интервалы во время процессов. Поскольку процесс w3wp.exe будет перерабатывать себя в середине потока, он по существу сбрасывает сеанс, и объект будет потерян. Это привело к тому, что другой код ударил и восстановил сеанс, и это увеличило задержку наших транзакций. Мы также обнаружили (хотя это была не ужасная проблема, и я только обнаружил, что при попытке отлаживать потеря памяти, которую я только что описал), что размер объекта в сеансе наряду с некоторыми из объектов, загружаемых в библиотеки для самой страницы, w3wp.exe для повторного ввода и повторного ввода страницы. Для небольших запросов, в которых задействовался только объект сеанса или эти объекты библиотеки, но не оба, не было никакого нечетного поведения поискового вызова в процессе.

При переходе от InProc к StateServer мы обнаружили немедленную отдачу от утилизации. Пул фактически закончил переработку меньше, и даже тогда, когда наши объекты сеанса остались в отдельной памяти. Мы также заметили, что это создало универсальное условие "только для библиотеки", как описано выше в отношении пейджинга, и мы не испытывали его снова (хотя, по общему признанию, я прекратил проверку после 1 месяца безотказной работы). В то время мы получали очень небольшую задержку при доступе к некоторым библиотекам баз данных, но когда мы обновлялись с 2.0 до 3.5, эти аномалии доступа полностью исчезли. Мы надеемся на подобное поведение, когда мы скоро обновляемся с 3.5 до 4.0.

Был протестирован тестовый сайт с использованием SQLServer в качестве контроллера состояния, и единственным найденным временем ожидания было начальное создание сеанса/хранилище. Последующие вызовы обновления/доступа к сеансу в SQL не привели к существенному отличию от параметра StateServer. У меня нет никаких показателей, но ни в одной из систем не было ничего, что указывало бы на разницу в поведении. Временные метки имели сопоставимые различия во всех аспектах. Преимущество, которое мы получили, хотя и имело редкий потенциал использования, состояло в том, что мы смогли напрямую связать нашу пользовательскую базу данных с сервером состояния сеанса и сравнить временные метки, статусы и другие специализированные переменные сеанса. У нас не было настоящей потребности в этой функции, и опция StateServer была уже в самом разгаре на наших производственных серверах, поэтому решимость оставить ее как есть.

В конце концов, это была не так много, как использование памяти, которая убедила нас сбросить InProc для StateServer. Преимущества скорости доступа определенно не перевешивали необходимость иметь данные в памяти в первую очередь.