> Что происходит с внешним сервисом при повторных обращениях во время сбоя (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

При повторных обращениях к внешнему сервису во время сбоя возможны три сценария:

  1. Каскадный отказ (Cascading failure) - если клиент не ограничивает количество запросов, сервис может быть перегружен, что усугубит сбой. Например, при таймаутах в Go горутины будут накапливаться, потребляя память.

  2. Retry storm (шторм повторных запросов) - множество клиентов одновременно повторяют запросы, создавая лавину трафика. Это может привести к отказу даже после восстановления сервиса.

  3. Идемпотентность и состояние - если внешний сервис не идемпотентен, повторные запросы могут создать дубликаты данных или нарушить бизнес-логику.

Рекомендации для Go:

  • Используйте circuit breaker (например, github.com/sony/gobreaker) для быстрого отказа при превышении порога ошибок.

  • Применяйте retry с exponential backoff + jitter (например, github.com/cenkalti/backoff), чтобы избежать синхронных повторных запросов.

  • Ограничьте количество одновременных запросов через rate limiter (например, golang.org/x/time/rate).

  • Для критичных операций реализуйте graceful degradation - возвращайте закэшированные данные или fallback-ответ.

Пример кода с circuit breaker и retry:

GO
import (
"github.com/sony/gobreaker"
"github.com/cenkalti/backoff/v4"
)
func callExternalService(ctx context.Context) (string, error) {
cb := gobreaker.NewCircuitBreaker(gobreaker.Settings{
Name: "external-svc",
MaxRequests: 3,
Interval: 60 * time.Second,
Timeout: 30 * time.Second,
})
var result string
operation := func() error {
var err error
result, err = externalAPI.Call(ctx)
return err
}
err := cb.Execute(func() error {
return backoff.Retry(operation, backoff.NewExponentialBackOff())
})
return result, err
}

Такой подход минимизирует нагрузку на внешний сервис и предотвращает каскадные отказы.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью