Nginx + php-fpm как держать 5-10 тысяч запросов к серверу апи?
Есть два сервера, на одном бэк и фронт. На втором сервере находится API сервера по 24 ядра и 32 оперативки. Сервер с api принадлежит не мне, но есть возможность сделать какие то настройки через человека. На сервере api - nginx и php-fpm. Вроде как бэкенд на php.
На моем сервере node js асинхронно запрашивает данные с api и складывает из в базу. 200-300 запросов в секунду проходят нормально. Как только запросов становится больше - я получаю часто econnreset. Я использую axios и запросы по локальной сети через vlan 10Gbit. На сервере api домен подключен к локальному ip, со своего сервера я обращаюсь к домену по локальной сети, ip адрес домена указан в hosts, чтобы запросы шли в локалку. Поиск по интернету ничего толком не дал, можете подсказать в какую сторону копать и что посмотреть?
Вячеслав Правильный, для теста пусть сразу товарищ значения в конфиге умножит на 2. Там где 5 будет 10
Ну и если там на порт бинд, пусть на сокет переведёт
Смотреть listen и pm параметры
читай про горизонтальное масштабирование.
Оно как раз про это.
У меня пять дешёвых серверов держат нагрузку 20-24 тысячи запросов в секунду.
Здесь дело не в железе, а в правильной архитектуре
Дмитрий, сходить в базу, сходить на другой сервер и отдать это все. Не думаю что выделенный сервер на 24 ядра 48 потоков с 10Gb каналом может держать 300 запросов максимум… в любом случае посмотрю его логи и нагрузку, буду копать. Отпишу если найду
Вячеслав Правильный, я это к тому что если лезть в апи которое просто говорит Hello сервер способен держать и 500k rps. Судя по ошибке у вас сервер с апи похоже рвет с вами соединение. И первое что приходит в голову - что апи не справляется.
Перечисление ядер и канала конечно хорошо - но ничего не говорит о том что там АПИ делает когда ему надо ответить на ваш запрос. Если у него там какой нибудь seq_scan по таблице с парой миллиардов записей + file_sort на пару миллионов - то что тут сделают ваши каналы, и ваши ядра? Оно упрется в R/W
Дмитрий, нет, запросы простые. Самое затратное - сходить на другой сервер. Уже попросил сделать простой hello world api, чтобы затестить будет ли разница.
Дмитрий, по ошибке да, знаю что сервер рвет соединение. Но как бы понять что именно на сервере рвет соединение. Nginx, Php-fpm, система, либо коммутатор, или что то еще.
Вячеслав Правильный, ну дык это будет в логах сервера с api. Стоит начать с логов nginx и посмотреть что он говорит когда вы получаете connection reset