# конспект · шаг 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 |
Три ошибки, которые дороже всего
- Кеширование персональных ответов без
bypass/no_cache- чужая корзина уедет соседу. - Ключ кеша с
$uriвместо$request_uri- страницы с параметрами склеиваются. 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вредит, а не помогает.
Комментарии
Пока нет комментариев. Будь первым!
Оставить комментарий