Как выбрать тип управления трафиком?

задняя часть

封面

Double Eleven приближается, с 2009 года第一届В начале Double Eleven объем транзакций составлял всего 50 млн. К 2019 году прошлого года объем транзакций достиг 268,4 млрд. Этот год положил начало第十二届Double Eleven, я очень рад думать об этом.

Людям из Али нравится рассматривать Double Eleven как тимбилдинг, широко распространенное изречение:Драка — лучший тимбилдинг, тех, кто не участвовал в Double Eleven, называют коллегами, а тех, кто участвовал в Double Eleven, называют товарищами по оружию.

В прошлой статье я объяснил механизм сервисной лавины и автоматического выключателя через историю Троецарствия, и сам построил колесо:熔断器. И эта статья объяснит два компонента управления трафиком, используемые производителями первого уровня:Sentinelа такжеHystrixи их горизонтальное сравнение.

Основное содержание этой статьи следующее:

img

Эта статья была включена в мойGithub: GitHub.com/Jackson0714… Нажмите на мою ссылку Github

1. Предохранение и деградация, ограничение тока и изоляция

Перед лицом большого количества параллельного трафика мы обычно используем четыре метода (предохранитель и переход на более раннюю версию, ограничение тока и изоляцию), чтобы предотвратить влияние мгновенного большого трафика на систему. Два дорожных охранника, которые будут представлены сегодня, специально используются в этом отношении. Далее, позвольте мне сделать небольшое слепое сканирование для моих одноклассников.

  • Что такое предохранитель?

熔断场景图@悟空聊架构

Ключевые слова:断路保护. Например, когда служба A вызывает службу B из-за проблем с сетью, или служба B не работает, или время обработки службы B велико, время запроса слишком велико.Если это происходит несколько раз в течение определенного периода времени, B может быть напрямую отключенным (A больше не запрашивает B). Запрос на вызов службы B напрямую возвращает поврежденные данные, не дожидаясь выполнения службы B. Следовательно, проблема службы B не будет каскадироваться на службу A.

  • Что такое даунгрейд?

降级场景图@悟空聊架构

Ключевые слова:返回降级数据. Веб-сайт находится в периоде пикового трафика, и нагрузка на сервер резко возрастает.В соответствии с текущей бизнес-ситуацией и трафиком некоторые службы и страницы стратегически понижены (остановите службу, и все вызовы будут напрямую возвращать данные с пониженной версией). Таким образом, снижается нагрузка на серверные ресурсы, обеспечивается нормальная работа основного бизнеса, а клиенты и большинство клиентов получают правильный ответ. Данные понижения могут быть просто поняты как быстро возвращающие ложь, а интерфейсная страница сообщает пользователю: «Сервер в настоящее время занят, повторите попытку позже».

  • Что такое дросселирование?

    限流场景图@悟空聊架构

    Контролируйте запрошенный трафик, только放行部分请求, чтобы служба могла выдерживать нагрузку трафика, не превышающую ее пропускную способность.

  • Та же самая точка предохранителя и понижения?

    • И размыкание цепи, и ограничение тока должны обеспечивать доступность и надежность большинства сервисов в кластере. Предотвратите сбой основных служб.
    • Ощущение у конечного пользователя такое, что какая-то функция недоступна.
  • В чем разница между предохранителем и понижением?

    • Автоматический выключатель — это операция, которая активно срабатывает при возникновении неисправности в вызываемом расцепителе.
    • Понижение основано на глобальных соображениях, останавливая некоторые обычные службы и освобождая ресурсы.
  • Что такое карантин?

    • Каждая служба рассматривается как независимая операционная система, даже если в системе есть проблема, она не повлияет на другие службы.

2. Хайстрикс

Что такое Хайстрикс

Hystrix: платформа для обеспечения высокой доступности. Произведено Netflix (Netflix можно понимать как отечественные видеосайты, такие как iQiyi).

