Нужен ли нам пул соединений для микросервисов, использующих HTTP2? - PullRequest
1 голос
/ 04 мая 2019

Поскольку HTTP2 поддерживает мультиплексирование, нужен ли нам еще пул соединений для микросервисной связи? Если да, каковы преимущества такого пула?

Пример: Сервис A => Сервис B

Обе вышеперечисленные службы имеют только один доступный экземпляр.

Несколько соединений могут помочь преодолеть ограничение размера буфера ОС для каждого Соединения (Сокета)? Что-то еще?

1 Ответ

3 голосов
/ 05 мая 2019

Да, вам все еще нужен пул соединений на клиенте, который обращается к микросервису.

Во-первых, в общем случае именно сервер контролирует количество мультиплексирования.Определенный микросервисный сервер может решить, что он не может разрешить даже очень маленькое мультиплексирование.
Если клиент хочет использовать этот микросервис с более высокой нагрузкой, он должен быть готов открыть несколько соединений, и именно здесь пул соединений пригодится.,Это также полезно для обработки скачков нагрузки.

Во-вторых, HTTP / 2 имеет управление потоком данных, что может серьезно ограничить пропускную способность данных для одного соединения.Если окно управления потоком небольшое (значение по умолчанию, определенное спецификацией HTTP / 2, составляет 65535 байт, что обычно очень мало для микросервисов), то клиент и сервер будут тратить значительное количество времени на обмен WINDOW_UPDATE фреймами для увеличения контроля потокаWindows, и это отрицательно сказывается на пропускной способности.
Чтобы преодолеть это, вам нужно либо больше подключений (и снова клиент должен быть готов к этому), либо вам нужны большие окна управления потоком.

В-третьих, вВ случае больших окон управления потоком HTTP / 2 вы можете столкнуться с перегрузкой TCP (и это отличается от размера буфера сокета), потому что потребитель медленнее, чем производитель.Это может быть медленный сервер для загрузки клиента (запрос REST с большой полезной нагрузкой) или медленный клиент для загрузки сервера (ответ REST с большой полезной нагрузкой).
Снова, чтобы преодолеть перегрузку TCP, решением является открытие несколькихподключений.

Сравнивая HTTP / 1.1 с HTTP / 2 для случая использования микросервиса, типично, что пулы соединений HTTP / 1.1 намного больше (например, 10x-50x), чем пулы соединений HTTP / 2, но вы все равноМне нужны пулы соединений в HTTP / 2 по указанным выше причинам.

[Отказ от ответственности Я разработчик HTTP / 2 в Jetty ].
У нас была первоначальная реализация, где Jetty HttpClient использовал транспорт HTTP / 2 с жестко запрограммированным одиночным соединением на домен, потому что именно это HTTP / 2 проповедовал для браузеров.
Когда мы сталкивались с реальными случаями использования - особенно с микросервисами - мы быстро поняли, насколько плоха была идеяи переключился обратно, чтобы использовать пул соединений для HTTP / 2 (как HttpClient всегда делал для HTTP / 1.1).

...