Используя HTTP2, как я могу ограничить количество одновременных запросов? - PullRequest
1 голос
/ 09 марта 2019

У нас есть система client <-> server, работающая через HTTP1.1.Клиент делает сотни (иногда тысячи) одновременных запросов к серверу.

Поскольку ограничения браузеров по умолчанию для соединений HTTP1.1 по умолчанию, клиент фактически делает эти запросы в пакетах (6 ~ 8) одновременныхзапросы, мы думаем, что сможем добиться некоторого улучшения производительности, если сможем увеличить количество одновременных запросов.

Мы перевели систему для работы через HTTP2, и мы видим, что клиент запрашивает все запросы одновременно, как мы хотели.

Проблема теперь в следующем: сервер не может обработать столько одновременных запросов.

Как мы можем ограничить количество одновременных запросов, которые клиент выполняет одновременно, чем-то более управляемым длясервер? скажем, 50 ~ 100 одновременных запросов.

Мы предполагали, что HTTP2 может позволить нам градуировать количество одновременных подключений:

С HTTP / 2 клиент сохраняет полный контроль над тем, как обслуживатьг толчок используется.Клиент может ограничить количество одновременно передаваемых потоков;настроить начальное окно управления потоком, чтобы контролировать объем данных, передаваемых при первом открытии потока;или полностью отключить принудительное использование сервера.Эти предпочтения передаются через кадры SETTINGS в начале соединения HTTP / 2 и могут быть обновлены в любое время.

Также здесь:

О, может быть, если возможно, мы можем ограничить это на стороне сервера (что я считаю более удобным для обслуживания).

Но похоже, что эти решения говорят о Server Push и то, что у нас есть, это вытягивание клиента.

В случае, если помощь каким-либо образом выглядит, наша архитектура выглядит так:

Client ==[http 2]==> ALB(AWS Beanstalk)  ==[http 1.1]==> nginx  ==[http 1.0]==> Puma

1 Ответ

1 голос
/ 12 марта 2019

В SETTINGS рамке

есть специальная настройка

Вы можете указать SETTINGS_MAX_CONCURRENT_STREAMS до 100 на стороне сервера

Ссылка

...