История Хайстрикс

  • В 2011 году команда API разработала структуру Hystrix, чтобы повысить удобство использования и стабильность системы.

  • В 2012 году регион Hystrix был относительно зрелым и стабильным. Другие команды также начали использовать Hystrix.

  • В ноябре 2018 года Hystrix объявила на своей домашней странице Github, что больше не будет открывать новые функции, рекомендуя разработчикам использовать другие проекты с открытым исходным кодом, которые все еще активны. Тем не менее, Hystrix по-прежнему очень ценен и мощен, и его используют многие интернет-компании первого уровня в Китае.

Философия дизайна Hystrix

  • Лавинный эффект блокировки сервисов.
  • Быстро терпите неудачу и быстро восстанавливаетесь.
  • Изящная деградация.
  • Используйте методы изоляции ресурсов, такие как переборка (метод изоляции переборки), зона плавания (техника плавательной дорожки), автоматический выключатель (метод автоматического выключателя).
  • Мониторинг, оповещение, эксплуатация и техническое обслуживание в режиме, близком к реальному времени.

Технология изоляции пула потоков Hystrix

Используйте изоляцию пула потоков. Например, есть 3 службы A, B и C. В пуле потоков каждой службы выделяется 10, 20 и 30 потоков. Когда используется 10 потоков в пуле потоков службы A, если вызов По мере увеличения объема запросов службы А невозможно добавить больше потоков, потому что потоки, выделенные службой А, были израсходованы, а потоки других служб не будут заняты, так что другие службы не будут затронуты. Hystrix по умолчанию использует режим изоляции пула потоков.

线程池隔离技术

Преимущества технологии изоляции пула потоков

  • Зависимые службы имеют изолированные пулы потоков, и даже если их собственный пул заполнен, это не повлияет на вызовы других служб.
  • Сообщается о состоянии работоспособности пула потоков, а конфигурация вызовов зависимых служб может быть изменена почти в реальном времени.
  • Пул потоков имеет асинхронные характеристики и может создавать уровень асинхронных вызовов.
  • Механизм обнаружения тайм-аута особенно полезен для межсервисных вызовов.

Недостатки технологии изоляции пула потоков

  • Сам пул потоков принесет некоторые проблемы, такие как переключение потоков и управление потоками, что, несомненно, увеличивает нагрузку на ЦП.
  • Если использование потоков в пуле потоков низкое, это определенно пустая трата времени.

Технология изоляции семафоров Hystrix

Как показано на следующем рисунке: Проще говоря, в пуле есть определенное количество семафоров. Прежде чем служба A вызовет службу B, она должна запросить семафор из пула. Только после получения заявки служба B может быть называется.获取信号量

Сравнение сценариев между изоляцией пула потоков и семафором

  • Технология изоляции пула потоков, подходит для большинства сценариев, но вам нужно установить время ожидания службы.
  • Технология изоляции семафоров, подходит для более сложных внутренних дел, не вызывает проблем с сетевыми запросами.

3. Страж

3.1 Что такое Sentinel?

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

3.2 История Sentinel

  • В 2012 году родился Sentinel, и его основная функция — контроль входящего потока.
  • С 2013 по 2017 год Sentinel быстро развивался в Alibaba Group и стал базовым технологическим модулем, охватывающим все основные сценарии. Sentinel также накопил большое количество сценариев консолидации трафика и производственных практик.
  • В 2018 году исходный код Sentinel был открыт, и он продолжает развиваться.
  • В 2019 году Sentinel продолжил изучение направления многоязычной экспансии и запустил нативную версию C++, а также запустил поддержку управления потоком кластера Envoy для сценариев Service Mesh, чтобы решить проблему многоязычного ограничения тока при Архитектура Service Mesh.
  • В 2020 году будет запущена версия Sentinel Go, чтобы продолжить переход к облачным технологиям.

