proxy cache stampede

Vladimir Stavrinov vstavrinov на gmail.com
Ср Сен 21 15:13:23 UTC 2011


Добрый вечер.

Не знаю бага это или нет, но проблема не хорошая. Решения в конфигурации
я не нашёл, поэтому и пишу сюда. Сам факт хорошенько проверил
экспериментальным путём. Проблема лучше наблюдается на больших файлах,
потому что в этом случае достаточно времени для наблюдения.

Суть проблемы. Если несколько независимых клиентов одновременно (или с
некоторым интервалом) запрашивают один и тот же контент, которого нет
кэше (важна не одновременность, а отсутствие данных в кэше в момент
запроса), то для каждого такого запроса создаётся отдельный файл во
временной директории и устанавливается отдельное соединение с backend
сервером.  Даже если все эти клиенты досрочно оборвут соединение, то всё
равно каждый такой файл будет закачан с backend сервера на наш
кэширующий прокси полностью, причём каждый по своему отдельному
соединению, то есть параллельно. В итоге и объём файлов на диске и, что
ещё более важно - результирующий трафик умножаются на количество
клиентов (запросов). Другими словами мы многократно закачиваем одни и те
же данные. Не трудно себе представить, что будет если количество таких
запросов будет расти. А если к этому добавить очевидную возможность
одновременного существования нескольких таких групп (для разных
запросов), то становится совсем плохо.

Пробовал решить эту проблему директивой

proxy_cache_use_stale updating;

но это не помогает, что логично, ибо этот параметр регулирует обновление
уже существующих данных в кэше, а у нас проблема возникает тогда, когда
этих данных ещё нет. 

Не знаю, может я что то упустил и эту проблему можно решить средствами
конфигурации, тогда напишите пожалуйста, как это делается. Хотя на мой
взгляд, здесь нечего регулировать: такой проблемы просто не должно быть
не зависимо от конфигурации.

P.S. Проверено на версиях 1.1.0 и 1.1.2

-- 

***************************
##  Vladimir Stavrinov
##  vstavrinov на gmail.com
***************************



Подробная информация о списке рассылки nginx-ru