Ограничение скорости во встроенном HTTP-сервере Rserve?

Я изучаю встроенный HTTP-сервер Rserve (1.8.5) после изменения .http.request() из FastRWeb. С обновленной функцией запроса все в порядке, но проблема в том, что всякий раз, когда # одновременных запросов много, некоторые/большинство из них выдают следующую ошибку.

ПРЕДУПРЕЖДЕНИЕ: сбой fork() в fork_http(): невозможно выделить память

ПРЕДУПРЕЖДЕНИЕ: ошибка fork() в Rserve_prepare_child(): невозможно выделить память

Это связано с недостатком оставшейся свободной памяти и необходимо # тем или иным образом ограничить запросы.

Я попробовал пару клиентских уровней (1) запросы Python + библиотеки Hug, (2) Python pyRserve + библиотеки Hug, где # рабочие процессы настраиваются # процессорами. Также я попробовал обратный прокси-сервер с Nginx как в настройке с одним, так и с несколькими контейнерами (3) (4).

Во всех случаях я наблюдаю некоторые накладные расходы (~ 300 - 450 мс) по сравнению с настройкой только Rserve со встроенным HTTP-сервером.

Я предполагаю, что использование его как есть было бы наиболее эффективным вариантом, но я обеспокоен тем, что он просто продолжает пытаться разветвляться и возвращает ошибку. (Кроме того, что ошибки возникают быстро, было бы непросто выполнить автоматическое масштабирование с некоторыми типичными показателями, такими как загрузка ЦП или среднее время отклика.)

Может ли кто-нибудь сообщить, есть ли способ принудительно ограничить скорость с помощью другого инструмента или без него, который не жертвует производительностью?

Моя конфигурация Rserve примерно следующая.

http.port 8000
socket /var/rserve/socket
sockmod 0666
control disable

Также здесь представлен упрощенный nginx.conf.

worker_processes auto;

events {
    worker_connections 1024;
}

http {
    upstream backend {
        server 127.0.0.1:8000;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

person Jaehyeon Kim    schedule 30.10.2017    source источник


Ответы (1)


Я был введен в заблуждение Locust (инструментом нагрузочного тестирования), который показал кешированный вывод для настройки Rserve со встроенным HTTP-сервером.

Ручное исследование показывает, что Rserve + Nginx возвращает немного улучшенный результат.

person Jaehyeon Kim    schedule 31.10.2017