Утилита NserviceBus Sagas

Я прочитал этот отличный учебник (http://blogs.planbsoftware.co.nz/?p=247) о NserviceBus Sagas, но все же я не понимаю, в чем преимущество этой модели (sagas) перед использованием транзакций базы данных или бизнес-уровня?


person Miguel    schedule 02.06.2016    source источник


Ответы (2)


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

person Udi Dahan    schedule 03.06.2016
comment
Большое спасибо, Уди. Можете ли вы указать мне простой фиктивный пример, который реализует что-то в обоих направлениях, чтобы я действительно мог понять разницу? Я согласен с тем, что данные о состоянии будут распределены по системе, но, возможно, мой экзистенциальный вопрос заключается в следующем: если эти данные являются частью бизнес-процесса (и нам может потребоваться запросить эти данные о состоянии для отчетов, чтобы клиент знал текущий статус и т.д.) не имеет смысла хранить данные о состоянии вместе с бизнес-данными? Спасибо еще раз. - person Miguel; 03.06.2016
comment
Я поставлю это следующим в список того, что нужно сделать :) А если серьезно, вы можете полностью запросить данные саги напрямую - они сохраняются в обычной БД. - person Udi Dahan; 04.06.2016
comment
Думаю, я понимаю ... Итак, процесс, использующий SagaData, действует как координатор распределенной транзакции с доступом к состоянию в нескольких системах, участвующих в транзакции, верно? - person Miguel Domingos; 04.06.2016
comment
Я бы вообще не стал так это описывать. Класс saga - единственный класс, который работает с SagaData. При использовании саги любая координация между различными системами будет осуществляться нетранзакционным способом, управляемым сообщениями. - person Udi Dahan; 05.06.2016

Чтобы показать вам реальную пользу модели Saga, я покажу вам два примера.

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

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

В чем преимущества Saga?

1) Ваша бизнес-логика инкапсулирована в одном месте - саге.

2) Вы можете легко расширить его, добавив дополнительные саги или удалив их. Вы также можете переместить их на другие обработчики или хосты.

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

person Dzianis Yafimau    schedule 26.07.2016