Это может выглядеть как уже обсужденный / ответ на вопрос. Но я специально ищу информацию, на которую нигде не мог найти четкого ответа.
У меня есть установка Nginx + php-fpm, которая использует сокеты unix, чтобы сообщить Nginx о бэкэнд-процессах php-fpm fastcgi. Недавно я слышал, что соединения на основе сокетов unix не так масштабируемы, как соединения на основе TCP. Не уверен, что здесь является ограничивающим фактором, особенно когда я запускаю все с одного и того же хоста.
Я могу увеличить максимальный дескриптор файла для каждой системы или пользователя (nginx). Я также могу увеличить этот лимит для рабочих процессов nginx. Максимальный дескриптор файла - ограничивающий фактор?
У меня очень мало веб-сайтов, настроенных в этой настройке, и максимальное количество сокетов (по одному на веб-сайт). Я использую менее 50. Есть ли ограничение на максимальное количество одновременных подключений на сокет, когда несколько потоков nginx общаются с несколькими экземплярами php-fpm в бэкэнде при высокой нагрузке? Или что на самом деле может ограничить сокет от разрешения этих подключений, если параллелизм очень высок?
Существуют ли какие-либо другие факторы, которые могут повлиять на производительность, такие как блокировки, производительность диска io и т. Д.?
Я слышал, что соединения на основе сокетов unix не так масштабируемы, как соединения на основе TCP
Все наоборот. Сокеты Unix более масштабируемы, чем TCP-соединение. Потому что, когда вы используете TCP, вы должны использовать весь сетевой стек. Даже если вы находитесь на одной машине, каждый пакет нужно инкапсулировать и декапсулировать. С сокетами Unix вы выполняете процесс для обработки связи.
Однако во многих случаях неиспользование TCP-пакетов - это просто микрооптимизация, реальное узкое место где-то еще.