Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 987новых вакансий за сутки·91 463вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 238
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python16 417
  • Облачные технологии13 174
  • QA вакансии3 433
  • Backend вакансии2 035
  • Инженер данных1 666
  • Продакт-менеджер1 162

Разработка

  • Android1 816
  • iOS1 666
  • AI вакансии937
  • Fullstack вакансии892
  • Frontend вакансии717
  • Mobile вакансии38

По стеку

  • Go8 561
  • Java6 090
  • Node.js1 889
  • Kotlin1 554
  • .NET1 545
  • Rust1 432
  • PHP640
  • C#562
  • C++498

DevOps и инфраструктура

  • Kubernetes7 303
  • DevOps вакансии5 594
  • Linux-инфраструктура5 291
  • Terraform / IaC4 014
  • CI/CD2 557
  • Мониторинг и Observability1 735
  • SRE548
  • Кибербезопасность398

Аналитика и данные

  • Data Scientist1 033
  • Бизнес-аналитик868
  • Аналитик данных829
  • Системный аналитик134

Другие направления

  • Проджект-менеджер524
  • UI/UX дизайн129
  • Ручное тестирование14

По регионам

  • Вакансии в США44 779
  • Вакансии в Европе21 327
  • Вакансии в Канаде4 450
  • Работа в России3 877

По формату

  • Удалённые вакансии73 902
  • Релокация в США44 794
  • Гибридная работа11 412
  • Офисная работа6 956

По уровню

  • Senior вакансии41 197
  • Middle вакансии20 361
  • Junior вакансии6 638

Сейчас нанимают

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab136 вакансий
  • Celonis45 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме gRPC-GoВсе вопросы
gRPC-GoSeniorПроектирование систем

Как gRPC обрабатывает балансировку нагрузки? Какие стратегии клиентской балансировки нагрузки существуют в gRPC-Go?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

gRPC-Go поддерживает клиентскую балансировку через policy round_robin в ServiceConfig и DNS-resolver с headless Kubernetes Service. Для сложных сценариев используется xDS (Envoy/Istio).

Настройка round_robin через ServiceConfig

import (
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	_ "google.golang.org/grpc/balancer/roundrobin" // side-effect import
)

conn, err := grpc.NewClient(
	"dns:///my-service.namespace.svc.cluster.local:50051",
	grpc.WithTransportCredentials(insecure.NewCredentials()),
	grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy": "round_robin"}`),
)

Балансировка нагрузки в gRPC-Go

gRPC поддерживает балансировку нагрузки на двух уровнях: на стороне клиента (client-side) и через внешний proxy (L7). В большинстве случаев применяется клиентская балансировка, поскольку HTTP/2 мультиплексирует запросы по одному TCP-соединению, что делает L4 LB (например, AWS NLB) неэффективным.

Проблема HTTP/2 и L4 балансировщиков

Традиционный TCP load balancer видит одно долгоживущее соединение и направляет весь трафик на один backend. Решение — либо клиентская балансировка с discovery, либо L7 proxy (Envoy, nginx).

Встроенные балансировщики gRPC-Go

  • round_robin — распределяет RPC по кругу среди доступных SubConn.
  • pick_first (default) — использует первый доступный адрес, не балансирует.
  • grpclb — устаревший, замена — xDS.
  • rls — Route Lookup Service (продвинутый, для крупных систем).

DNS-based discovery с round_robin

При использовании dns:/// resolver gRPC-Go периодически опрашивает DNS и создаёт SubConn для каждого A/AAAA-записи. Это стандартный способ балансировки в Kubernetes через headless service:

# Kubernetes headless service — возвращает IP всех pod
apiVersion: v1
kind: Service
metadata:
  name: my-grpc-service
spec:
  clusterIP: None  # headless!
  selector:
    app: my-grpc-app
  ports:
    - port: 50051
      targetPort: 50051
// Подключение через headless service
conn, err := grpc.NewClient(
	"dns:///my-grpc-service.default.svc.cluster.local:50051",
	grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy": "round_robin"}`),
	grpc.WithTransportCredentials(insecure.NewCredentials()),
)

