You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.3 KiB

GrpcBalancer

Пакет для подключения к сервисам по GRPC.

Функционал пакета

В сравнении со стандартным подключением grpc.ClientConn пакет grpcbalancer предоставляет следующие дополнительные возможности:

  1. балансировка между несколькими DNS-адресами сервиса.

С версии v1.3.2:

  1. автоматические фоновые health check’и с переподключением в случае недоступности сервиса;
  2. периодический мягкий реконнект, позволяющий задействовать весь текущий пул подов сервиса и перебалансировать соединения при начальном неравномерном распределении при деплое;
  3. принудительный health check (опционально) перед вызовом метода сервиса.

С версии v1.3.3:

  1. корректная работа созданного ранее подключения после переустановки соединения без необходимости заново запрашивать подключение методом balancer.Conn(ctx).

Опции инициализации

Опция Назначение
WithUrls(target ...string) URL(ы) сервиса, к которому подключаемся
WithInsecure() разрешает небезопасные подключения
WithTimeout(timeout time.Duration) таймаут установки соединения, 0 = значение по умолчанию
WithBalancingMode(bp BalancingPolicy) режим балансировки (пока поддерживается только round-robin)
WithForceHeathCheck(timeout time.Duration) проводить health check перед каждым запросом, 0 = таймаут по умолчанию

При вызове методов сервиса в случае, если в контексте не задан таймаут, устанавливается таймаут по умолчанию.

Использование

Инициализация

import gitlab-private.wildberries.ru/wbpay-go/packages/grpcbalancer

balancer, err := grpcbalancer.New(
	grpcbalancer.WithUrls(url_to_svc),
	grpcbalancer.WithInsecure(),
)

Вызов метода

conn, err := balancer.Conn(ctx)
res, err := conn.SomeMethod(ctx, request)

Рекомендуемым является вариант, при котором перед каждым вызовом метода сервиса сначала получаем подключение методом balancer.Conn(ctx).