Нужно ли объединять экземпляры ManagedChannel для многопоточного клиента Java GRPC (1.1.2)?

TL;DR

Имеет ли ManagedChannel неявный пул соединений grpc-java или ответственность за объединение ManagedChannel экземпляров лежит на пользователе?


Итак, я использую java grpc 1.1.2 с протоколом 3.2.0. Мне кажется, что нет неявной поддержки (на данный момент) для пула соединений, который grpc предоставляет клиентам. Однако кажется, что абстракция соединения в grpc, то есть объект ManagedChannel действительно работает с несколькими соединениями TCP. Это верно? Если да, то есть ли у ManagedChannel пул соединений вместе с ним? Если это так, мне, вероятно, не нужно беспокоиться о пуле соединений, поскольку канал является потокобезопасным, и я могу просто использовать один экземпляр ManagedChannel на моем клиенте. Однако мне действительно, возможно, придется объединить эти объекты каналов в пул для большей пропускной способности, если это будет необходимо. Есть ли такая реализация (объединение каналов), которая делает это для меня в самом grpc?


person gravetii    schedule 18.02.2017    source источник


Ответы (2)


Да, ManagedChannel создает пул соединений, а вам нужен только один. Он будет автоматически создавать и уничтожать соединения по мере необходимости.

person Carl Mastrangelo    schedule 21.02.2017
comment
Привет, есть ли источник для этого заявления? Спасибо. - person Jorge Campos; 11.12.2018
comment
Я являюсь основным участником gRPC и авторитетен в этом вопросе. - person Carl Mastrangelo; 24.01.2019
comment
Привет, Карл, спасибо за ваш ответ, учитывая мои тесты и текущее понимание того, как работает gRPC, я знаю, что вы правы, и я верю в вас. Хотя для формальной документации для системы было бы неплохо разместить ваш / this оператор на странице документации, чтобы мы могли ссылаться на него :) - person Jorge Campos; 24.01.2019
comment
Если вы отправите PR, где вы ожидаете, что это будет заявлено, я могу его просмотреть. К сожалению, поскольку я знаю, как работает система, я не знаю, где пользователи ищут информацию в первую очередь. (Я полагаю, ТАК было бы то место!) - person Carl Mastrangelo; 25.01.2019
comment
@CarlMastrangelo Какие параметры конфигурации ManagedChannel и где они задокументированы? - person Abhijit Sarkar; 12.06.2019
comment
@CarlMastrangelo: Эй, похоже, твое заявление отличается от того, что сделал Эрик. См. Его комментарий в stackoverflow.com/questions/58764891/ - person anhldbk; 16.12.2019
comment
Будет ли каждый запрос создавать новое соединение? Как я могу ограничить количество подключений - person pain; 06.07.2021

Поскольку вы сказали, что хотите объединение для большей пропускной способности, я предполагаю, что вы хотите создать и объединить несколько соединений для одного адреса в канале. Он не поддерживался, так как канал impl использовался для создания только одного соединения на адрес. С LBv2, который скоро заменит старую версию, теперь это возможно с пользовательским LoadBalancer, в котором вы можете создайте столько Subchannel для соединения, сколько хотите.

Вы можете обратиться к акции выбрать сначала и циклический перебор LoadBalancers о том, как написать свой собственный LoadBalancer.

person Kun Zhang    schedule 22.02.2017