Слово: как объяснить, что объяснить девушке?

Java задняя часть
Слово: как объяснить, что объяснить девушке?

В последнее время я был занят, днем ​​ходил на работу, а ночью брал интервью, поэтому у меня нет времени следить за новостями. Как-то вечером я закончил интервью по телефону и собирался написать оценку интервью, когда моя девушка подошла со своим мобильным телефоном и спросила меня с озадаченным лицом:

существует"Как объяснить девушке, почему нельзя изменить адрес доставки на Double Eleven«Мы ввели знания о QPS, RT, количестве одновременных пользователей и максимальном количестве потоков. Мы знаем, что если количество одновременных запросов программной системы превысит оптимальное количество потоков в системе, это приведет к жесткой конкуренции за ресурсы, а при нехватке или даже исчерпании ресурсов всю систему ждет катастрофа.

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

На этот раз я расскажу о том, что такое сервисный предохранитель и как сделать сервисный предохранитель в микросервисной архитектуре.

Зачем нужно плавить

В настоящее время за многими веб-сайтами стоит огромная «распределенный》 система, большинство взаимодействий между несколькими системами основано на 《RPC", но поскольку это удаленный вызов, доступность службы вызываемого абонента фактически не поддается контролю.

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

В приведенной выше цепочке вызовов, если одна из служб имеет медленный отклик по собственным причинам, это может привести к тому, что восходящая служба будет иметь медленное влияние.Этот цикл приведет к сбою всей системы по всем направлениям.Сервис Лавина.

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

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

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

Некоторые повторные попытки неизбежны, и если необходимо спроектировать механизм повторных попыток, если он предотвращает лавину, это также своего рода пищевые отходы.

Режим предохранителя

Circuit Breaker Pattern — это шаблон проектирования для современной разработки программного обеспечения. Используется для обнаружения ошибок и предотвращения повторного появления одних и тех же ошибок (например, служба недоступна во время обслуживания, временные системные проблемы или неизвестные системные ошибки).

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

Автоматические выключатели обнаруживают ошибки и «предотвращают» приложениям постоянные повторные попытки вызова службы, которая почти не отвечает (если только служба не достаточно безопасна для повторной попытки подключения).

Режим прерывателя цепи — важное средство для лавины микросервисной системы Fangzhi.

Относительно полный предохранитель обычно содержит три состояния:

  • закрытие

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

  • включи

    • В открытом состоянии любой запрос будет "напрямую" отклонен с сообщением об исключении.

  • полуоткрытый

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

На приведенном выше рисунке показан переход трех состояний предохранителя.

Если в процессе вызова микросервисной системы будет введен прерыватель цепи, вся система, естественно, будет иметь следующие возможности:

  • провалиться быстро: Когда автоматический выключатель включен из-за слишком большого количества сбоев при вызове удаленной службы, вызов вышестоящей службы к нижестоящей службе быстро завершается ошибкой, что может предотвратить перетаскивание вышестоящей службы.

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

Инструмент для фьюзинга

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

Однако на рынке есть фреймворки, которые уже делают это за нас. Такие как Hystrix и Sentinel, resilience4j и так далее.

Hystrix

Hystrix (https://github.com/Netflix/Hystrix) — это отказоустойчивая система с открытым исходным кодом от Netflix, которая может помочь пользователям создавать программы с высокой отказоустойчивостью и надежностью. Обеспечьте понижение версии, сплавление и другие функции.

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

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

resilience4j

После того, как Hystrix остановлен, Netflix официально рекомендует использовать resilience4j (https://github.com/resilience4j/resilience4j), который представляет собой легковесную, простую в использовании, собираемую высокодоступную структуру, поддерживающую слияние, управление частотой, изоляция, ограничение потоковой передачи, ограничение времени, повторные попытки и другие механизмы высокой доступности.

По сравнению с Hystrix имеет следующие основные отличия:

  • Вызов Hystrix должен быть инкапсулирован в HystrixCommand, в то время как Resiliousion4J предоставляет вложенные декорации, такие как функциональные интерфейсы, лямбда выражения в декораторе, поэтому вы можете использовать простой способ объединения различных высокодоступных механизмов.

  • Статистика частоты Hystrix использует метод скользящего окна, а resilience4j использует метод кольцевого буфера.

  • Что касается перехода состояния предохранителя в полуоткрытое состояние, Hystrix использует только одно выполнение, чтобы определить, выполнять ли переход состояния, в то время как resilience4j использует настраиваемое время выполнения и пороговые значения, чтобы решить, выполнять ли переход состояния, что повышает эффективность предохранителя. механизм стабильность

  • Что касается механизма изоляции, Hystrix обеспечивает изоляцию на основе пула потоков и семафора, тогда как resilience4j обеспечивает изоляцию только на основе семафора.

Sentinel

Sentinel (https://github.com/alibaba/Sentinel) — это легкий и высокодоступный компонент управления потоком данных с открытым исходным кодом для архитектуры распределенных сервисов, исходный код которого открыт командой промежуточного программного обеспечения Alibaba. пользователи защищают стабильность услуг.

Компания Hystrix уделяет особое внимание отказоустойчивому механизму, основанному на изоляции и предохранителе.Вызовы, для которых истекло время ожидания или которые были перенесены, быстро завершатся сбоем, и может быть предоставлен резервный механизм.

И в центре внимания Sentinel:

  • Диверсифицированный контроль потока

  • Слияние понижения

  • Защита от нагрузки на систему

  • Мониторинг в реальном времени и консоль

На следующем рисунке показано сравнение Sentinel и Hystrix на домашней странице Sentinel на GitHub:

расширить знания

автоматический выключатель:

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

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

Автоматический выключатель США:

Базовым индексом механизма отключения индекса США является S&P 500, а отдельные пороги снижения составляют 7%, 13% и 20%. При падении индекса на 7% или 13% по сравнению с точкой закрытия предыдущего дня торги на рынке ценных бумаг США приостанавливаются на 15 минут, при падении индекса на 20% по сравнению с точкой закрытия предыдущего дня торги прекращаются на день. В 2010 году фондовый рынок США начал внедрять механизм автоматического выключателя для отдельных акций.

Механизм автоматического выключателя был впервые предложен Нью-Йоркской фондовой биржей в США в 1987 году, чтобы избежать краха фондового рынка, подобного «черному понедельнику». Механизм предохранителя в настоящее время предохраняет только рыночный индекс. 27 октября 1997 года промышленный индекс Доу-Джонса упал на 7,18% и закрылся на уровне 7 161,15 пункта, что стало первым случаем срабатывания механизма автоматического выключателя после его введения в 1988 году.

Второй раз фондовый рынок США сработал механизм прерывателя цепи 9 марта 2020 г. по восточному поясному времени. Под влиянием эпидемии коронавирусной болезни 2019 г. и обвала цен на нефть в 9:34 утра 9 марта индекс S&P 500 упал на 7%. после открытия звонка Первый уровень механизма автоматического выключателя приостанавливает торговлю на 15 минут. Через три дня, 12 марта, индекс S&P 500 упал более чем на 7% за короткий промежуток времени после открытия рынка, снова запустив механизм выключателя первого уровня.

Китай Механизм выключателя материкового выключателя:

С 2016 года Китайская Народная Республика одновременно пилотирует автоматические выключатели на Шанхайской фондовой бирже, Шэньчжэньской фондовой бирже и Китайской бирже финансовых фьючерсов. Эталонным индексом для его автоматического выключателя является индекс CSI 300, и установлены два пороговых значения индекса автоматического выключателя: 5% и 7%.