Был ли ваш последний проект высоконагруженным (Highload)?

Ответ

Да, проект был высоконагруженным (Highload). Мы разрабатывали масштабируемое REST API на Spring Boot с микросервисной архитектурой.

Ключевые метрики и технологии:

  • Нагрузка: ~10 000 запросов в секунду (RPS) с пиками до 50 000.
  • Кеширование: Redis для хранения сессий и часто запрашиваемых данных.
  • Асинхронная обработка: Apache Kafka для обработки событий (например, нотификаций, аналитики).
  • База данных: PostgreSQL с горизонтальным шардированием по ключу пользователя и read-репликами.
  • Мониторинг: Prometheus для сбора метрик и Grafana для визуализации.

Пример оптимизации — кеширование в сервисе:

@Service
public class UserService {
    @Cacheable(value = "users", key = "#id")
    public User getUserById(Long id) {
        // Запрос выполняется только при промахе кеша
        return userRepository.findById(id)
                .orElseThrow(() -> new UserNotFoundException(id));
    }
}

Почему это важно: Без кеширования каждый запрос создавал бы нагрузку на БД. Благодаря горизонтальному масштабированию (Kubernetes) и оптимизированным запросам система успешно справлялась с пиковыми нагрузками.

Ответ 18+ 🔞

Да ты представь, мы тут на проекте, блядь, такой горшок варили, что мама не горюй — настоящий Highload, ёпта! Не какая-нибудь сайтик-визиточка, а масштабируемое REST API на Spring Boot, да ещё и по микросервисам раскиданное, чтоб его.

Циферки, от которых глаза на лоб лезут:

  • Нагрузочка: Обычно так, по мелочи, тысяч десять запросов в секунду. А как пикнёт — все пятьдесят, сука, тысяч! Представляешь этот ураган?
  • Кеширование: Без Redis тут вообще никуда — сессии туда, горячие данные туда, а то БД сдохнет, блядь, в первые пять минут.
  • Асинхронщина: Всё, что можно не делать прямо сейчас, — в Apache Kafka. Уведомления, аналитика — пусть там в очереди болтаются, ебушки-воробушки.
  • База: PostgreSQL, конечно. Но не простой, а расчленённый, блядь — шардированный по юзерам, да ещё и с кучей read-реплик, чтобы не захлебнуться.
  • Наблюдение: Prometheus метрики собирает, Grafana красивые графики рисует, а мы сидим и смотрим, не ползёт ли что-нибудь к пиздецу.

Вот, смотри, как мы умно кеш прикрутили в сервисе, чтобы БД не ебать понапрасну:

@Service
public class UserService {
    @Cacheable(value = "users", key = "#id")
    public User getUserById(Long id) {
        // Запрос выполняется только при промахе кеша
        return userRepository.findById(id)
                .orElseThrow(() -> new UserNotFoundException(id));
    }
}

А без этой, блядь, хитрой жопы что? Каждый долбаный запрос лез бы прямо в базу, которая уже и так овердохуища запросов жрёт! А так — раз, и из кеша вынул, если юзера уже кто-то спрашивал. Плюс всё это на Kubernetes болталось, масштабировалось туда-сюда... В общем, система даже на этих пиках в пятьдесят тысяч не сдыхалась, а держалась, блядь, молодцом.