proxy cache stampede

Gena Makhomed gmm на csdoc.com
Чт Сен 22 20:55:03 UTC 2011


On 22.09.2011 22:50, Daniel Podolsky wrote:

>>> То, что nginx открывает больше одно коннекта к бекенду для контента,
>>> который все равно собирается закешировать - это плохо и неправильно.

>> Слова "греховно", "плохо", "неправильно" и т.п. обычно применяются
>> манипуляторами, когда они хотят добиться желаемого результата,
>> "надавив" таким образом на чувство вины и т.п. "кнопки".

> Это в техническом смысле плохо и неправильно.
> У кого хотите спросите, да хоть бы и у самого Игоря Сысоева :)

А вот если в техническом плане - то есть просто более или менее
оптимальные алгоритмы и их реализации в коде. Без лишних эмоций.

>>> Другое дело, что реализовывать busy locks в лоб через убогий ipc - это
>>> еще хуже и неправильней.

>> Пожалуйста, присылайте патч с хорошим и правильным решением проблемы.

> А его нет, правильного решения проблемы.

не понимаю, тогда о чем мы тут вообще и с какой целью сейчас говорим?
и что Вы называете словом "правильное решение проблемы" в таком случае?

> Есть очень плохое решение - сделать на shmem, и плохое - сделать в
> рамках одного воркера.

разрешите спросить, почему же решение через shared mem плохое ?
например, таким способом в nginx работает limit_req / limit_conn

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

"сделать в рамках одного воркера" - это вообще не решение.
(в смысле - это не solution и не workaround, толку будет 0)

> Так что я как раз очень понимаю, почему в nginx -
> и в большинстве кеширующих прокси - этого функционала нет.

потому что это очень мало кому (кроме CDN) надо в действительности.
статику - лучше раздавать напрямую с диска, а не качать с backend`а.

и реализация этой функциональности (необходимой только CDN) в nginx
спровоцирует очередную волну демпинга и обвал рынка услуг CDN, имхо.

особенно, если сделать это в nginx "правильно" и наиболее оптимально -
с поддержкой Range-запросов, когда в первую очередь будут скачиваться
с backend`а те фрагменты файла, которые запрашивал клиент, и если в кеше
не окажется каких-то фрагментов при новом запросе - то тянуть только их,
и хранить кеш файла в sparse file, докачивая отсутствующие части
по мере необходимости, при этом сразу отдавая клиентам те части,
которые уже скачаны, не дожидаясь пока полностью весь файл
будет получен с backend`а и записан в кеш.

у кого есть свободное время, желание и возможность
реализовать такой алгоритм в виде патча к nginx?..
вот и я о том же: 3-в-1 пока что нет ни у кого.

хотя, кроме демпинга и обвала рынка услуг CDN, это спровоцирует также
и ускорение роста показателей "increase in market share" на странице

http://news.netcraft.com/archives/2011/09/06/september-2011-web-server-survey.html
September 2011 Web Server Survey

хотя, и сейчас уже nginx занимает первое место
в мире по темпам роста показателя "market share":

Nginx had the biggest increase in market share,
with a growth of 0.36 percentage points.

но с другой стороны, - чем больше будет "market share"
у nginx, - тем больше появится пользователей, которые начнут
требовать "сделайте мне красиво", обвиняя при этом в греховности.

-- 
Best regards,
  Gena



Подробная информация о списке рассылки nginx-ru