Кастомный Resolver и Balancer

// Регистрация кастомного resolver (например, для Consul/etcd)
type consulResolver struct {
	cc resolver.ClientConn
}

func (r *consulResolver) ResolveNow(resolver.ResolveNowOptions) {
	// Запрос к Consul, обновление адресов
	addrs := fetchFromConsul()
	r.cc.UpdateState(resolver.State{Addresses: addrs})
}

type consulResolverBuilder struct{}

func (b *consulResolverBuilder) Scheme() string { return "consul" }
func (b *consulResolverBuilder) Build(
	target resolver.Target,
	cc resolver.ClientConn,
	opts resolver.BuildOptions,
) (resolver.Resolver, error) {
	r := &consulResolver{cc: cc}
	r.ResolveNow(resolver.ResolveNowOptions{})
	return r, nil
}

func init() {
	resolver.Register(&consulResolverBuilder{})
}

xDS и Envoy-based балансировка

Для сложных сценариев (canary, traffic splitting, locality-aware routing) используйте xDS с Envoy или Istio. gRPC-Go имеет встроенную поддержку xDS через пакет google.golang.org/grpc/xds:

import _ "google.golang.org/grpc/xds" // включает xDS балансировщик

conn, err := grpc.NewClient(
	"xds:///my-service",
	grpc.WithTransportCredentials(insecure.NewCredentials()),
)

Подводные камни

  • Дефолтный pick_first не балансирует — его нужно явно менять на round_robin через ServiceConfig.
  • Обычный (не headless) Kubernetes Service возвращает единственный ClusterIP — DNS-балансировка не работает, все запросы идут на один виртуальный IP.
  • DNS resolver кэширует TTL — изменения в pod-ах отражаются с задержкой; регулируйте через dns.SetMinFrequency.
  • При использовании TLS имя в сертификате должно совпадать с именем в DNS-записи, иначе handshake упадёт для некоторых SubConn.
  • Импорт _ "google.golang.org/grpc/balancer/roundrobin" обязателен — без него политика round_robin не зарегистрирована и вернётся ошибка.
  • grpclb устарел — не используйте его в новых системах, используйте xDS.
  • Клиентская балансировка плохо работает при неравномерных нагрузках длинных стримов — для streaming-heavy сервисов рассмотрите L7 proxy.

Частые вопросы на собеседовании

  • Как работает аутентификация в gRPC? Как реализовать TLS и mutual TLS (mTLS)?
  • Как реализовать token-based аутентификацию (JWT) в gRPC с помощью metadata?
  • Как реализовать gRPC-сервер на Go?
  • Каковы четыре типа паттернов взаимодействия gRPC? Объясните unary, server streaming, client streaming и bidirectional streaming.

Типичные ошибки

  • Давать ответ про клиентская балансировка нагрузки в gRPC-Go только на уровне определения, не показывая поведение в реальном приложении.
  • Игнорировать границы ответственности вокруг темы «клиентская балансировка нагрузки в gRPC-Go»: кто отменяет работу, кто владеет ресурсом и где формируется ответ клиенту.
  • Не связывать клиентская балансировка нагрузки в gRPC-Go с observability, тестированием или безопасностью, когда это влияет на продакшен-поведение.

Что проверяет интервьюер

  • Точно объясняет, что именно делает клиентская балансировка нагрузки в gRPC-Go и где это используется в Go-коде.
  • Связывает клиентская балансировка нагрузки в gRPC-Go с корректным lifecycle запроса, отменой, конкурентностью или конфигурацией сервера там, где это уместно.
  • Не изобретает API и опирается на реальные контракты официальной документации.

Как вы знаете этот вопрос?

Проверить себя по теме gRPC-Go →

Источники

  • https://grpc.io/docs/guides/service-config/
  • https://grpc.io/docs/guides/custom-load-balancing/
←Предыдущий вопросКак реализовать логику повторных попыток (retry) в gRPC-Go?Следующий вопрос→Как обрабатывать большие payload в gRPC и каковы ограничения на размер сообщений?

Связанные темы

gRPC-Goconnection-managementreliabilitysystem-design