Я не могу понять причину, по которой реализация сервера aiohttp (и asyncio в целом) не позволяет ограничить максимальное количество одновременных подключений (количество принятых сокетов или количество обработчиков запущенных запросов).(https://github.com/aio-libs/aiohttp/issues/675). Без этого ограничения легко исчерпать память и / или файловые дескрипторы.
В то же время, клиент aiohttp по умолчанию ограничивает количество одновременных запросов до 100 (https://docs.aiohttp.org/en/stable/client_advanced.html#limiting-connection-pool-size), aiojobs ограничивает количество запущенных задач и размер списка ожидающих задач, nginx имеет ограничение worker_connections, любая структура синхронизации ограничена количеством рабочих потоков по дизайну.
Хотя aiohttp может обрабатывать множество одновременных запросовэто число по-прежнему ограничено. В документации по aiojobs сказано: «Планировщик подразумевает ограничение количества одновременных заданий (по умолчанию 100). ... Он предотвращает переполнение программы, выполняя одновременно миллиард заданий».И все же, мы можем с радостью породить «миллиард» (ну, пока у нас не хватит ресурсов) обработчиков aiohttp.
Итак, вопрос в том, почему он реализован таким, какой он есть? Я упускаю некоторые важные детали?Я думаю, что мы можем как-то приостановить обработчики запросов, используя Semafor, но сокет все еще принимается aiohttp, а сопрограмма - это spaв отличие от nginx.Кроме того, при развертывании за nginx число желаемых пределов worker_connections и aiohttp, безусловно, будет разным (поскольку nginx также может обслуживать статические файлы)