ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re[3]: keepalive от nginx к бакэнду. запрос фичи.



Здравствуйте, Andrew.
> еще раз: keepalive тут не причем и вам не поможет. вы его не правильно 
> понимаете.
Я с вами полностью и категорично не согласен. Боюсь вы все-же поверхностно 
ознакомились с моей проблемой.

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

   Проблема не такая уж и не понятная. Попробую ее нарисовать.

BACKEND создает пул из тредов, в каждом из них стоит mutex, один из
тредов, постоянно слушает сокет, остальные в это время висят на
мутексе.
thread 1 (accept)
thread 2 (mutex block)
...
thread 10 (mutex block)

Схема взаимодействия сейчас.

ka - keep-alive
cc - conection close
req - request по keep-alive

Юзеры посылают по 3 запроса, на одном keep-alive соединении
USER1<-ka-> NGINX <-cc-> BACKEND thread 1 (wrk with table 1)
     <-req->      <-cc-> BACKEND thread 2 (blocked on mutex table 1)
     <-req->      <-cc-> BACKEND thread 3 (blocked on mutex table 1)
USER2<-ka-> NGINX <-cc-> BACKEND thread 4 (wrk with table 2)
     <-req->      <-cc-> BACKEND thread 5 (blocked on mutex table 2)
     <-req->      <-cc-> BACKEND thread 6 (blocked on mutex table 2)
USER3<-ka-> NGINX <-wait-> Ждет, пока будет свободен хоть один тред.
... и так далее

Также посылаются 3 запроса от каждого юзера, но картина другая(именно
так бы мне хотелось)
USER1<-ka-> NGINX <-ka-> BACKEND thread 1 (wrk with table 1)
USER2<-ka-> NGINX <-ka-> BACKEND thread 2 (wrk with table 2)
USER3<-ka-> NGINX <-ka-> BACKEND thread 3 (wrk with table 3)
USER4<-ka-> NGINX <-ka-> BACKEND thread 4 (wrk with table 4)
все req находятся на ka в одной очереди от одного юзера.



и схема, которую бы хотелось в дополнение иметь.

USER1<-cc-> NGINX <-ka-> BACKEND thread 1 (wrk with table 1)
USER1<-cc-> NGINX идентификация по ip, куку(формальности) идут на этот 
keep-alive выше
USER1<-cc-> NGINX
USER1<-cc-> NGINX
USER2<-cc-> NGINX <-ka-> BACKEND thread 2 (wrk with table 2)
USER2<-cc-> NGINX идентификация по ip, куку(формальности) идут на этот 
keep-alive выше
USER2<-cc-> NGINX
USER2<-cc-> NGINX



-- 
С уважением,
 sjsoft                          mailto:sjsoft@xxxxxxxxxx




 




Copyright © Lexa Software, 1996-2009.