Рейтинг:1

Балансировка нагрузки постоянных соединений HTTP/2 GRPC

флаг in
Sam

Давайте посмотрим на этот сценарий.

В традиционной модели LB у нас будет LB (будь то обратный прокси-сервер или нет) отдает req/rep серверам уровня приложений. Эта модель подходит для общего стиля общения req/rep, но что происходит, когда у нас есть постоянные соединения?

Давайте посмотрим на пример HTTP/2.

Здесь у нас нет простой парадигмы Req/Rep, где я могу просто отправить запрос и сбалансировать нагрузку на этот запрос и получить ответ. Вся эта архитектура не имеет состояния (забудьте о липких сессиях, так как это имеет последствия, не относящиеся к этому примеру). Что происходит, у нас есть постоянное соединение, такое как с HTTP/2.

Я не могу подключить соединение HTTP/2 к LB, иначе этот LB будет очень быстро насыщаться, и все клиентские запросы, у которых еще нет сокета, связанного с этим LB, будут неудачными. Если они полагаются на DNS, чтобы указать на этот LB, возникает множество проблем, когда у нас заканчивается место в сокетах.

Нам нужно что-то, чтобы почти перенаправить первоначальный запрос SYN на другой сервер, который может быть другим LB или самим прикладным уровнем (забудьте о безопасности/внешних атаках).

Клиент отправляет запрос s1.com --> (отвечает на DNS и возвращает ip .123)

Затем клиент отправляет запрос на подключение HTTP/2 на .123 (это LB), но вместо подключения и передачи на прикладной уровень он отправляет ответ на «перенаправление .. аналогично 302 в HTTP» на ip .124 . IP .124 может быть другим типом LB или может быть самим прикладным уровнем, где фактический сокет привязан для связи HTTP/2.

Управление .123 и узлами, на которые он указывает, можно было бы контролировать с помощью различных инструментов, которые существуют в настоящее время, но с точки зрения этой «переадресации HTTP/2 для балансировки проблемы загрузки сокетов» я не смог найти решение .

Есть ли лучший способ справиться с этим (опять же, не для внутренних служб, а для внешних запросов) или существует прокси/служба/система, которая существует для решения этой проблемы?

DSR немного отличается тем, что решает проблему на другом уровне и действительно актуален, когда у вас много обратного трафика, но не решает проблему, если трафик двунаправленный (также не работает на многих облачных провайдерах). ). DSR имеет большое значение для потоковой передачи мультимедиа и интенсивного трафика ответов сервера.

Спасибо за любую информацию или помощь, которую вы можете предоставить по этой теме!

Как

флаг in
Sam
Я почти подумал о том, чтобы сделать что-то в rust или erlang, которое в основном принимает запрос HTTP1.x (этот запрос исходит из браузера), который принимает сокет и возвращает dnsname+token. И из этого ответа настраивается соединение HTTP/2 с этим DNS-именем и информацией о токене (для аутентификации на другом сервере).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.