Sentinel реализовал основные сценарии продвижения трафика Double Eleven от Alibaba, которые длились почти 10 лет.
В этой статье представлены функция Sentinel, принцип, архитектура, быстрый запуск и сравнение соответствующих рамок решения Ali с открытым исходным кодом для ограничения тока.
основное введение
1 Объяснение терминов
-
Лимит сервисного тока: Когда системных ресурсов недостаточно для обработки большого количества запросов, система будет ограничена в потоке или функционировании в соответствии с заданными правилами.
-
Сервисный предохранитель: когда время ожидания или сбой большого количества запросов и вызовов целевой службы истекли, вызывающая служба напрямую выполнит локальный метод по умолчанию, чтобы избежать долгосрочной блокировки и повлиять на другие службы.
-
понижение уровня обслуживания: Для обеспечения нормальной работы основного бизнеса при большом количестве запросов, по фактической бизнес-ситуации и трафику, приоритет некоторых сервисов понижен, а политика не обрабатывается или обрабатывается по-простому
Реализация перехода на более раннюю версию услуги может быть основана на ручном переключении на более раннюю версию (seckill, продвижение электронной коммерции и т. д.) и автоматическом обнаружении (тайм-аут, количество отказов, сбоев), а предохранитель можно понимать как процесс понижения на сервисную ошибку.
2 Почему необходимо понижение ограничения тока?
Объем доступа, предоставляемый системой, ограничен.Если управление потоком не выполняется, системные ресурсы будут заняты, а услуги будут отключены по времени, так что все пользователи не смогут их использовать.Количество запросов контролируется ограничением потока службы, а деградация услуг экономит неосновные услуги на системных ресурсах, максимально использовать системные ресурсы и обслуживать как можно больше пользователей.
3 Введение в Sentinel
Sentinel: средство защиты трафика распределенных систем — это легкий продукт для управления трафиком, исходный код которого был открыт командой промежуточного программного обеспечения Alibaba в июле 2018 года для архитектуры распределенных сервисов. Защита нагрузки и другие параметры для защиты стабильности системных сервисов.
Экосистема Sentinel с открытым исходным кодом:
Функции
1 Общее введение
Sentinel обладает следующими характеристиками:
Богатые сценарии приложений: Мгновенное ограничение тока отключения, сглаживание пиков сообщений и заполнение промежутков, управление кластерным потоком, предохранители в реальном времени для недоступных приложений и т. д.
Полный мониторинг в режиме реального времени: Sentinel также предоставляет функции мониторинга в реальном времени. В консоли можно увидеть данные второго уровня отдельной машины, подключенной к приложению, и даже агрегированную работу кластера с масштабом менее 500
Обширная экосистема с открытым исходным кодом: Sentinel предоставляет готовые модули интеграции с другими платформами/библиотеками с открытым исходным кодом, такие как интеграция с Spring Cloud, Dubbo, gRPC. Вам нужно только ввести соответствующие зависимости и выполнить простую настройку для быстрого доступа к Sentinel.
Полная точка расширения SPI: Sentinel предоставляет простой в использовании и полный интерфейс расширения SPI. Логику можно быстро настроить, реализуя интерфейсы расширения. Например, управление пользовательскими правилами, адаптация источников динамических данных и т. д.
Sentinel разделен на две части:
Приборная доскаОснованный на разработке Spring Boot, его можно запускать сразу после упаковки, никаких дополнительных контейнеров приложений, таких как Tomcat, не требуется.
Базовые библиотеки (клиент Java)Не зависит ни от какой фреймворка/библиотеки, может работать во всех средах выполнения Java, а также имеет хорошую поддержку Dubbo/Spring Cloud и других фреймворков.
2 Особенности консоли
-
мониторинг в реальном времени Поддержка автоматического обнаружения списка компьютеров кластера, состояния работоспособности службы, QPS передачи/отклонения вызова службы, времени вызова, статистики графика
-
Управление правилами и push Поддерживает настройку правил управления потоком, перехода на более раннюю версию и горячих точек на интерфейсе и активирует их в режиме реального времени.
-
Аутентификация Консоль поддерживает настраиваемые интерфейсы аутентификации и предоставляет основные функции входа в систему.
3 основные функции библиотеки
(1) Управление потоком приложений
Для управления трафиком указанного экземпляра приложения отслеживайте количество запросов в секунду трафика приложения или количество одновременных потоков и контролируйте трафик при достижении указанного порога, чтобы избежать перегрузки мгновенным пиком трафика, тем самым обеспечивая высокую доступность приложения.
К средствам управления потоком относятся:
- полный отказ
- Прогрев, то есть режим предварительного нагрева/холодного пуска, позволяет медленно увеличивать проходящий поток и постепенно увеличивать его до верхнего предела порога в течение определенного периода времени, давая холодной системе время прогрева для предотвращения холодная система от мгновенного переполнения
- Ставьте в очередь с одинаковой скоростью, строго контролируйте интервал времени между прохождением запросов и разрешайте прохождение запросов с одинаковой скоростью
(2) Управление потоком кластера
В отличие от приложения, выполняющего управление потоком одного экземпляра приложения для проверки текущего порога ограничения, кластер вызывается только для управления общим ограничителем потока для всего кластера, например, в следующих сценариях:
- Ограничьте общее число запросов в секунду пользователя, вызывающего API, и приложение, предоставляющее API, развертывает несколько экземпляров на нескольких компьютерах.
- Поскольку трафик нескольких экземпляров приложений неравномерен, некоторые машины начинают ограничивать ток, когда общее количество вызовов кластера не достигнуто.
Только полагаясь на размер одной машины для ограничения общего трафика, вы не сможете точно ограничить общий поток.Общее количество вызовов всего кластера можно точно контролировать через кластер.В сочетании с текущим ограничением одной машины, эффект управления потоком может быть лучше воспроизведен.
(3) Управление потоком через шлюз
Sentinel поддерживает текущее ограничение основных шлюзов API, таких как шлюз весеннего облака и ZuUL
Поток шлюза управляет правилами ограниченного потока, настроенными для сцены шлюза API, что позволяет использовать ограниченный поток для разных маршрутов или пользовательских пакетов API, поддерживает настраиваемые текущие ограничения для путей, параметров, заголовка, IP-адреса источника и т. д. в запросе. .
(4) Переход на более раннюю версию
Если ресурс в звене вызова нестабилен, это в конечном итоге приведет к накоплению запросов.Через фузинг и даунгрейд, когда ресурс в звене звонка находится в нестабильном состоянии (в том числе тайм-аут звонка, увеличение доли исключений, и увеличение количества исключений) ), ограничить вызов этого ресурса, сделать так, чтобы запрос не выполнялся быстро, и избегать воздействия на другие ресурсы и возникновения каскадных ошибок.
Когда ресурс понижается, вызовы ресурса автоматически удаляются в течение следующего временного окна понижения (поведение по умолчанию — выбрасывать DegradeException), по истечении этого временного окна предохранитель отключается, и в следующий раз ресурс снова нестабилен. автоматический предохранитель
(5)
Ограничение тока параметра Точки доступа – это данные, к которым часто обращаются. Ограничение тока параметра точки доступа будет учитывать параметры точки доступа во входящих параметрах и ограничивать ток вызовов ресурсов, содержащих параметры точки доступа, в соответствии с настроенным порогом ограничения тока и режимом. Например следующий сценарий:
- Идентификатор пользователя — это параметр, который ограничивает область QPS для пользователя интерфейсом.
- Идентификатор товара — параметр, который ограничивает частоту интерфейса заказа товара.
(6) Системное адаптивное ограничение тока
Чтобы решить традиционное решение: адаптивное ограничение тока в зависимости от загрузки операционной системы (загрузка1, просматривается с временем безотказной работы под Linux), которое вызывает проблемы с задержкой и медленным восстановлением производительности системы, Sentinel принимает новую идею: в соответствии с системой может обрабатывать запросы, а входящие запросы сбалансированы, а не дросселируются на основе косвенного показателя (загрузка системы)
Цель состоит в том, чтобы:В случае, если система не перегружена, пропускная способность системы должна быть максимально улучшена, а не нагрузка должна быть ниже определенного порога.
Правила защиты системы контролируются входящим трафиком на уровне приложений, а данные приложений отслеживаются по четырем измерениям: общая нагрузка, RT, входящее количество запросов в секунду и количество потоков одной машины.
- Нагрузка: защита системы срабатывает только тогда, когда загрузка системы1 превышает пороговое значение, а текущее количество одновременных потоков в системе превышает емкость системы. Емкость системы рассчитывается как maxQps * minRt (минимальное время отклика), контролируемое временем работы системы.
- RT: Когда среднее RT (время отклика) всего входящего трафика на одной машине
- Количество потоков: Когда весь трафик портала на одной машине
- Ingress QPS: когда QPS всего входящего трафика на одной машине
(7) Управление черным и белым списками
Черный и белый список Sentinel ограничивает, передается ли ресурс в соответствии с источником запроса (происхождением) ресурса.Если белый список настроен, только источник запроса может пройти, если источник запроса находится в белом списке; если черный список настроен, источник запроса не пройдет, если источник запроса находится в черном списке, а остальные проходят через
Быстрый старт
1 Установите консоль
Со страницы выпуска github (GitHub.com/alibaba/s ru…) Загрузите последний пакет jar консоли
Запустите консоль из командной строки:
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
2 Access Access Sentinel
Sentinel адаптирует распространенные фреймворки, включая Dubbo, Spring Boot, Spring Webflux, GRPC, ZUUL, Spring Cloud Gateway, RocketMQ, Web Servlet, которые поддерживают доступ TRY-Catch или использование родной Java.
Ниже приведен пример общей аннотации Spring Boot: Представляем SENTINEL для адаптации Spring Cloud:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
application.yml указывает адрес консоли:
spring:
cloud:
sentinel:
transport:
dashboard: IP:端口号
Определите ресурсы, которые требуют ограниченных ограничений:
@RestController
public class TestController {
@GetMapping(value = "/hello")
// 定义需要限流的资源名称为hello
@SentinelResource("hello")
public String hello() {
return "Hello Sentinel";
}
}
Когда интерфейс HTTP Hello запрашивается один раз, клиент Sentinel запускается для инициализации интерфейса, чтобы увидеть интерфейс на консоли.
Добавьте правила управления потоком:
Если вы часто запрашиваете интерфейс, вы можете увидеть, что некоторые запросы отклоняются:
Примечание. Описанный выше метод настройки не является постоянным и не рекомендуется для производственных сред.
3 конфигурации правил
Sentinel обеспечивает поддержку источника данных динамических правил для динамического управления и чтения настроенных правил. Интерфейсы ReadableDataSource и WritableDataSource, предоставляемые Sentinel, просты и очень удобны в использовании.
Источник динамических правил Sentinel адаптирован для общих центров конфигурации и удаленного хранилища.В настоящее время он поддерживает различные источники динамических правил, такие как Nacos, ZooKeeper, Apollo, Redis и т. д., которые могут охватывать множество производственных сценариев.
Принцип реализации
Ниже описаны основные принципы клиента Sentinel.
1 Основные понятия
-
Ресурсы В Sentinel методы и блоки кода, которые должны быть защищены трафиком, могут называться ресурсами, и каждый ресурс должен определять уникальное существительное ресурса для сопоставления связанных правил.
-
Вход Класс входа функции Sentinel, Entry может быть создан автоматически путем адаптации к основным платформам или явно создан с помощью аннотации или вызова SphU API.После создания выполняется сопоставление и проверка ресурсов и правил.
-
Слот Функциональные слоты создаются классом Enty. Каждый ресурс соответствует серии слотов. Слоты реализуют сбор информации о ресурсах, сопоставление правил и проверку. Несколько слотов формируются путем формирования цепочки слотов. При входе и выходе из ресурсов они основаны на модель цепочки ответственности.Вызов методов entry() и exit()
2 Как это работает
String resourceName = "resourceName";
Entry entry = null;
try {
entry = SphU.entry(resourceName);
System.out.println("resource running");
} catch (BlockException e) {
// 限流
throw e;
} catch (Throwable e) {
e.printStackTrace();
throw e;
} finally {
if (entry != null) {
entry.exit();
}
}
Основной процесс выглядит следующим образом:
- Перед вводом метода ресурса на основе SphU create Entry, Entry получает ресурс, связанный с цепочкой слотов, для поиска информации, создает, если не найден, и вызывает метод ввода шаблона цепочки ответственности на основе слота ()
- вызов метода ресурса
- После вызова метода ресурса активируйте логику выхода () слота через вход
Сравнение фреймворков
Sentinel | Hystrix | resilience4j | |
---|---|---|---|
Карантинная политика | Изоляция количества сигналов (поток ограничения параллельной линии) | Изоляция пула потоков/изоляция семафора | Изоляция семафора |
стратегия понижения рейтинга автоматических выключателей | На основе времени отклика, коэффициента исключений, количества исключений | на основе коэффициентов аномалий | На основе коэффициента исключений, времени отклика |
Реализация статистики в реальном времени | Скользящее окно (LeapArray) | Скользящее окно (на основе RxJava) | Ring Bit Buffer |
Динамическая конфигурация правил | Поддерживает несколько источников данных | Поддерживает несколько источников данных | Ограниченная поддержка |
Расширяемость | несколько точек расширения | форма плагина | форма интерфейса |
Поддержка на основе аннотаций | служба поддержки | служба поддержки | служба поддержки |
Ограничение | На основе количества запросов в секунду, поддержка текущего ограничения на основе отношения вызовов | ограниченная поддержка | Rate Limiter |
формирование трафика | Поддержка режима предварительного нагрева, режима постоянной скорости, режима очереди предварительного нагрева | не поддерживается | Простой режим ограничения скорости |
Система адаптивной защиты | служба поддержки | не поддерживается | не поддерживается |
консоль | Предоставляет готовую консоль для настройки правил, просмотра мониторинга второго уровня, обнаружения машин и т. д. | Простой мониторинг и просмотр | Консоль не предусмотрена, но может быть подключена к другим системам мониторинга |
Стоит добавить: по сравнению с текущим ограничением Hystrix, основанным на изоляции пула потоков, хотя это решение имеет лучшую изоляцию, цена заключается в том, что количество потоков слишком велико, а накладные расходы на переключение контекста потока относительно велики, особенно для низкопроизводительных систем. вызовы с задержкой относительно большое влияние.
Ограничение одновременных потоков Sentinel не отвечает за создание и управление пулами потоков, а просто подсчитывает количество потоков в контексте текущего запроса.Если порог превышен, новые запросы будут немедленно отклонены, эффект аналогичен изоляции семафора.
Ссылаться на
Официальная документация Sentinel
«Миграция из Hystrix в Sentinel»