В чем преимущество шаблона проектирования выключателя в архитектуре API? - PullRequest
0 голосов
/ 15 сентября 2018

Извините, если этот вопрос не подходит для SO.

Но я много пытался найти ответ.

Я изучал шаблон проектирования автоматического выключателя, так как я понимаю, что он использовался для васAPI отказоустойчивость.Что меня смущает, так это:

Допустим, у меня есть API, который вызывает api оплаты и, скажем, я сконфигурировал мою цепь так, чтобы она открывалась при непрерывном сбое 5 вызовов.

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

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

А что мы можем сделать в случае отказа?Как это может помочь?

Ответы [ 3 ]

0 голосов
/ 15 сентября 2018

Это правда, что большое использование автоматического выключателя используется для обеспечения отказоустойчивости API.

Как и в чем разница между блоком захвата и автоматическим выключателем.

Основным отличием между блоком захвата и автоматическим выключателем является обработка случая отказа. Предположим, мы называем API внешней системы. Допустим, вызов API не удался.

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

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

А что мы можем сделать в методе отступления? Как это может помочь?

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

Вы также можете просмотреть эту статью, чтобы узнать больше об этой теме: https://martinfowler.com/bliki/CircuitBreaker.html

0 голосов
/ 15 сентября 2018

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

Итак, глядя на ваш пример, у вас есть поток, который должен вызывать API оплаты> Давайте предположим, что это «внешний» компонент. Без этого вызова весь поток, вероятно, не может считаться «успешно завершенным» (я понимаю, у вас есть какой-то онлайн-процесс, в котором платеж является одним из его основных шагов).

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

Смысл автоматического выключателя в том, чтобы обеспечить разумный запасной вариант, так что поток не будет считаться отказавшим, если применяется логика восстановления.

Вот еще один пример, где автоматический выключатель имеет гораздо больше смысла.

Если вы создаете портал, подобный netflix, и в пользовательском интерфейсе есть виджет, который показывает «рекомендуемые» фильмы. Механизм рекомендаций учитывает фильмы, которые вы видели / любили раньше. Технически это "внешняя система" /microservice.

Теперь, что если поток, который заполняет данные для пользовательского интерфейса, не сможет получить рекомендации (например, если служба рекомендаций не работает), вы "провалите" весь поток? Вероятно, нет, может быть, лучше показать «общий список» рекомендуемых фильмов и позволить пользователю приступить к работе с приложением.

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

Теперь, в чем разница между этим потоком и обработкой исключений?

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

С другой стороны, обычный блок try / catch будет всегда вызывать службу рекомендации.

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

0 голосов
/ 15 сентября 2018

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

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

В чем преимущество этого паттерна

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

В чем разница между блоком перехвата и прерывателем цепи

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

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

...