proxy cache stampede

Maxim Dounin mdounin на mdounin.ru
Чт Сен 22 23:41:00 UTC 2011


Hello!

On Fri, Sep 23, 2011 at 03:04:27AM +0400, Daniel Podolsky wrote:

> > не понимаю, тогда о чем мы тут вообще и с какой целью сейчас говорим?
> > и что Вы называете словом "правильное решение проблемы" в таком случае?
> Не нервничайте так :) Вы и не обязаны меня понимать...
> 
> > разрешите спросить, почему же решение через shared mem плохое ?
> > например, таким способом в nginx работает limit_req / limit_conn
> Одно дело - пяток переменных для пятка локешенов, определенных
> администратором, и другое - флаг для каждого
> проксируемого-в-настоящий-момент-и-кешабельного-URL.
> А ведь в shmem даже банальный hash не запихнешь.

Rbtree запихнёшь, а hash и не нужен - hash в nginx'е это 
неповоротливая структура, создающаяся очень не быстро (но 
оптимально) и предназначенная для быстрого доступа к данным, 
известным на этапе чтения конфига.

Собственно, limit_req/limit_conn именно на rbtree и работают.  И 
там не "пяток переменных", там ограничения по произвольному ключу.

С shmem совсем другая проблема: нет нормального способа быстро и с 
малыми затратами сообщать в соседние воркеры о новых событиях 
(i.e. "файл такой-то появился наконец в кеше, забирайте кому 
надо").

[...]

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

Видимо, именно так оно и будет на начальном этапе.  Для случая 
одного рабочего процесса это полностью решает проблему, для N 
рабочих процессов - ограничивает числом N соответственно.

Maxim Dounin



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