3.3 Особенности Sentinel

  • Богатые сценарии приложений.Поддерживайте основные сценарии Double Eleven от Ali, такие как всплески, пики и спады сообщений, управление кластерным потоком и автоматические выключатели в реальном времени, которые недоступны в нисходящем направлении.
  • Полный мониторинг в режиме реального времени.Вы можете увидеть данные второго уровня отдельной машины, подключенной к приложению, а также сводку по кластеру.
  • Обширная экосистема с открытым исходным кодом.Spring Cloud, Dubbo и gRPC могут получить доступ к Sentinel.
  • Полная точка расширения SPI.Реализуйте интерфейсы расширения для быстрой настройки логики.

Подведите итог картинке:

Sentilel 的主要特性

3.4 Состав Стража

  • Базовая библиотека (Java-клиент) не зависит ни от какой платформы/библиотеки, может работать во всех средах выполнения Java и хорошо поддерживает Spring Cloud, Dubbo и другие платформы.
  • Консоль (Dashboard) разработана на основе Spring Boot и может запускаться сразу после упаковки без дополнительных контейнеров приложений, таких как Tomcat.

3.5 Ресурсы Sentinel

Ресурс в Sentinel является основной концепцией и может быть чем угодно в приложении Java, предоставляемой службой или даже фрагментом кода.

Код, который можно определить с помощью Sentinel API, — это ресурс, который может быть защищен Sentinel. Ресурсы можно идентифицировать несколькими способами:

  • подпись метода.
  • URL.
  • название службы и т. д.

3.6 Концепция дизайна Sentinel

Sentinel, как диспетчер трафика, может корректировать случайные запросы в соответствующие формы по мере необходимости, как показано на следующем рисунке:

流量整形

4. Сравнение

4.1 Сравнение конструкции изоляции

  • Hystrix

Hystrix предлагает две стратегии изоляции: изоляцию пула потоков и изоляцию семафоров.

Наиболее рекомендуемой и наиболее часто используемой в Hystrix является изоляция пула потоков. Преимущество изоляции пула потоков заключается в том, что он имеет высокую степень изоляции и не будет влиять на другие ресурсы, но у самого потока есть свои проблемы.Переключение контекста потока потребляет больше ресурсов ЦП.Если требования к низкой задержке относительно высоки, влияние по-прежнему довольно велико.Кроме того, создание потока требует выделения памяти.Чем больше потоков создается, тем больше памяти необходимо выделить. А если для каждого ресурса создается пул потоков, то переключение потоков принесет больше потерь.

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

  • Sentinel

Sentinel может обеспечить функцию изоляции семафора за счет управления потоком в режиме номера параллельного потока, а также имеет режим деградации плавкого предохранителя времени отклика, который предотвращает заполнение параллельного номера слишком большим количеством медленных вызовов и влияние на всю систему.

4.2. Сравнение понижения номинала предохранителя

И Sentinel, и Hystrix основаны на схеме автоматического выключателя. Оба поддерживают автоматический выключатель на основе коэффициента исключений, но Sentinel является более мощным и может выполнять переход на более раннюю версию автоматического выключателя в зависимости от времени отклика, коэффициента исключений и количества исключений.

4.3 Сравнение статистики в реальном времени

И Sentinel, и Hystrix основаны на скользящих окнах для статистики в реальном времени, но Hystrix основан наRxJavaМодель, управляемая событиями, которая публикует события ответа, когда вызов службы завершается успешно/сбой/тайм-аут, и, наконец, получает поток статистических данных индикатора в реальном времени посредством серии преобразований и агрегирования, которые могут использоваться автоматическими выключателями или информационными панелями. Сентинел основан наLeapArrayраздвижное окно.

Пять, выдающиеся особенности Sentinel

В дополнение к трем сравнениям, упомянутым выше, у Sentinel есть некоторые функции, которых нет у Hystrix.

5.1, управление потоком

управление потоком:Принцип заключается в отслеживании таких показателей, как количество запросов в секунду или количество одновременных потоков трафика приложения, и управлении трафиком при достижении указанного порога, чтобы избежать перегрузки мгновенным пиком трафика, тем самым обеспечивая высокую доступность приложения.

Sentinel может выполнять управление потоком на основе количества запросов в секунду/параллельности или управление потоком на основе взаимосвязи вызовов.

