Когда дело доходит до текущих ограничивающих и деградирующих компонентов Spring Cloud, первое, что обычно приходит на ум, — это Hystrix от Netflix.
Однако в конце 2018 года Netflix объявил, что больше не ведет активную разработку Hystrix, и проект будет находиться в режиме обслуживания. Чиновник сказал, что версия Hystrix 1.5.18 достаточно стабильна, чтобы удовлетворить потребности существующих приложений Netflix, поэтому она сосредоточит свое внимание на адаптивной реализации и уделит больше внимания реагированию на производительность приложения в реальном времени. Что касается требований к автоматическим выключателям новых приложений, для их реализации будут использоваться другие проекты.Netflix рекомендует Resilience4j.
Являясь важным пакетом Spring Cloud Netflix, Hystrix стал предпочтительным приложением для обеспечения стабильности микросервисов. На самом деле, в дополнение к Netflix и Resilience4j, есть новая опция для текущего ограничения и понижения версии, которая является компонентом Sentinel от Alibaba.
1. Введение в Sentinel с открытым исходным кодом Alibaba
В августе 2018 года Alibaba объявила, что исходный код Sentinel будет открытым, и в то же время она выпустила адаптер, объединяющий Dubbo, и передала его в дар сообществу Apache Dubbo.
1. История Сентинел
В 2012 году родился Sentinel, и его основная функция — контроль входящего потока. С 2013 по 2017 год Sentinel быстро развивался в Alibaba Group и стал базовым технологическим модулем, охватывающим все основные сценарии. Sentinel также накопил большое количество сценариев консолидации трафика и производственных практик. В 2018 году исходный код Sentinel был открыт, и он продолжает развиваться.
2. Адаптация Sentinel к основным платформам
Sentinel разделен на две части:
Базовая библиотека (Java-клиент) не зависит ни от какой платформы/библиотеки, может работать во всех средах выполнения Java, а также имеет хорошую поддержку таких платформ, как Dubbo/Spring Cloud. Консоль (Dashboard) разработана на основе Spring Boot и может запускаться сразу после упаковки без дополнительных контейнеров приложений, таких как Tomcat.
Sentinel адаптируется к различным основным платформам, включая Spring Cloud, Dubbo и т. д. Открытый исходный код Sentinel обогащает систему микросервисов с открытым исходным кодом Alibaba и предоставляет больше решений для компонентов стабильности.
2. Какую проблему решает Sentinal?
В сценарии крупномасштабной микросервисной архитектуры, чтобы избежать лавин сервисов, сократить время простоя и максимально повысить доступность сервисов. Ограничение тока и понижение уровня являются очень важными средствами, а конкретные методы реализации можно свести к восьмизначным девизам, а именно: ограничение тока, понижение уровня, плавкие предохранители и изоляция. Sentinel использует трафик в качестве точки входа для защиты стабильности сервисов от нескольких измерений, таких как управление трафиком, переход на более раннюю версию автоматического выключателя и защита системной нагрузки.
Ограничение
Как следует из названия, текущее ограничение заранее устанавливает наивысший порог QPS для каждого типа запроса, если он выше установленного порога, то запрос будет возвращен напрямую, а последующие ресурсы вызываться не будут. Sentinel предоставляет два метода статистики трафика: один – подсчет количества одновременных потоков, а другой – подсчет количества запросов в секунду. Когда количество одновременных потоков превышает определенный порог, новый запрос будет немедленно отклонен. Когда количество запросов в секунду превышает определенный порог, новый запрос будет немедленно отклонен.Установленное пороговое значение, система может ответить тремя способами: прямой отказ, холодный запуск и устройство с постоянной скоростью, таким образом, играя роль управления потоком.
Слияние понижения
Если вызов целевой службы происходит медленно или имеет большое количество тайм-аутов, вызов службы будет взорван в это время.При последующих запросах на вызов целевая служба не будет вызываться, а вернется непосредственно для быстрого освобождения ресурсов. . Для слияния обычно требуется установка различных стратегий восстановления, и если целевая служба улучшится, вызов будет возобновлен. Между службами будет существовать взаимозависимость. Например, служба A может выполнять десятки тысяч запросов в секунду в секунду, а служба B не может выполнять десятки тысяч запросов в секунду. Итак, как обеспечить, чтобы при частом вызове службы A службы B служба B все еще работает нормально? Более распространенная ситуация заключается в том, что когда служба A вызывает службу B, у службы B слишком большое время отклика, поскольку она не может отвечать на высокочастотные вызовы, что приводит к слишком долгому ответу службы A, что, в свою очередь, вызывает цепную реакцию, влияющую на вся цепочка зависимостей. В настоящее время для всех приложений в системе требуется метод слияния и понижения версии. Sentinel объединяет или понижает сервисы, ограничивая количество одновременных потоков и понижая ресурсы по времени отклика.
форма
Обычно трафик, с которым мы сталкиваемся, является случайным, нерегулярным и неконтролируемым, но вычислительная мощность системы часто ограничена, необходимая для обработки трафика. Следующее изображение является хорошей демонстрацией формирования трафика:
Sentinel управляет трафиком по трем измерениям отношения вызова ресурса, индекса операции и эффекта управления, и его можно гибко комбинировать при использовании.
Защита от нагрузки на систему
Микросервисы очень подвержены лавинным эффектам, и необходимо избегать опаснейшей ситуации простоя сервиса.
Предотвращение схода лавин является важной частью защиты системы. Если нагрузка системы высока, если запрос продолжает поступать, это может привести к сбою системы и невозможности ответа. Sentinel также предоставляет возможности адаптивной защиты на уровне системы.В кластерной среде балансировка сетевой нагрузки будет перенаправлять трафик, который должен передаваться с этой машины, на другие машины.
3. Основные характеристики Sentinel
Сценарии применения
Sentinel в течение почти 10 лет реализовывал основные сценарии Double Eleven от Alibaba для продвижения трафика, такого как всплески (то есть всплески трафика контролируются в диапазоне, который может выдержать пропускная способность системы), сглаживание пиков сообщений и заполнение промежутков, управление кластерным трафиком, слияние в реальном времени вниз по течению с приложениями и т. д.
Поддержка мониторинга в реальном времени
Sentinel также предоставляет возможности мониторинга в реальном времени. В консоли можно увидеть данные второго уровня отдельной машины, подключенной к приложению, и даже агрегированную работу кластера с масштабом менее 500.
Адаптация к различным компонентам с открытым исходным кодом
Sentinel предоставляет готовые модули интеграции с другими платформами/библиотеками с открытым исходным кодом, такие как интеграция с Spring Cloud, Dubbo, gRPC. Вам нужно только ввести соответствующие зависимости и выполнить простую настройку для быстрого доступа к Sentinel.
Поддержка SPI, легкость расширения
Sentinel предоставляет простой в использовании и полный интерфейс расширения SPI. Вы можете быстро настроить логику, реализовав интерфейсы расширения. Например, управление пользовательскими правилами, адаптация источников динамических данных и т. д.
4. Экосистема Sentinel с открытым исходным кодом
Sentinel поддерживает текущие основные комплекты для разработки микросервисов, особенно Dubbo и Spring Cloud, и является важной реализацией комплекта Spring Cloud Alibaba.
5. Сентинел против Хайстрикс
В центре внимания Hystrix находится отказоустойчивый механизм, основанный на изоляции и предохранителе.Вызов с истечением времени ожидания или предохранителем быстро выйдет из строя, и он может обеспечить резервный механизм.
Сентинел фокусируется на:
- Диверсифицированный контроль потока
- Слияние понижения
- Защита от нагрузки на систему
- Мониторинг в реальном времени и консоль
Лучше картинка, чем предисловие, составим таблицу для сравнения возможностей Sentinel и Hystrix.
Функция | Sentinel | Hystrix | resilience4j |
---|---|---|---|
Карантинная политика | Изоляция семафора (ограничение количества одновременных потоков) | Изоляция пула потоков/изоляция семафора | Изоляция семафора |
стратегия понижения рейтинга автоматических выключателей | На основе времени отклика, коэффициента исключений, количества исключений | на основе коэффициентов аномалий | На основе коэффициента исключений, времени отклика |
Реализация статистики в реальном времени | Скользящее окно (LeapArray) | Скользящее окно (на основе RxJava) | Ring Bit Buffer |
Динамическая конфигурация правил | Поддерживает несколько источников данных | Поддерживает несколько источников данных | Ограниченная поддержка |
Расширяемость | несколько точек расширения | форма плагина | форма интерфейса |
Поддержка на основе аннотаций | служба поддержки | служба поддержки | служба поддержки |
Ограничение | На основе количества запросов в секунду, поддержка текущего ограничения на основе отношения вызовов | ограниченная поддержка | Rate Limiter |
формирование трафика | Поддерживает режим предварительного нагрева, режим постоянной скорости и режим очереди предварительного нагрева (настраивается в правиле трафика) | не поддерживается | не поддерживается |
Система адаптивной защиты | служба поддержки | не поддерживается | не поддерживается |
приставка | Готовая консоль для настройки правил, просмотра мониторинга второго уровня и обнаружения машин | Простой мониторинг и просмотр | Консоль не предусмотрена, но может быть подключена к другим системам мониторинга |
Ссылаться на
Официальная документация SENTINEL
Отсканируйте код, чтобы подписаться на официальный аккаунт: Architecture Evolution, получайте техническую информацию и оригинальные статьи из первых рук.