Вопрос проверяет понимание механизмов балансировки нагрузки в gRPC-сервисах.
gRPC использует клиентскую балансировку нагрузки через resolver и picker. Поддерживаются различные стратегии (round-robin, weighted). Для управления сервисами часто используют service mesh (например, Istio) или балансировщики (например, Envoy).
Resolver: Определяет список доступных серверов
Picker: Выбирает конкретный сервер для запроса
Load Balancing Policy: Стратегия выбора сервера
Round Robin: Поочерёдный выбор серверов
Weighted: С учётом весов серверов
Least Request: Наименее загруженный сервер
conn, err := grpc.Dial(
"dns:///my-service",
grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`),
)Istio: Автоматическая балансировка
Linkerd: Прозрачная балансировка
Envoy: Продвинутые алгоритмы
Когда использовать:
Клиентская балансировка подходит для простых сценариев. Для сложных систем лучше использовать service mesh.