Comments

Может, немного не по теме статьи, но замечу, что готовить сайт к нагрузке лучше начинать почти в самом начале цикла разработки, потому что «само» скорее всего не взлетит. А все предложенные улучшения лучше проверять нагрузочным тестированием, а не на пользователях, т.к. часто всплывают неочевидные нюансы реализации любого из предложенных методов.
Мысль про отсечение нежелательного трафика считаю наименее очевидной и потому самой полезной из статьи, спасибо.

Как сказал один умный человек (жаль не я):


чтобы сайт быстро работал он должен
1) отдавать ответ на 90% запросов из http-кэша (сервера и пользователя)
2) из оставшихся отдавать 90% из кэша приложения
3) из оставшихся отдавать 90% из кэша хранилища без чтения с диска
UFO landed and left these words here
Например, http-кэша пользователя, который посещает не только один сайт.

HTTP кэш работает так:
1) Пользователь переходит на страницу. Браузер проверяет не лежит ли она в локальном кеше (на диске) на компьютере пользователя (не на сервере), не прошла ли дата в заголовке Expires или Date+max-age. Если не прошла, то обращения на сайт даже не происходит.


2) Если же нет нужных заголовков, то идет запрос на сервер с заголовками If-modified-since и If-none-match, которые берутся из Last-modified и etag. Веб-сервер или прокси (в зависимости от заголовков кеширования) вполне могут отдать ответ 304 Not modified и браузер опять-таки подгрузит страницу из локального кеша на диске пользователя.


3) Эти же заголовки попадают в программу и программа может проанализировать запрос и решит вернуть 304 Not Modified, что опять заставит браузер показать пользователю страницу из локального кеша.


Для статического контента веб-сервер обычно сам выставляет заголовки, а для динамического этим должно заниматься приложение. Именно выставление правильных заголовков снижает в разы нагрузку на сайт и почти ничего не стоит приложению.


Увы 1, 2 и 3 не работает при вбивании руками адреса и намеренном F5. По оптимизации главных\посадочных страницу с персонализацией меня есть отдельная методика.


Вопрос: есть ли ограничения на кэши, не учитывая которых можно ухудшить быстродействие сайта?

Наверное есть, но я не встречал. LRU кэш при достаточно большом объеме памяти все равно будет работать, даже если вы не очень грамотно занимаетесь кешированием.


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

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

UFO landed and left these words here
Only those users with full accounts are able to leave comments. Log in, please.