Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: rate limiting, circuit breaker, resilience, throttling

Как избежать перегрузки внешнего сервиса при синхронных вызовах из высоконагруженной системы?

Тестирует знание паттернов для работы с ограниченными ресурсами.

Короткий ответ

  1. Троттлинг: Ограничение частоты запросов (например, 100 RPS).

  2. Буферизация: Использовать очередь для накопления запросов.

  3. Circuit Breaker: Отключать вызовы при ошибках.

Длинный ответ

Реализации:

  1. Rate Limiter (Resilience4j):

    RateLimiter limiter = RateLimiter.of("alerts", 100); // 100 зап/сек
    CheckedRunnable restricted = RateLimiter.decorateCheckedRunnable(
        	limiter, 
        	() -> externalService.send(alert)
    );
  2. Очередь с контролем потребления:

    // Consumer с ограниченным числом потоков
    @Bean
    public Executor alertExecutor() {
        	return Executors.newFixedThreadPool(10); // Не более 10 параллельных вызовов
    }
  3. Circuit Breaker (Hystrix/Resilience4j):

    CircuitBreaker breaker = CircuitBreaker.of("alerts", 
        	config -> config.failureRateThreshold(50));
    • При 50% ошибок вызовы временно блокируются.

Вывод: Комбинация троттлинга, очередей и Circuit Breaker защищает сервис.

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • Java

    Java

Ключевые слова

#rate limiting

#circuit breaker

#resilience

#throttling

Подпишись на Java Developer в телеграм