Почему время ответа в 100 раз медленнее, чем обработка запроса на сервере? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть компьютерный движок сервера в зоне us-east1-b.n1-highmem-4 (4 виртуальных ЦП, 26 ГБ памяти) с твердотельным накопителем 50 ГБ и все нормально отображается на графиках мониторинга.

мы используем этот сервер в качестве RESTful API на основе рельсов.

Проблемакогда мы отправляем запрос на сервер, получение ответа занимает очень много времени.

Вот наш журнал сервера: как вы можете видеть, это заняло 00:01 секунды до ответа на запрос enter image description here

и вот ответ, полученный почтальоном: как вы видите, X-Runtime равен 0.036319, как и ожидалось, но мы получили ответ через 50374 мс, что означает почти 1 минуту после ответа сервера!enter image description here

1 Ответ

0 голосов
/ 28 февраля 2019

Надеюсь, этот ответ поможет людям с такой же проблемой.Оптимизированный балансировщик нагрузки Пассажира предполагает, что приложения Ruby могут обрабатывать 1 (или ограниченное количество потоков) одновременных подключений.Обычно это так и приводит к оптимальному распределению нагрузки.Но конечные точки, которые имеют дело с SSE / Websockets, могут обрабатывать гораздо больше одновременных соединений, поэтому это предположение ведет к снижению производительности.

Вы можете использовать параметр Force Max одновременных запросов на конфигурацию процесса, чтобы переопределить это.В приведенном ниже примере показано, как установить неограниченный параллелизм для / special_websocket_endpoint:

server {
   listen 80;
   server_name www.example.com;
   root /webapps/my_app/public;
   passenger_enabled on;

   # Use default concurrency for the app. But for the endpoint
   # /special_websocket_endpoint, force a different concurrency.
   location /special_websocket_endpoint {
       passenger_app_group_name foo_websocket;
       passenger_force_max_concurrent_requests_per_process 0;
   }
}

В Passenger 5.0.21 и ниже опция выше не была доступна.В этих версиях есть обходной путь для приложений Ruby.Введите код ниже в config.ru, чтобы установить параллелизм (для всего приложения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...