Какие знаешь механизмы для работы с большими нагрузками на сервер

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

Ответ

Горизонтальное масштабирование (scaling out) — добавление серверов под нагрузкой. Вертикальное (scaling up) — увеличение ресурсов сервера.

Кеширование (Redis, Memcached):

data, err := cache.Get("key")
if err != nil {
    data = fetchFromDB()
    cache.Set("key", data, ttl)
}

Балансировка нагрузки (Nginx, HAProxy, Cloud LB).

Асинхронная обработка через очереди (RabbitMQ, Kafka):

msg, _ := json.Marshal(task)
channel.Publish("", queue.Name, false, false, amqp.Publishing{Body: msg})

Оптимизация БД: индексы, шардинг, репликация.

Graceful shutdown для обработки текущих запросов перед остановкой.

Rate limiting (например, через golang.org/x/time/rate).

CDN для статики.

Connection pooling (например, sql.DB в Go).

Микросервисы вместо монолита.

Профилирование (pprof) для поиска узких мест.