Может ли кто-нибудь описать мне плюсы и минусы использования файла сокета Unix по сравнению с tcp / ip localhost: port при настройке служб на сервере (Ubuntu, FWIW)?
В данном конкретном случае это для сервера Python WSGI (uWSGI), но меня интересует только общее (например, я знаю, что вы можете настроить MySQL обоими способами).
Я понимаю, что использование tcp / ip означает, что службы могут быть доступны другим машинам, но меня просто интересует, есть ли какие-либо компромиссы производительности при доступе к службам локально.
Ура.
Сокеты Unix работают немного быстрее, так как у вас нет tcp-overhead. Если вы понимаете, что эта потеря производительности связана с нагрузкой на сервер. Если у вас не очень высокая загрузка сервера, вы этого не узнаете.
Если вы используете Jails (FreeBSD) или какую-либо другую технологию виртуализации для разделения, например, MySQL-сервер с веб-сервера, вы часто используете настройку tcp / ip вместо сокетов. Однако правила брандмауэра должны ограничивать доступ.
Вам нужно выяснить, находится ли ваша система под большой нагрузкой, поэтому сокет является обязательным, или вы можете сосредоточиться на хорошем дизайне системы (разделение служб), тогда решение tcp / ip будет лучше.
Так что сделайте длинный ответ коротким:
Да, разница в производительности есть, сокеты быстрее. Если вы не испытываете высокой нагрузки на сервер, просто выберите то, что лучше подходит для вашей системы.
По сути, это компромисс между производительностью и гибкостью. Сокеты домена Unix дадут вам немного лучшую производительность, в то время как сокет, подключенный к localhost, дает вам немного лучшую переносимость. Вы можете легко перенести серверное приложение на другую ОС, просто изменив IP-адрес с localhost на другое имя хоста.
Доменный сокет Unix использует локальную файловую систему для создания механизма IPC между сервером и клиентскими процессами. Вы увидите файл где-нибудь в / var, когда будет подключен сокет домена Unix.
Если вы ищете исключительно решение с максимальной производительностью, вы можете изучить IPC с общей памятью. Но это немного сложнее.
Плюсы доменных сокетов Unix.
Минусы доменных сокетов Unix