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