Я использую AppFabric для кэширования на моем сайте.Недавно мы добавили больше хостов в кластер кеша, и, вероятно, мы добавим еще больше в [среднем] будущем, мы решили перенастроить кластер как кластер большой , а не как маленький.Сейчас мы наблюдаем некоторые неприятные побочные эффекты, а именно: AppFabric потребуется много времени, чтобы вернуться после перезагрузки.
Хорошо, так что если вы зашли так далеко, я привлеку ваше внимание и могу сказать,ты полная история: о).После перезапуска AppFabric всегда требовалось много времени, но мы смогли настроить и кодировать это так, чтобы наши пользователи не увидели никаких неблагоприятных последствий.В файле web.config у нас есть:
<dataCacheClient channelOpenTimeout="5" requestTimeout="1000" >
<!-- cache host(s) -->
<hosts>
<host name="localhost" cachePort="22233"/>
</hosts>
</dataCacheClient>
, что (если я неправильно понял документацию) приведет к тому, что клиент AppFabric вызовет исключение, если он не получит ответ в течение 1 секунды.В нашем коде мы справляемся с этим и возвращаемся к чтению данных, которые мы пытаемся прочитать непосредственно из базы данных:
public object Get(object key)
{
if ( key == null )
{
return null;
}
try
{
return cache[key.ToString()];
}
catch ( CacheException ex )
{
if ( ex.ErrorCode == DataCacheErrorCode.ConnectionTerminated || ex.ErrorCode == DataCacheErrorCode.RetryLater || ex.ErrorCode == DataCacheErrorCode.Timeout )
{
// Calling code should try reading from the database instead
return null;
}
else
{
throw;
}
}
}
Поскольку мы начали использовать конфигурацию большого кластера, это как если бы атрибут requestTimeoutзаписи конфигурации dataCacheClient не имеет никакого влияния.После ввода команды Restart-CacheCluster наш веб-сайт перестает отвечать на запросы в течение 3–5 минут, что означает, сколько времени в настоящее время требуется кластеру для повторного запуска после перезагрузки.
Чтобы устранить эту проблему, я сделал несколькотестирование на моей локальной машине, чтобы увидеть, сколько времени потребовалось загрузить домашнюю страницу веб-сайта после полного обновления ([ctrl] [f5]) с AppFabric в различных состояниях.Ниже приведены результаты (среднее время в секундах):
Малый кэш увеличен: 11,4462
Малый кэш отключен: 12,4346
Малый кэш перезапущен: 11,5794
Малый кэш перезапущен [1]: 14.99
Большой кэш увеличен: 11.5534
Большой кэш выключен: 16.576
Большой кэш перезапущен: 59.4582
Большой кэш перезапущен [1]: 62.9526
Как видноИсходя из результатов, приведенных выше, существует значительная разница между временем, которое требуется для нормальной загрузки домашней страницы, и после перезапуска AppFabric.
Если вам интересно, почему мы вообще перезапускаем кластер, мы иногдахотите аннулировать кэш с целью принудительного изменения значений, таких как параметры, которые имеют очень большой TTL, для немедленного вступления в силу.
[1] При повторном тесте повторного запуска атрибуты channelOpenTimeout и requestTimeout удаляются из сети..config