Я бы подумал, что мульти-веб-сервер и распределенный кэш второго уровня могут - и, вероятно, должны - сосуществовать.
Прежде всего, если мы возьмем в качестве примера memcached, он поддерживает хранение распределенных объектов, поэтому, если вы не используете это, вы можете переключиться на это. это работает.
Во-вторых, я предполагаю, что вы вводите ферму веб-серверов для ответа на растущие веб-запросы, что, в свою очередь, будет означать увеличение запросов на данные. Если вы убьете кеширование, то неважно, насколько вы оптимизируете свою базу данных, вы будете отбрасывать ее запросами. Таким образом, вы собираетесь улучшить время выполнения, но пока вы ждете, пока база данных вернет ваши данные.
Это особенно верно для случая, когда веб-узел 1 запрашивает набор данных A, а веб-узел 2 запрашивает набор данных A -> вы собираетесь выполнить один и тот же запрос дважды, тогда как при кэшировании второго уровня вы делаете это только один раз.
Итак, моя рекомендация:
Не убивайте свой кэш второго уровня. Вы уже потратили ресурсы на его реализацию и, отключив его, вы НЕ собираетесь улучшать производительность своего приложения. Даже один узел memcached будет работать быстрее, чем его вообще нет.
Do оптимизирует работу вашей базы данных. Это означает как со стороны базы данных (индексы, представления, sp-функции, функции, возможно, кластер с узлами только для чтения и только для записи), так и со стороны приложения (оптимизируйте ваши запросы, профилирование при отложенной / активной загрузке, не извлекайте данные, которые вам нужны не нужно, объединяйте несколько запросов в односторонние циклы через Future, MutliQuery, MultiCriteria)
Do оптимизируйте реализацию кэша второго уровня. Существуют наборы данных с бесконечной датой истечения, и поэтому вы запрашиваете у них только один раз базу данных, и есть наборы данных с короткими датами истечения, и, следовательно, дорогие запросы выполняются чаще. Оптимизируя ваши запросы и вашу базу данных, вы улучшите производительность запросов, но кэш второго уровня сохранит ваш скин при пиковой нагрузке, когда наборы данных с коротким сроком действия будут извлекаться из кэша чаще.
Если использование текстовых запросов является повседневной операцией, используйте полнотекстовые возможности базы данных или, что еще лучше, используйте независимый сервис, такой как Lucene.NET (который может быть интегрирован с NHibernate через NHibernate.Search)