Я использую grpc.aio.server и столкнулся с проблемой, что если я попытаюсь выполнить нагрузочный тест на моем сервисе, некоторые запросы будут отставать на 10 секунд, но запросы похожи. Нагрузка стабильная (200rps) и латентность практически всех запросов почти одинаковая. Я согласен с более высокой задержкой, пока она стабильна. Я пытался погуглить что-то вроде приоритета асинхронной задачи, но, на мой взгляд, это означает, что что-то не так с приоритетом задач, которые ждут очень долго, но они завершены, или задача полного запроса ожидает запуска в течение некоторого времени. много времени.
например, в службу gRPC было отправлено 1000 запросов, все они имеют одинаковую логику для выполнения, один и тот же экземпляр базы данных, один и тот же запрос к базе данных, одно и то же время для получения результатов из базы данных и т. д., все то же самое. Я вижу, что напр. Задержка 10-го запроса составляет 10 секунд, а задержка 13-го запроса — 5 секунд. Я также вижу в журналах, что запросы к БД имеют почти одинаковое время выполнения.
Какие-либо предложения? может я что-то не так понимаю






Существует несколько причин, по которым может происходить такое поведение. Вот несколько вещей, на которые вы можете взглянуть:
Какой тип нагрузки у вас есть? Это связано с вводом-выводом или процессором?
Ваш код блокирует цикл событий в какой-то момент? Путь для каждого запроса полностью асинхронный? В документе довольно ясно сказано, что блокировка цикла событий обходится дорого:
Блокирующий (привязанный к ЦП) код не должен вызываться напрямую. Например, если функция выполняет вычисления с интенсивным использованием ЦП в течение 1 секунды, все параллельные асинхронные задачи и операции ввода-вывода будут задержаны на 1 секунду.
Это правильный ответ! Извините за поздний ответ, я решил свою проблему через неделю после того, как задал этот вопрос, основная проблема была в коде блокировки, привязанном к ЦП, теперь я использую
asgiref.sync_to_asyncдля запуска всего кода, привязанного к ЦП, в ThreadPoolExecutor, я ускорил свой код 60%+