Интервьюер: Как Sentinel реализует ограничение тока?
Интервьюер: Как Sentinel реализует ограничение тока?
Ограничение тока — это стратегия, которая защищает систему от перегрузки, контролируя количество или скорость доступа к ресурсам, службам или интерфейсам, предоставляемым системой.
Его цель — гарантировать, что система может предоставлять стабильные и надежные услуги в пределах допустимого диапазона, а также избежать сбоев системы, исчерпания ресурсов или высоких задержек ответа из-за слишком большого количества запросов.
В Sentinel существует два способа реализации ограничения тока:
Ограничение тока реализовано с помощью методов кода.
Текущее регулирование достигается с помощью настроек консоли Sentinel. 1. Реализация ограничения тока с помощью кода. Реализация ограничения тока с помощью кода требует следующих двух шагов:
Определить ресурсы
Определите ресурсы с помощью кода.
Определите ресурсы с помощью аннотаций.
Определить текущие ограничивающие правила
Конкретная реализация заключается в следующем.
1.1 Определите ресурсы
Определить Ресурс может быть реализован в режиме кода или режиме аннотации. реализация заключается в следующем.
① Определение ресурсов с помощью кода
Ресурсы можно определить с помощью кода SphU.entry("resourceName"). Конкретный код реализации выглядит следующим образом:
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 определяет метод, который будет выполняться после того, как исходный метод будет ограничен/понижен/защищен системой.
На что следует обратить внимание
Определенный метод ограничения тока myBlockHandler должен соответствовать возвращаемому значению и параметрам исходного метода;
Текущий метод ограничения должен добавить параметр 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_RATE_LIMITER)
холодный старт+Старт с постоянной скоростью(RuleConstant.CONTROL_BEHAVIOR_WARM_UP_RATE_LIMITER)2.проходить Консольная реализация Ограничение токаSentinel Вы также можете использовать консоль для выполнения Ограничения. тока,Но по умолчанию Ограничение ток ПРАВИЛА да Сохранить существование в памяти,Таким образом, правила будут потеряны после перезапуска.,По умолчанию процесс отправки выглядит следующим образом:
Загрузите и запустите Sentinel Dashboard (консоль).
Добавьте и настройте Sentinel Dashboard в программе.
Настройте правила ограничения тока/выключателя в Sentinel Dashboard.
Проверьте эффект. 2.1 Загрузите и Запустить консоль Sentinel мы можем от Sentinel Загрузите последнюю версию консоли из официального репозитория. jar Сумка,доступадрес:https://github.com/alibaba/Sentinel/releases
от Sentinel 1.6.0 Старт, Страж Консоль представляет основные функции входа в систему. Имя пользователя и пароль по умолчанию: дозорный. Можно обратиться к Документация модуля аутентификации Настройте имя пользователя и пароль с помощью следующих команд:
Среди них обязательным является только пункт «Панель мониторинга», остальные можно опустить. Их значения следующие:
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, шаблоны проектирования, очередь сообщений и другие модули.