Re: Есть ли смысл использовать что-то кроме http/1.1, при соединении с бэкэндом?

S.A.N nginx-forum на forum.nginx.org
Пт Июн 3 23:26:38 UTC 2016


> Можете расшифровать выражение "сокет не простаивал в пустую"?  Чем
> грозит
> сокет, который простаивает впустую?  Что по вашему такой сокет
> потребляет:
> ресурсы процессора, электричество, солярку, деньги?

Сокет который простаивает в пустую (ждет ответа на запрос) потребляет память
приложения, мы используем libev.
Один сокет требует, создания одного WatcherObject и одного HandlerMethod,
это не много, но они 70% времени ничего не делают, потому что время
выполнения запроса в десятки раз превышает время передачи данных по
локальному сокету.

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

Зачем открывать новое соединения, если в бекенд приложении уже и так есть
100 busy сокетов, которые ничего не делают, потому что ждут ответа на
предыдущий запрос, это по сути blocking mode сокета, но созданный на уровне
HTTP/1.х, хотя сокет non-blocking mode.

Мультиплексирование убирает понятие socket busy, бекенд приложению будет
достаточно иметь в десятки раз меньше открытых сокетов (в десятки раз меньше
WatcherObject и HandlerMethod), я уже приводил пример в другой теме, повторю
его снова:

1 запрос выполняется за 100ms 

Если послать 30 последовательных запросов в 1 соединение мы получим 30
ответов за 3000ms 
Если послать 30 запросов в 30 разных соединениях мы получим 30 ответов за
100ms 
Если послать 30 асинхронных запросов в 1 соединение мы получим 30 ответов за
100ms 

В первом варианте, 1 сокет находится в режиме busy 3000ms 
В втором варианте, 30 сокетов находится в режиме busy 100ms 
В третьем варианте, 1 сокет находится в режиме busy ~0ms 

Вопрос какой из трех вариантов более эффективно использует ресурсы?

Мультиплексирование - нужно всем бекенд приложениям, у которых есть
временное окно между запросом и ответом, чем больше это временное окно, тем
больше позитив эффекта от мультиплексирование.

Сокеты - это как нефть, её много, но ресурс ограничен
Мультиплексирование - это как сланцевая нефть, она дает возможность
использовать ту нефть, которая ранее считались не пригодная к использованию.

Posted at Nginx Forum: https://forum.nginx.org/read.php?21,267298,267369#msg-267369



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