Ответ
В Go для снижения нагрузки по запросам используют:
- Пул соединений (например,
sql.DBв database/sql) – переиспользование соединений вместо создания новых. - Кеширование – хранение результатов запросов (библиотеки типа
groupcache,bigcache). - Пакетная обработка (batching) – объединение нескольких запросов в один (например,
INSERTс множеством строк). - Rate limiting – ограничение частоты запросов (
golang.org/x/time/rate). - Асинхронная обработка – через горутины и каналы, чтобы не блокировать клиента.
Пример 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) // Обработка в отдельной горутине
}