Почему пропускная способность для сервера является функцией времени отклика в восходящем направлении? - PullRequest
1 голос
/ 10 февраля 2020

У меня есть сервер приложений, который ничего не делает, кроме отправки запросов в вышестоящий сервис, ожидания, а затем ответа клиенту данными, полученными из вышестоящего сервиса. Микросервису для ответа требуется X мс, а иногда Y мс, где X<<Y. Время отклика клиента (в устойчивом состоянии) по существу равно количеству времени, которое микросервис восходящего потока обрабатывает запрос - любая дополнительная задержка незначительна, так как клиент, сервер приложений и микросервис восходящего потока расположены в одном центре данных, и обмениваться данными по частным IP-адресам с очень большой пропускной способностью сети.

Когда клиент начинает отправлять запросы со скоростью N, сервер приложений перегружается и время отклика резко возрастает, поскольку сервер становится неустойчивым. Клиент и микросервис имеют минимальную загрузку ЦП, а сервер приложений использует максимальную загрузку ЦП. (Сервер приложений работает намного слабее, чем другие две службы - это среда тестирования, используемая для мониторинга поведения сервера приложений в условиях стресса.)

Интуитивно, я бы ожидал, что N будет таким же значение, независимо от того, сколько времени требуется микросервису для ответа, но я обнаружил, что максимальная пропускная способность в устойчивом состоянии значительно меньше, когда микросервис занимает Y мс, тогда как когда он занимает только X мс. Количество используемых эфемерных портов, когда это происходит, также значительно меньше предела. Поскольку количество выполняемых операций чтения и записи одинаково, а использование памяти одинаково, я не могу понять, почему N является фактором времени выполнения микросервиса. Кроме того, нет, ввод / вывод сервисов одинаков независимо от времени выполнения, поэтому количество записываемых байтов одинаково независимо. Поскольку единственное отличие - это время выполнения, которое требует использования большего количества TCP-соединений, когда ответы занимают некоторое время, я не уверен, почему это влияет на максимальную пропускную способность? Насколько я понимаю, стоимость TCP-соединения ничтожна после того, как оно уже установлено.

Я что-то упустил?

Спасибо,

Дополнительные сведения:

Службы используют HTTP / 1.1 с поддержкой активности, без конвейерной передачи. Также должен был упомянуть, что я использую модель IO-Thread. Если бы я использовал поток для запроса, я мог бы понять это поведение, но только с потоком на ядро ​​это сбивает с толку.

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