Комментарии 21
Мемоизация функций
Это скорее всего называется cache aside.
Не рассмотрены:
— кэширование DNS ответов на клиенте и на промежуточных серверах.
— keep-alive соединения от клиента к серверу (не совсем кэширование но принцип похож — повторное использование соединения вместо создания нового соединения).
— кэширование дескрипторов открытых файлов для случая когда сервер отдает много статики с диска.
— кэширование выдачи stat().
— кэширование дерева директорий на диске
— кэширование информации о клиентском хосте и о параметрах канала от клиента до сервера (так называемый hostcache).
— кэширование контента после сжатия (gzip).
Заранее признателен за ответ.
Промежуточные сервера у провайдеров обычно кэшируют ответы. Причем продолжительность жизни ответа в кэше может быть как больше так и меньше TTL, настроенного на авторитативном сервере. Такое положение вещей создает определенную боль при переезде сайтов с одного хостинга на другой и при прочих подобных мероприятиях.
В целом ситуация будет такая. У youtube.com TTL = 30 минут. Т.е. величина средняя и вероятность запроса на разрешение имени высокая. Но учитывая популярность youtube можно сказать, что в DNS кэше провайдера нужная информация будет (именно кэширование инфы, а не конкретных пакетов) и резолвинг произойдет крайне быстро. Поэтому на уровне DNS можно считать, что задержки не будет.
Далее попадаем на уровень уже самого ролика. Если у провайдера кэширующие сервера есть (а обычно это так и есть), то ролик упадет в кэш конкретного провайдера. После чего будет уже быстро раздаваться клиентам этого провайдера. Очень популярный ролик вероятно упадет в кэш провайдеров всего города. Кроме того есть и другие уровни кэша, чуть выше. Это кэш на магистрали. Еще есть Google Global Cache который могут себе ставить провайдеры.
Надеюсь ответил на все пункты понятно.
P.S. А почему интересует данный вопрос?
Если это делает кэш-сервер, то на нём должно лежать много вариантов одного ролика, грубо говоря. Не хочу Вас обидеть, но картина наверное намного сложнее, чем Вы описали. Не хочу Вас напрягать, но был бы признателен за ссылку на детальное описание этих процессов.
Ну а интересно мне это потому, что хочется понять, как работают приборы, которые нас окружают.
Т.е. какой-то из серверов начинает отправлять другие пакеты
Не совсем так. Инициатор соединения клиент, а не сервер. Он и определяет требуемый ему range. А сервер уже отдает ровно то, что от него просят.
Если это делает кэш-сервер, то на нём должно лежать много вариантов одного ролика
Не совсем так. На нем много кусков многих роликов. Варианта «вот ролик Х в наборе качества Z, W» обычно нет. Хотя конечно при желании склеить куски одного потока в единственный файл можно.
признателен за ссылку на детальное описание этих процессов
Такого описания не может быть в принципе, т.к. какая стратегия применяется кэш сервером зависит собственно от деталей реализации конкретного кэш сервера. И для детального понимания нужно просто читать документацию на конкретное используемое ПО.
Варианта «вот ролик Х в наборе качества Z, W» обычно нет
Я часто наблюдаю, что качество показываемого видео на глазах меняется. Это значит, я думаю, клиент (app) в телевизоре начинает получать контент (наверное типа mp4) с фреймами другого разрешения. А это, в Вашей терминологии кусок N «ролика Х в качестве Z».
Такого описания не может быть в принципе,
Описание должно быть, поскольку создатели серверной инфраструктуры и разработчики клиентов по показу стриминга должны были выработать общий стандарт.
«Будем искать», как говаривал Семён Семёныч.
с фреймами другого разрешения
Ну мы же начали с ютуба, так? Так. И там не «с фреймами другого разрешения». Потому что адекватный гугл понимает, что такой поток кэшировать сложнее, чем блоки явно заданные конкретными url.
клиентов по показу стриминга должны были выработать общий стандарт.
Стандарты есть. Например долгоживущий RTSP. Только на практике все сиииильно и на порядок сложнее, чем некий общий стандарт. Рекомендую поискать статьи/видео от Макса Лапшина.
Так же есть webm. Гугл.
Этот кэш используется, когда в ответе сервера содержатся правильно настроенные HTTP-заголовки, указывающие браузеру на то, когда и на какое время он может кэшировать ответ сервера.
Это единственное, что можно сделать своими руками, если используешь чужую инфраструктуру. Вот про это хотелось бы узнать побольше: стандарты, инструменты, best practices.
Был бы очень признателен за ссылки.
что в мире HTTPS кэширование за пределами сервера не происходит.
Это не так. Потому что кэширование на клиенте как было и осталось. В FF в этом легко убедится посмотрев содержимое кэша:
about:cache?storage=disk&context=
в котором видно много Https ресурсов.
в мире HTTPS кэширование за пределами сервера не происходит
Происходит если кэширующий прокси терминирует TLS соединение. Так работает Cloud Flare по крайней мере.
Кэширование и производительность веб-приложений