Для каждого микросервиса есть несколько десятков запущенных экземпляров, каждый из которых доступен по своему адресу add
Условие
Заголовок раздела «Условие»Для каждого микросервиса есть несколько десятков запущенных экземпляров, каждый из которых доступен по своему адресу addr. Однако отдельные экземпляры микросервиса ненадежны: они могут падать, быть недоступными либо перегруженными. Поэтому вам нужно реализовать тип Balancer, который также реализует интерфейс Backend и осуществляет client-side балансировку нагрузки между экземплярами микросервиса.
type Request interface{}type Response interface{}
type Backend interface { Invoke(ctx context.Context, req Request) (Response, error)}
var _ Backend = &BackendImpl{}
// addr содержит ip:port конкретного экземпляраfunc NewBackend(addr string) *BackendImpl
type Balancer struct { // TODO}
var _ Backend = &Balancer{}
// addrs содержат адреса всех балансируемых экземпляровfunc NewBalancer(addrs []string) *Balancer { // TODO}Решение
Заголовок раздела «Решение»Источник: Yandex / Яндекс (балансировщик) · 4 кв 2025