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

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

Ответ

При высоких нагрузках в первую очередь масштабируются:

  1. База данных - вертикально (увеличение ресурсов) или горизонтально (шардинг, репликация). Пример с репликацией в PostgreSQL:
// Подключение к мастеру для записи
masterDB, _ := sql.Open("postgres", "master_conn_string")
// Подключение к реплике для чтения
replicaDB, _ := sql.Open("postgres", "replica_conn_string")
  1. Кэш - Redis/Memcached для разгрузки БД. Добавляем кэширование:
func GetUser(id string) (User, error) {
    if user, found := cache.Get(id); found {
        return user, nil
    }
    // ...запрос к БД
    cache.Set(id, user, ttl)
}
  1. Статика - вынос на CDN (CloudFront, Cloudflare)

  2. API/Микросервисы - горизонтальное масштабирование за балансировщиком (Nginx, Kubernetes)

  3. Асинхронная обработка - очереди (RabbitMQ, Kafka) для долгих операций