среда, 14 августа 2013 г.

Кэш замедленного действия

Сделали релиз. Утро. Всё вроде работает нормально. Рабочий день заканчился, и вдруг начинают сыпаться ошибки. Дежурный администратор спешно ищет программистов, которые могут подключиться из дома и разобраться в проблеме... а пока находит, всё прекращается. И так - уже третий раз.

А дело в AppFabric Caching. Чтобы не было конфликтов, старый и новый релиз используют разные логические кэши. Но физически кластер один и тот же. Причем много статических данных, которые кэшируются надолго (сутки и даже больше). И вот что получается: новый релиз начинает постепенно заполнять свой кэш. Старый кэш уже не используется, но данные в нем так и лежат, потому что памяти полно.

Сайт работает замечательно. Мы радостные уходим домой. И в это самое время, часов через 6-7 после релиза свободная память в кластере заканчивается. Вроде не проблема - ведь у нас есть старый, уже неиспользуемый кэш. AppFabric должна просто автоматически очистить его объекты (сделать eviction). И она это делает. Но проблема в том, что eviction в AppFabric - это очень дорогой процесс по сравнению с обычной очисткой устаревших данных (expiration). Поэтому производительность кластера резко падает на некоторое время.

А все в это время бегают и кричат: "Как же так, шеф, мы же вроде всё проверили..." Решение простое: после очередного релиза вручную чистить уже ненужный кэш.

Интересно будет посмотреть, улучшилась ли ситуация в AppFabric 1.1.

Комментариев нет:

Ratings by outbrain