Какие знаешь механизмы взаимодействия по сети, которые снижают нагрузку по запросам

«Какие знаешь механизмы взаимодействия по сети, которые снижают нагрузку по запросам» — вопрос из категории Сети, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go для снижения нагрузки по запросам используют:

  1. Пул соединений (например, sql.DB в database/sql) – переиспользование соединений вместо создания новых.
  2. Кеширование – хранение результатов запросов (библиотеки типа groupcache, bigcache).
  3. Пакетная обработка (batching) – объединение нескольких запросов в один (например, INSERT с множеством строк).
  4. Rate limiting – ограничение частоты запросов (golang.org/x/time/rate).
  5. Асинхронная обработка – через горутины и каналы, чтобы не блокировать клиента.

Пример rate limiting:

limiter := rate.NewLimiter(rate.Every(100*time.Millisecond), 10)
for req := range requests {
    if err := limiter.Wait(ctx); err != nil {
        log.Fatal(err)
    }
    go process(req) // Обработка в отдельной горутине
}