У нас есть система 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