Интервьюер: Как Sentinel реализует ограничение тока?
Интервьюер: Как Sentinel реализует ограничение тока?

Ограничение тока — это стратегия, которая защищает систему от перегрузки, контролируя количество или скорость доступа к ресурсам, службам или интерфейсам, предоставляемым системой.

Его цель — гарантировать, что система может предоставлять стабильные и надежные услуги в пределах допустимого диапазона, а также избежать сбоев системы, исчерпания ресурсов или высоких задержек ответа из-за слишком большого количества запросов.

В Sentinel существует два способа реализации ограничения тока:

  1. Ограничение тока реализовано с помощью методов кода.
  2. Текущее регулирование достигается с помощью настроек консоли Sentinel. 1. Реализация ограничения тока с помощью кода. Реализация ограничения тока с помощью кода требует следующих двух шагов:
  3. Определить ресурсы
    1. Определите ресурсы с помощью кода.
    2. Определите ресурсы с помощью аннотаций.
  4. Определить текущие ограничивающие правила

Конкретная реализация заключается в следующем.

1.1 Определите ресурсы

Определить Ресурс может быть реализован в режиме кода или режиме аннотации. реализация заключается в следующем.

① Определение ресурсов с помощью кода

Ресурсы можно определить с помощью кода SphU.entry("resourceName"). Конкретный код реализации выглядит следующим образом:

Язык кода:java
копировать
@RequestMapping("/getuser")
public String getUser() {
    try (Entry entry = SphU.entry("getuser")) {
        // защищенная логика
        return "User";
    } catch (Exception e) {
        // Бизнес-логика после ограничения тока
        return «Текущий поток ограничен»;
    }
}

PS: SphU — это аббревиатура Sentinel Protection Hotspot Util, класса инструментов защиты Sentinel hotspot.

② Определите ресурсы с помощью аннотаций.

Определение ресурсов также может быть достигнуто путем аннотации @SentinelResource, как показано в следующем коде:

Язык кода:java
копировать
// Определить Ресурс и способ срабатывания после ограничения тока
@SentinelResource(value = "resourceName", blockHandler = "myBlockHandler")
@RequestMapping("/getnamebyid")
public String getNameById(Integer id) {
return id + "-lei";
}
// Способ срабатывания после ограничения тока
public String myBlockHandler(Integer id, BlockException blockException) {
    String msg = "Do myBlockHandler method.";
    System.out.println(msg);
    return msg;
}

Среди них атрибут value определяет имя ресурса, а blockHandler определяет метод, который будет выполняться после того, как исходный метод будет ограничен/понижен/защищен системой.

На что следует обратить внимание
  1. Определенный метод ограничения тока myBlockHandler должен соответствовать возвращаемому значению и параметрам исходного метода;
  2. Текущий метод ограничения должен добавить параметр BlockException, в противном случае будет выдана следующая ошибка, поскольку не может быть найден подходящий метод выполнения после текущего ограничения:

PS: «csp» означает Concurrent Service Protection, то есть защиту параллельных сервисов.

Описание атрибута аннотации @SentinelResource:

  • value:Имя ресурса,Обязательно (не может быть пустым).
  • entryType:Тип трафика вызова ресурса:Входной трафик(EntryType.IN)и исходящий трафик(EntryType.OUT),Обратите внимание, что правила системы применяются только к IN Вступить в силу.
  • blockHandler/blockHandlerClass: Выполняется при ограничении тока и плавлении BlockException Соответствующее имя метода.
  • fallback/fallbackClass:Нет BlockException и другие методы для обработки исключений в ситуациях отсутствия ограничения тока и отсутствия предохранителей.
  • exceptionsToIgnore:Используется для указания исключенных исключений.,Не будет включен в статистику исключений,не войдет fallback логика, и да будет брошено как есть. Примечание: 1.6.0 предыдущая версия fallback Эта функция обрабатывает только исключения ухудшения характеристик автоматического выключателя (DegradeException) и не может обрабатывать бизнес-исключения.

1.2 Определить текущие правила ограничения

В проекте Spring Boot вам нужно только добавить текущее ограничивающее правило, которое будет выполняться при запуске проекта, как показано в следующем коде:

Язык кода:java
копировать
public static void main(String[] args) {
    SpringApplication.run(SentinelDemoApplication.class, args);
    // Загрузить правила ограничения тока
    initFlowRules();
}

Действующие правила ограничения определены следующим образом:

