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
|