Как настроить Nginx и php-fpm для обработки от 5 до 10 тысяч запросов к серверу API?

Как можно улучшить производительность асинхронных запросов с использованием модуля axios, когда увеличивается количество запросов в секунду и появляются ошибки econnreset? Имеется два сервера: один с бэкендом и фронтендом, а другой с API сервером, которому принадлежат 24 ядра и 32 ГБ оперативной памяти. У меня есть возможность настроить сервер API через другого человека. Я использую локальную сеть через vlan 10Gbit для запросов, мой сервер обращается к серверу API по локальному IP-адресу домена, указанного в hosts файле для перенаправления запросов в локальную сеть. Однако, при увеличении количества запросов возникают ошибки econnreset. Я уже искал информацию в интернете, но ничего полезного не нашел. Пожалуйста, подскажите, в какую сторону стоит поискать причину и какие меры можно принять для решения проблемы.
  • 3 октября 2023 г. 21:47
Ответы на вопрос 2
Чтобы настроить Nginx и php-fpm для обработки от 5 до 10 тысяч запросов к серверу API, вам понадобится выполнить следующие шаги:

1. Увеличьте количество worker-процессов в файле конфигурации Nginx. Это позволит Nginx обрабатывать больше параллельных соединений. Найдите и измените директиву `worker_processes` в файле конфигурации Nginx (обычно `/etc/nginx/nginx.conf`). Рекомендуется установить количество worker-процессов, равное количеству ядер вашего сервера. Например, если у вас 24 ядра, вы можете установить значение `worker_processes 24;`.

2. Настройте значение `worker_connections` в файле конфигурации Nginx. Этот параметр ограничивает количество одновременных соединений, которые может обрабатывать каждый worker-процесс. Найдите и измените директиву `worker_connections`, например, `worker_connections 1024;`. В зависимости от вашей конкретной нагрузки, вам может понадобиться увеличить это значение.

3. Оптимизируйте настройки php-fpm. Откройте файл конфигурации php-fpm (обычно `/etc/php-fpm.conf` или `/etc/php/7.4/fpm/php-fpm.conf`) и найдите или добавьте следующие директивы:
```
pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
```
Эти настройки позволят php-fpm работать с большим количеством параллельных запросов.

4. Установите оперативную память для php-fpm. В зависимости от нагрузки вашего сервера, вам может потребоваться увеличить `pm.max_children` или `pm.max_spare_servers`, чтобы обеспечить достаточное количество обработчиков для запросов. Также учтите, что увеличение этих значений может потребовать больше оперативной памяти.

5. Включите and используйте кэш Nginx. Настройте проксирующие кэш-заголовки и кэш на своем сервере Nginx, чтобы уменьшить нагрузку на ваш API сервер.

Чтобы улучшить производительность асинхронных запросов с использованием модуля axios и избежать ошибок econnreset, можно предпринять следующие действия:

1. Увеличьте количество worker-процессов и соединений, как описано выше.

2. Проверьте настройки вашего API сервера и убедитесь, что он способен обрабатывать большое количество одновременных запросов. Увеличение параметров в php-fpm может помочь в этом случае.

3. Проверьте настройки сети. Убедитесь, что локальная сеть и ваш сервер API настроены правильно и обеспечивают достаточную пропускную способность для обработки большого количества запросов. Вы можете посоветоваться с администратором сервера API или провайдером услуг по сети для оптимальной настройки и увеличения пропускной способности.

4. Рассмотрите возможность горизонтального масштабирования вашего API сервера. Если у вас есть возможность добавить еще один сервер API и настроить балансировку наг
Изучите информацию о горизонтальном масштабировании. Оно относится именно к вашей ситуации. У меня есть пять недорогих серверов, которые обрабатывают нагрузку в размере 20-24 тысячи запросов в секунду. 

Отличная статья о горизонтальном масштабировании! Здесь исчерпывающе описаны его принципы. Лично я применяю подход с пятью серверами, каждый из которых обрабатывает от 20 до 24 тысяч запросов в секунду. 

Вам может быть интересно узнать больше о горизонтальном масштабировании, так как эта концепция применима к вашей ситуации. У меня есть пять серверов, которые обрабатывают нагрузку в размере 20-24 тысячи запросов в секунду. 

Зайдите на эту страницу и почитайте, что такое горизонтальное масштабирование – это решение, которое подходит именно для вашей ситуации. У меня есть пять серверов, которые успешно справляются с нагрузкой в 20-24 тысячи запросов в секунду. 

Одним из вариантов решения вашей проблемы может быть горизонтальное масштабирование. Оно поможет вам разгрузить серверы и улучшить производительность. Я использую пять дешевых серверов, которые спокойно обрабатывают 20-24 тысячи запросов в секунду.
Похожие вопросы