Я использую google CDN с балансировщиком нагрузки google, у которого есть несколько серверных служб, и каждая из них имеет разные настройки для google CDN, как показано ниже.

service A: google CDN disabled (API server)
service B: google CDN enabled, 1day (Cache-Control: public, max-age=86400), cache-key: full URL
service C: google CDN enabled, 1year (Cache-Control: public, max-age=31536000), cache-key: full URL

Проблема в том, что сервис C получил запрос от балансировщика нагрузки Google, URL которого уже был запрошен вчера и обработан корректно. (статус 200, с заголовком Cache-Control и Content-Length)

Это происходит не всегда, например, сразу после возврата ответа с нашего сервера балансировщик нагрузки Google возвращает ответ без запроса. но прошло около суток, опять начинают спрашивать. обратите внимание, что я сделал запрос почти в том же географическом месте.

После некоторого googlng я уже нашел следующую ссылку на SO, в которой говорится, что Google CDN агрессивно вытесняет его содержимое (всего говорится, что размер кеша составляет всего 10 МБ), https://stackoverflow.com/a/54031267/1982282

И Google CDN не гарантирует соблюдение максимального возраста. Google Cloud CDN игнорирует максимальный возраст более 3600

Но причина вышеуказанных проблем действительно в этом агрессивном выселении?

На самом деле, наш сервер все еще находится в стадии разработки, поэтому не имеет большого объема трафика, а общий размер кеша составляет всего ~ 10 МБ или около того. но, по моему личному ощущению, я не могу поверить, что Google CDN удаляет содержимое так жестко (в течение 1 дня, размером более 10 МБ).

Может ли кто-нибудь поделиться своим опытом о частоте выселения Google CDN?

С уважением,

0
takehiro iyatomi 11 Дек 2019 в 05:45
2
Большинство CDN вытесняют контент, к которому обращались всего несколько раз в течение дня, если не раньше, поскольку кэши CDN предназначены для работы на пределе возможностей. Если ваш контент не является общедоступным / другие не имеют к нему доступа, вы обнаружите, что он довольно быстро удален. Это часто применяется, когда вы просто тестируете что-то и только вы имеете к нему доступ. Обратите внимание, что общий размер кеша не составляет 10 МБ — связанный ответ мог интерпретировать максимальный размер объектов (10 МБ для устаревших веб-серверов, что бывает редко!). Почти все современные веб-серверы поддерживают запросы диапазона, что означает, что максимальный размер объекта составляет 5 ТБ.
 – 
elithrar
17 Дек 2019 в 01:20

1 ответ

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

Следовательно, вы не должны ожидать, что запросы к исходным серверам остановятся, настроив один параметр, например max-age.

Как упоминается в документации Google Cloud CDN,

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

Исключенный контент может быть просрочен, а может и не быть. Установка срока действия не влияет на выселение.

По мере того, как кэши получают больше трафика, они также удаляют больше кэшированного контента.

Из-за природы кешей невозможно предсказать, будет ли конкретный запрос обслуживаться из кеша.

Говорить о каком-либо «агрессивном выселении» содержимого кэша было бы некорректно. Кэш Cloud CDN ведет себя именно так, как должен. Это поведение четко описано здесь:

Google Cloud CDN: обзор

Google Cloud CDN: сведения о кэшировании

Эта документация также объясняет две другие «проблемы», упомянутые здесь в отношении вопроса.

1
Community 20 Июн 2020 в 12:12
Спасибо за совет. но, как я писал в вопросе, я понимаю, что невозможно полностью контролировать истечение срока действия кеша с помощью максимального возраста или чего-то еще (также я уже читал предложенную ссылку), но по сравнению с другими CDN, такими как облачный фронт, Google CDN, кажется, слишком рано истечет срок действия кеша , поэтому я хочу узнать об опыте других людей, особенно о том, одинаково ли поведение для производственной среды или нет, которая имеет больший доступ, чем разработка. если у других людей также есть такая же продолжительность кеша 1yr-max-age в prod, это означает, что мы просто должны попытаться использовать другой, который «менее агрессивен».
 – 
takehiro iyatomi
16 Дек 2019 в 08:18