Аксон каркас и выключатель - PullRequest
1 голос
/ 06 октября 2019

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

Итак, мой вопрос, является ли схема автоматического выключателя действительной для architecutre микросервисов источников событий?

1 Ответ

3 голосов
/ 07 октября 2019

Прежде всего, большой и интересный вопрос!


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

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


Более подробный ответ приведен ниже:

В Axon есть пара ключевых понятий:

  • Обработчики команд
  • Хранилище событий + Агрегаты
  • Обработчики событий
  • Обработчики запросов

Идея в основном заключается в следующем:

  1. Вы можете отправить Команду , которая основана на указанном Командный обработчик , будет:
  2. Загрузка Агрегат из вашего Хранилища событий и, пройдя некоторую проверку, будет применять событие,
  3. Тогда сработают все ваши обработчики событий .
  4. Обработчики запросов - это другая сторона истории, которая в основном означает, что некоторые ваши компоненты хотят получить какие-то данные, а каждый запрос на такоеданные отправляются одному или нескольким обработчикам запросов.

Для более подробного обзора этих концепций, посмотрите здесь .


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


Существует несколько возможных сценариев, в которых вы можете применить разрыв цепи вместе в Axon:

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

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

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

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


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

Последнее замечание - взгляните на resilience4j в качестве альтернативы Hystrix, поскольку в последние годы его пользовательская база и распространение быстро росли, и он значительно легче, чем Hystrix. Кроме того, как вы можете видеть на странице Hystrix на github :

Hystrix больше не находится в активной разработке и в настоящее время находится в режиме обслуживания.

и

Для случаев, когда что-то вроде Hystrix имеет смысл, мы намерены продолжать использовать Hystrix для существующих приложений и использовать открытые и активные проекты, такие как resilience4j, для новых внутренних проектов. Мы начинаем рекомендовать другим делать то же самое

...