Кэширование запросов на уровне веб-приложений ColdFusion

У нас есть несколько веб-серверов, на каждом из которых работает одна версия ColdFusion. Перед кластером находится балансировщик нагрузки.

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

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

Надеюсь, я ясно выразился :)

Ваше здоровье, Чиаран

За пределами сигналов Angular: Сигналы и пользовательские стратегии рендеринга
За пределами сигналов Angular: Сигналы и пользовательские стратегии рендеринга
TL;DR: Angular Signals может облегчить отслеживание всех выражений в представлении (Component или EmbeddedView) и планирование пользовательских...
Sniper-CSS, избегайте неиспользуемых стилей
Sniper-CSS, избегайте неиспользуемых стилей
Это краткое руководство, в котором я хочу поделиться тем, как я перешел от 212 кБ CSS к 32,1 кБ (сокращение кода на 84,91%), по-прежнему используя...
1
0
1 687
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы можете попробовать memcached.

Спасибо. Я проверю это - у меня миллион и один вопрос по этому поводу, но сначала я прочитаю FAQ :-P

Ciaran Archer 15.12.2008 19:40

Мы также внимательно изучаем EHCache (ehcache.sourceforge.net) как альтернативу в процессе.

Ciaran Archer 22.12.2008 14:24

Я бы посмотрел на memcached - здесь есть проект с открытым исходным кодом для интеграции в ColdFusion: cfmemcached.

Если вы используете Railo, я слышал, что у него также есть «кластерный» прицел.

Если ни один из них не доступен или вам не нравится, вы можете в качестве альтернативы настроить один из своих серверов для обработки запросов, которые вы хотите кэшировать, а затем получать их с этого сервера напрямую через веб-службу. Таким образом, вы можете кэшировать их только на одном сервере, что уменьшит объем памяти, занимаемый кластером, а также снизит частоту доступа к серверу db. Однако вы можете вывести сервер, который обрабатывает кэширование запросов, из кластера и просто выделить его для кэширования запросов и всего остального, что вы хотите разгрузить с передних компьютеров, в то время как остальные обрабатывают внешний трафик.

вы можете выполнять кластеризацию и разделять область приложения между серверами, но вы должны использовать корпоративную версию ColdFusion. Подробнее здесь: http://livedocs.adobe.com/coldfusion/7/htmldocs/00001774.htm

Область сеанса может быть сгруппирована в ColdFusion, если вы включите сеансы j2ee. Но все, что делает кластерная область, - это копирует данные на серверы. Таким образом, запросы все равно будут скопированы на все 3 сервера. Так вы вернетесь туда, где находитесь сейчас.

Однако я бы просто использовал атрибут CachedWithin cfquery вместо использования области приложения. Таким образом, вы позволяете движку CF выполнять фактическое управление кешем. Сохранение памяти из-под контроля, и вы не добавляете накладных расходов на копирование большого количества данных между серверами.

Что касается использования cachedWithin: основная проблема с кешированием на сервере заключается в том, что он по-прежнему означает, что один и тот же запрос выполняется много раз к базе данных. Решили использовать EHCache на каждом из наших веб-серверов, поскольку он позволяет частичное кэширование страниц и может быть расширен до централизованного сервера кеширования, например, memcached.

Ciaran Archer 17.01.2009 16:01
Ответ принят как подходящий

Решили использовать EHCache на каждом из наших веб-серверов, поскольку он позволяет частичное кеширование страниц и может быть расширен до централизованного сервера кеширования, например, memcached. Пока очень доволен.

Большое спасибо за все предложения!

Другие вопросы по теме