Существует несколько способов управления потоком на основе QPS:

  • категорический отказ:Когда QPS превышает определенный порог, он напрямую отклоняется. Применяется к ситуациям, когда возможности обработки системы точно известны.
  • Медленный старт, разминка:Когда система находится на низком уровне воды в течение длительного времени, когда поток внезапно увеличивается, прямое подтягивание системы к высокому уровню воды может мгновенно привести к перегрузке системы. Благодаря «холодному запуску» проходящий поток медленно увеличивается и постепенно увеличивается до верхнего предела порога в течение определенного периода времени, давая холодной системе время прогрева, чтобы избежать перегрузки холодной системы.

慢启动预热模式原理图

  • Равномерная очередь:Запросы проходят с одинаковой скоростью, соответствующей алгоритму дырявого ведра.

匀速排队模式原理图

Управление потоком на основе отношений вызовов:

  • Ограничение тока в зависимости от вызывающего абонента.
  • Ограничение тока согласно записи вызывающей ссылки: ограничение тока ссылки.
  • Регулирование трафика на основе ресурсов с отношениями: Регулирование трафика ассоциации.

5.2 Система адаптивного ограничения тока

Адаптивное ограничение тока системы Sentinel контролирует входящий трафик приложения из общего измерения.TCP BBRИдея состоит в том, чтобы объединить индикаторы мониторинга нескольких измерений, таких как нагрузка приложений, использование ЦП, общее среднее время RT, количество запросов в секунду на входе и количество одновременных потоков.Благодаря стратегиям адаптивного управления потоком можно сбалансировать входящий трафик системы и системную нагрузку. Пусть система работает с максимальной пропускной способностью, насколько это возможно, обеспечивая при этом общую стабильность системы.

自适应限流原理图

Представим себе процесс обработки запросов системой как водопровод.Входящий запрос - налить воду в этот водопровод.При бесперебойной обработке заявки запрос не нужно ставить в очередь,и проходит напрямую по водопроводу. ВР этого запроса наименьшее, иначе при накоплении запросов время обработки запросов становится: время ожидания + минимальное время обработки.

  • Вывод 1: Если мы сможем обеспечить количество воды в водопроводе и позволить воде течь бесперебойно, то увеличения количества запросов в очереди не будет, то есть нагрузка на систему в это время не ухудшится дальше.

  • Вывод 2: Когда скорость потока на входе поддерживается на уровне максимального значения скорости потока на выходе из водопровода, пропускная способность водопровода может быть использована максимально.

5.3 Панель мониторинга и управления в режиме реального времени

Sentinel предоставляет облегченную консоль с открытым исходным кодом, которая обеспечивает обнаружение компьютеров и управление их работоспособностью, мониторинг (отдельных компьютеров и кластеров), управление правилами и функции отправки.

Sentinel 控制台

5.4. Развитие и экология

Sentinel адаптирован для Spring Cloud, Dubbo и gRPC.Внедрив зависимости и простую настройку, можно быстро получить доступ к Sentinel.Считается, что Sentinel станет отличным инструментом для контроля трафика в будущем. Я предпочитаю Сентинел.

5.5, Краткий обзор сравнения Sentinel и Hystrix

Hystix 和 Sentinel 对比总结

напиши в конце

Некоторые читатели спрашивали меня, как спроектировать систему seckill. В предыдущей статье я раскрыл архитектурный проект системы seckill. Ниже я резюмирую восемь проблемных моментов системы seckill:

秒杀场景关注点

  • Служба с единой ответственностью, независимое развертывание
  • Разогрев инвентаря, быстрый вывод
  • Шифрование ссылок Seckill
  • Динамическое и статическое разделение
  • Перехват злонамеренного запроса
  • Движение в шахматном порядке
  • Ограничение тока, предохранитель и переход на более раннюю версию
  • бритье очереди

Я Гоку, усердно работаю, чтобы стать Супер Сайяном.

Увидимся в следующий раз!