"UNIX domain sockets" vs "IP sockets over localhost"

Gena Makhomed gmm at csdoc.com
Fri Jul 11 03:11:06 MSD 2008


On Wednesday, July 9, 2008 at 12:03:24, Andrei Nigmatulin wrote:

>> AN> Тут в общем-то самое полезное, что может сделать nginx -
>> AN> сообщить о том, что ошибка произошла в момент подключения.
>> AN> Так как из "(134: Transport endpoint is not connected)
>> AN> while sending request to upstream" сложно понять,
>> AN> что на самом деле произошло.

>> возможно это такой подход - не заниматься интерпретацией сообщений
>> об ошибках, а только буквально сообщать в лог о том, что произошло.
>> аналогичный случай с другой ошибкой - http://sysoev.ru/nginx/docs/faq.html

AN> Нет, это не аналогичный случай.
AN> Тут ошибка ясна уже сразу после connect(),
AN> но попадает в лог не она, а другая, наведенная.

да. но о том, что "Transport endpoint is not connected" говорится явно.
причина этой другой ошибки скорее всего в том, что не удалось подключиться.

>> AN> Или перейти на tcp.
>>
>> а чем в такой ситуации может помочь переход на tcp?
>> в пределах localhost`а tcp ведь работает медленнее,
>> чем unix sockets - будет только больше 502 ошибок?

AN> tcp сокет вернет EINPROGRESS в этом месте,
AN> а значит соединение все-таки случится, но позже.

тогда - согласно POSIX стандарту система обязана установить соединение.
что в случае переполнения backlog`а уже невозможно, насколько я понимаю.

если рассматривать вариант

=======================
AN> В linux точно не возвращает ECONNREFUSED - сервер просто не отвечает на SYN,
AN> что дает соединению шансы установиться при очередном retransmittion.
=======================

это ничем не лучше увеличения размеров backlog`а.
тут только добавляется лишний overhead и timeouts

AN> А то, что tcp медленнее локальных сокетов вы сможете
AN> заметить только на тысячах или десятках тысяч rps.

AN> Зачем вам об этом вообще беспокоиться
AN> если php все равно съест 99.9% cpu ?

все-таки, лучше будет увеличить somaxconn до 1024,
эта рекомендация даже в FreeBSD handbook записана.

P.S. вот небольшое сравнение "UNIX domain sockets" и "IP sockets over localhost"
http://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html

насколько я понимаю, при достаточно большом значении somaxconn (1024 и больше)
"UNIX domain sockets" по всем параметрам будут лучше "IP sockets over localhost"
для выполнения задачи взаимодействия nginx frontend и anything localhost backend

-- 
Best regards,
 Gena






More information about the nginx-ru mailing list