1. 1

# конспект · шаг 1 из 1

Конспект раздела: скорость

выжимка - её можно унести в заметки

Раздел про то, как отдать то же самое быстрее и дешевле.

Три рычага

СЖАТИЕ        меньше байт по проводу          gzip / gzip_static / brotli
ОТДАЧА        меньше работы на байт           sendfile, aio, directio, limit_rate
КЕШ ОТВЕТОВ   меньше походов к бэкенду        proxy_cache

Что где настраивают

Задача Директивы
текст жать, картинки нет gzip_types, gzip_min_length, gzip_vary on
не жать на лету gzip_static on + .gz рядом с файлом
большие файлы aio threads, directio, output_buffers
один клиент не съедает канал limit_rate_after + limit_rate
не ходить к бэкенду каждый раз proxy_cache + proxy_cache_valid
видеть, работает ли кеш $upstream_cache_status в лог и в заголовок

Что показал стенд

опыт результат
gzip on и больше ничего не жмётся ни JS, ни JSON: в gzip_types только text/html
уровни 1 / 5 / 9 на 300 КБ текста 111 667 / 85 355 / 79 704 байта за 5,9 / 12,7 / 39,3 мс
запрос с Via без gzip_proxied сжатие выключено даже для файла с диска
limit_rate 512k с порогом и без 1,00 с против 3,01 на файле в 2 МБ
proxy_cache без proxy_cache_valid три MISS подряд
ключ по $uri, запрос ?page=2 HIT с содержимым первой страницы
бэкенд лёг, use_stale против его отсутствия 200 STALE против 502
десять одновременных запросов, cache_lock 1 обращение к бэкенду вместо 10

Три ошибки, которые дороже всего

  1. Кеширование персональных ответов без bypass/no_cache - чужая корзина уедет соседу.
  2. Ключ кеша с $uri вместо $request_uri - страницы с параметрами склеиваются.
  3. gzip_vary off - промежуточный кеш отдаст сжатый ответ клиенту, который сжатие не понимает.

Измерение

$  команда
curl -o /dev/null -s -w 'ttfb=%{time_starttransfer} total=%{time_total}\n' https://shop.local/big.iso
curl -sI https://shop.local/api/catalog | grep -i x-cache-status

Сначала измеряем, потом настраиваем: aio и directio на сайте с картинками не дают ничего, а gzip_comp_level 9 стоит процессора ради единиц процентов.

Чек-лист: что ты должен уметь объяснить

  • Шесть причин, по которым «gzip включён, а ответ не сжат».
  • Зачем нужен Vary: Accept-Encoding и что бывает без него.
  • Чем proxy_cache_valid отличается от inactive.
  • Почему без bypass и no_cache кеш опасен.
  • Когда directio вредит, а не помогает.

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.