Сделали релиз. Утро. Всё вроде работает нормально. Рабочий день заканчился, и вдруг начинают сыпаться ошибки. Дежурный администратор спешно ищет программистов, которые могут подключиться из дома и разобраться в проблеме... а пока находит, всё прекращается. И так - уже третий раз.
А дело в AppFabric Caching. Чтобы не было конфликтов, старый и новый релиз используют разные логические кэши. Но физически кластер один и тот же. Причем много статических данных, которые кэшируются надолго (сутки и даже больше). И вот что получается: новый релиз начинает постепенно заполнять свой кэш. Старый кэш уже не используется, но данные в нем так и лежат, потому что памяти полно.
Сайт работает замечательно. Мы радостные уходим домой. И в это самое время, часов через 6-7 после релиза свободная память в кластере заканчивается. Вроде не проблема - ведь у нас есть старый, уже неиспользуемый кэш. AppFabric должна просто автоматически очистить его объекты (сделать eviction). И она это делает. Но проблема в том, что eviction в AppFabric - это очень дорогой процесс по сравнению с обычной очисткой устаревших данных (expiration). Поэтому производительность кластера резко падает на некоторое время.
А все в это время бегают и кричат: "Как же так, шеф, мы же вроде всё проверили..." Решение простое: после очередного релиза вручную чистить уже ненужный кэш.
Интересно будет посмотреть, улучшилась ли ситуация в AppFabric 1.1.
А дело в AppFabric Caching. Чтобы не было конфликтов, старый и новый релиз используют разные логические кэши. Но физически кластер один и тот же. Причем много статических данных, которые кэшируются надолго (сутки и даже больше). И вот что получается: новый релиз начинает постепенно заполнять свой кэш. Старый кэш уже не используется, но данные в нем так и лежат, потому что памяти полно.
Сайт работает замечательно. Мы радостные уходим домой. И в это самое время, часов через 6-7 после релиза свободная память в кластере заканчивается. Вроде не проблема - ведь у нас есть старый, уже неиспользуемый кэш. AppFabric должна просто автоматически очистить его объекты (сделать eviction). И она это делает. Но проблема в том, что eviction в AppFabric - это очень дорогой процесс по сравнению с обычной очисткой устаревших данных (expiration). Поэтому производительность кластера резко падает на некоторое время.
А все в это время бегают и кричат: "Как же так, шеф, мы же вроде всё проверили..." Решение простое: после очередного релиза вручную чистить уже ненужный кэш.
Интересно будет посмотреть, улучшилась ли ситуация в AppFabric 1.1.
Комментариев нет:
Отправить комментарий