Вопрос: Unix-сокет против хоста TCP / IP: порт


Мог ли кто-нибудь, пожалуйста, описать мне плюсы и минусы использования файла сокета Unix vs tcp / ip localhost: порт при настройке служб на сервере (Ubuntu, FWIW)?

В этом конкретном случае это для сервера Python WSGI (uWSGI), но меня просто интересует вообще (например, я знаю, что вы можете настроить MySQL в обоих направлениях).

Я понимаю, что использование tcp / ip означает, что сервисы могут быть доступны другим машинам, но меня просто интересует, есть ли какие-либо компромиссы производительности при доступе к сервисам локально.

Приветствия.


38
2017-10-27 13:30


Источник


Оба блестящих ответа и действительно полезны - спасибо! :) - Ludo


Ответы:


Сокеты Unix немного быстрее, так как у вас нет tcp-служебных данных. Если вы понимаете, что потеря производительности - это вопрос загрузки сервера. Если у вас не очень высокая загрузка сервера, вы не узнаете его.

Если вы используете Jails (FreeBSD) или другую технологию виртуализации для разделения, например, MySQL-Server с веб-сервера, вы часто используете настройку tcp / ip вместо сокетов. Однако правила брандмауэра должны ограничивать доступ.

Вам нужно выяснить, находится ли ваша система под большой нагрузкой, так что сокет является обязательным или вы можете сосредоточиться на хорошем дизайне системы (разделяя службы), тогда решение tcp / ip будет лучше.

Поэтому сделайте длинный ответ коротким:

Да, есть разница в производительности, сокеты быстрее. Если вы не страдаете высокой нагрузкой на сервер, просто выберите то, что лучше подходит для дизайна вашей системы.


37
2017-10-27 13:38



Re: Розетки быстрее ... Разве они не оба разъема? - Bart Silverstrim
@Bart Silverstrim: нет, сокеты - сокеты; TCP имеет API-интерфейс, подобный сокету - Javier
Я считаю, что они называются «Unix-сокетами» и «Интернет-сокетами». (socket(AF_INET, SOCK_STREAM, ...)) - grawity
Я просто протестировал несколько mysql-запросов с помощью php-mysql (unix vs tcp-socket, как localhost). например, «выберите SQL_NO_CACHE 1», чтобы устранить факторы, не связанные с транспортом. не было различимой величины. У BOTH было в среднем 0,25 мс, наилучшее время для ОБА было 0,19 мс. - jens


Это в основном компромисс между производительностью и гибкостью. Сокеты домена Unix дают вам немного лучшую производительность, а сокет, подключенный к localhost, дает вам немного лучшую мобильность. Вы можете легко переместить приложение сервера в другую ОС, просто изменив IP-адрес с localhost на другое имя хоста.

Сокет домена Unix использует локальную файловую систему для создания механизма IPC между серверными и клиентскими процессами. Вы увидите файл в / var где-нибудь, когда сокет домена Unix подключен.

Если вы ищете исключительно решение для максимальной производительности, вы можете изучить IPC с общей памятью. Но это немного сложнее.


9
2017-10-28 00:31





Плюсы сокетов домена Unix.

  1. Доступ можно управлять через систему разрешений пользователя Unix либо путем установки разрешений на сам сокет, либо на сервере, который считывает имя пользователя подключаемого клиента.
  2. Меньше шансов непреднамеренно разоблачить сокет для внешнего мира. Например, если на сервере также запущен веб-прокси, который может непреднамеренно разрешать подключения к сокетам на localhost.

Недостатки сокетов домена Unix

  1. Не переносится в не-unix-системы.
  2. Может быть неудобно с корнями, тюрьмами или схожими

0
2017-10-19 15:23