Язык кода:java
копировать
private static void initFlowRules() {
    List<FlowRule> rules = new ArrayList<>();
    FlowRule rule = new FlowRule();
    rule.setResource("resourceName"); // Имя ресурса
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // в соответствии с QPS Ограничение тока
    rule.setCount(1); // QPS Порог [Разрешается только один запрос на обработку для каждого государства]
    rule.setStrategy(RuleConstant.STRATEGY_DIRECT); // Отношения по вызову тока Стратегия【Нетдолженнастраивать】
    rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT); // эффект управления потоком【Не требуется】
    rule.setClusterMode(false); // да Нет кластера Ограничение тока【Нетдолженнастраивать,По умолчанию некластер]
    правила.добавить(правило);
    FlowRuleManager.loadRules(правила);
}

в:

  • setStrategy:настраивать Отношения по вызову тока Стратегия,Включенные значения::
    • прямой(RuleConstant.STRATEGY_DIRECT)【значение по умолчанию】
    • связь(RuleConstant.STRATEGY_RELATE
    • ассоциация(RuleConstant.STRATEGY_CHAIN
  • setControlBehavior:настраиватьэффект управления потоком,Включенные значения::
    • прямойотклонять(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)【значение по умолчанию】
    • холодный старт(RuleConstant.CONTROL_BEHAVIOR_WARM_UP
    • Старт с постоянной скоростью(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER
    • холодный старт+Старт с постоянной скоростью(RuleConstant.CONTROL_BEHAVIOR_WARM_UP_RATE_LIMITER)2.проходить Консольная реализация Ограничение токаSentinel Вы также можете использовать консоль для выполнения Ограничения. тока,Но по умолчанию Ограничение ток ПРАВИЛА да Сохранить существование в памяти,Таким образом, правила будут потеряны после перезапуска.,По умолчанию процесс отправки выглядит следующим образом:
  1. Загрузите и запустите Sentinel Dashboard (консоль).
  2. Добавьте и настройте Sentinel Dashboard в программе.
  3. Настройте правила ограничения тока/выключателя в Sentinel Dashboard.
  4. Проверьте эффект. 2.1 Загрузите и Запустить консоль Sentinel мы можем от Sentinel Загрузите последнюю версию консоли из официального репозитория. jar Сумка,доступадрес:https://github.com/alibaba/Sentinel/releases

Запустите консоль с помощью следующей команды:

java -jar sentinel-dashboard.jar --server.port=18080

от Sentinel 1.6.0 Старт, Страж Консоль представляет основные функции входа в систему. Имя пользователя и пароль по умолчанию: дозорный. Можно обратиться к Документация модуля аутентификации Настройте имя пользователя и пароль с помощью следующих команд:

java -Dserver.port=18080 -Dsentinel.dashboard.auth.username=sentinel -Dsentinel.dashboard.auth.password=123456 -jar sentinel-dashboard.jar

Дополнительные элементы конфигурации при запуске консоли Sentinel:

Элементы конфигурации

значение по умолчанию

описывать

server.port

8080

Укажите порт

csp.sentinel.dashboard.server

Укажите адрес

project.name

-

Укажите название программы

sentinel.dashboard.auth.username

sentinel

Учетная запись для входа в личный кабинет (требуется версия 1.6+)

sentinel.dashboard.auth.password

sentinel

Пароль для входа в личный кабинет (требуется версия 1.6+)

server.servlet.session.timeout

30 минут

Срок действия сеанса входа в систему (требуется версия 1.6+)

Настройка 7200 означает 7200 секунд.

Настроено как 60м на 60 минут |

2.2 Добавляем и настраиваем Sentinel в программе

Добавьте зависимость Sentinel в проекты, требующие управления потоком:

Язык кода:xml
копировать
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

Настройте адрес Sentinel Dashboard в проекте:

Язык кода:yaml
копировать
spring:
  application:
    name: sentinel-dashboard-demo
  cloud:
    sentinel:
      transport:
        dashboard: localhost:18080
        client-ip: 127.0.0.1 
        port: 8721
        heartbeat-interval-ms: 10000

Среди них обязательным является только пункт «Панель мониторинга», остальные можно опустить. Их значения следующие:

  • dashboard:sentinel адрес консоли.
  • client-ip:текущий клиент IP, автоматически выбирает один, если не установлен IP зарегистрироваться.
  • port:и sentinel Порт связи, если он не установлен, будет 8719 Запустите сканирование, а затем +1, пока не найдете незанятый интерфейс.
  • heartbeat-interval-ms:Цикл отправки пульса,значение по умолчаниюда 10s。2.3 Установите правила
  • целевой источник:Sentinel Вы можете ограничить ток для вызывающего объекта. При заполнении имени конкретного микросервиса укажите текущий лимит для этого микросервиса. ,значение по умолчаниюдля по умолчанию (нет различия между источниками, все ограничения).
  • Тип порога/порог для одной машины:Тип метрики, используемый для ограничения и контроля трафика.,Можетдля QPS(Queries Per Во-вторых, количество запросов на одновременных потоков”。
    • QPS:Каждый Второй Запросы начинаются при достижении этого значения Ограничение тока。
    • Количество одновременных потоков:Когда поток, запрашивающий этот ресурс, достигает определенного значения Ограничение тока。Каждый Выделить поток для каждого запроса,Когда выполнение запроса занимает много времени,скоро сработает Ограничение тока,Напротив, если скорость выполнения потока высока,Так Ограничение тока Вероятность его срабатывания будет меньше。
  • режим управления потоком:режим управления потоком。
    • прямой:Интерфейс достигает Ограничение состояние тока,прямой Ограничение тока。
    • ассоциация:когдаассоциация Когда ресурсы достигают порога,Сразу Ограничение тока Собственный。
    • связь:Укажите ресурсыот Трафик, поступающий с входного ресурса,если порог достигнут,Сразуруководить Ограничение тока。
  • эффект управления потоком:эффект управления потоком。
    • быстро провалиться:путьда Метод управления потоком по умолчанию,например QPS После превышения порога любого правила новые запросы будут немедленно отклонены и выдан метод отклонения. Исключение потока. Этот метод подходит для ситуаций, когда производительность системы точно известна, например, когда точный уровень воды в системе определяется посредством испытания под давлением.
    • Ожидание в очереди (также называемое обгоном с постоянной скоростью):Очередь будет строго контролировать запросыпроходитьинтервал времени,Сделайте запросы стабильными и единообразными,Может использоваться для обработки периодических всплесков высокого трафика. Например, программное обеспечение для захвата билетов.,существования В течение определенного времени или минуты поступает большое количество запросов,и будет простаивать в течение следующего периода времени,Мы надеемся, что система сможет обработать и эти запросы в ближайшее свободное время.,И дапрямой отказался. существуют Настроить во время ожидания в очереди,Необходимо заполнить период тайм-аута.
    • Warm Up:Этот пункт называется предварительным нагревом илихолодный старт Способ,Этот режим в основном используется для предотвращения внезапного увеличения трафика.,прямой Поднятие системы до высокого уровня воды может мгновенно разрушить систему.,проходить"холодный старт",Пусть трафик трафика медленно увеличивается,существование постепенно увеличивается до верхней границы порога в течение определенного периода времени,Дайте холодной системе время прогреться,Не допускайте перегрузки холодных систем. При использовании режима Warm Up нам также необходимо указать открытую шкалу QPS (DEFAULT_COLD_FACTOR,значение по умолчаниюдля 3. Представитель 30%) и сколько времени потребуется системе на прогрев (warmUpPeriodSec, значение по умолчаниюда 10 Второй).

Когда на текущей странице ограничения выбрано «Кластер или нет», интерфейс будет выглядеть следующим образом:

Значение Token Server в последнем пункте «Failure Degradation» следующее:

Token Server да Sentinel Ключевой компонент управления потоками кластера. Он отвечает за распространение токенов и управление потоками. когда Sentinel Когда приложение настроено в режиме регулирования кластера, оно будет Token Server Запросите токен, а затем выполните управление потоком на основе состояния токена. если Token Server Недоступно, возможно, из-за сбоя сети. Токен Server Сбой экземпляра и другие причины в настоящее время не могут быть использованы. Token Server Получите жетон.

Смысл настройки сервера токенов следующий:

  • Когда опция конфигурации «да»:выражатькогда Token Server Когда недоступен, Sentinel Он автоматически переключится в автономный режим ограничения тока. В автономном режиме ограничения тока Sentine Будет от местного Ограничения токаправилоруководить流量控制,Больше не зависит от Token Сервер. Это гарантирует, что даже если Token Server Если он недоступен, вы можете продолжать ограничивать трафик.
  • Когда опция конфигурации «Нет»:выражатькогда Token Server Когда недоступен, Sentinel Он не переключится автоматически в автономный режим ограничения тока, и управление потоком будет приостановлено, то есть ограничение тока не может быть выполнено, что может привести к слишком высокой служебной нагрузке. Мысли после занятий Sentinel Что используется в Ограничении алгоритм тока? Как реализуется его основа? Кроме Sentinel Кроме того, какие еще существуют методы ограничения тока?

Эта статья была включена на мой сайт интервью. www.javacn.site,в Сумка Содержит следующее содержимое::Redis、JVM、одновременно、одновременно、MySQL、Spring、Spring MVC、Spring Boot、Spring Облако, MyBatis, шаблоны проектирования, очередь сообщений и другие модули.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose