Случайный срок действия кэша

13

Я экспериментировал со случайным временем истечения срока действия кэша, чтобы избежать ситуаций, когда отдельный запрос заставляет несколько вещей обновляться одновременно. Например, веб-страница может содержать пять различных компонентов. Если для каждого из них задано время ожидания в 30 минут, пользователь будет долго ждать каждые 30 минут. Таким образом, вместо этого вы устанавливаете их на произвольное время между 15 и 45 минутами, чтобы обеспечить максимальную загрузку только одного компонента для любой данной загрузки страницы.

Я пытаюсь найти какие-либо исследования или рекомендации по этой теме, например, оптимальные параметры дисперсии. Я помню, как видел одну статью о том, как Google (?) Использует эту технику, но не может ее найти, и, похоже, об этой теме написано мало.

mahemoff
источник
Можете ли вы перефразировать это как вопрос? Непонятно, что вы ожидаете от ответа.
Дерек
Хорошо, это сделано.
mahemoff

Ответы:

4

Некоторые документы:

haylem
источник
3
Спасибо за эти ссылки, но ни одна из них не упоминает случайность.
mahemoff
2
Я знаю, сколько лет этому вопросу, но Мэтью Нил из EstarOnline Limited сделал именно это (PDF): estaronline.com/images/assetimages/…
Ник Бедфорд,
@NickBedford Это ответ, который я искал. Ваш комментарий должен быть принятым ответом.
WhiteHotLoveTiger
0

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

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

Конечно, бывают случаи, когда многие вещи необходимо кэшировать одновременно, например, после запуска системы, если мы очистили весь кеш или повернули ключи кеша. В этом случае, как правило, это не так плохо, потому что компоненты быстро заполняются, и истечения срока действия впоследствии будут расходиться.

Если это проблема, есть несколько решений:

  • Просто выберите случайный срок действия кэша в пределах диапазона вместо фиксированной, например, случайное целое число от 15 до 90 минут вместо 60 минут.
  • Разрешить устаревшие ответы. То, что срок действия элемента кэша истек, не означает, что вы не сможете его использовать, если он все еще там. В зависимости от потребностей бизнеса, может быть приемлемо использовать его, если есть проблемы с производительностью при извлечении исходной версии после истечения срока действия. В HTTP это является целью "must-revalidate" (если true, это означает, что не следует использовать кэшированную версию после истечения срока действия).
mahemoff
источник