Предпочтительные методы взаимодействия с механизмом правил

Я собираюсь погрузиться в проект, ориентированный на правила (с использованием правил ILOG для .NET - теперь IBM). И я прочитал несколько разных точек зрения относительно того, как настроить обработку правил и как взаимодействовать с механизмом правил.

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

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

Положительные / отрицательные стороны локального запуска механизма правил прямо противоположны положительным и отрицательным сторонам централизованной конфигурации. Никаких медленных сервисных вызовов (быстрых вызовов API), никаких проблем с сетью, каждый сервер приложений полагается только на себя. Управление развертыванием правил становится более сложным. Каждый раз, когда вы добавляете узел в облако своего приложения, вам потребуется больше лицензий для механизмов правил.

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

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


person Andrew Siemer    schedule 27.07.2009    source источник
comment
Программисты должны быть писать механизмы правил. Бизнес-аналитики устанавливают правила в механизме правил и должны иметь графический интерфейс для создания правил и сохранения в XML или в базе данных. Действительно, большинство механизмов правил не могут интегрировать надлежащее управление рабочим процессом и обрабатывают только правила, поэтому реализации FCRE начинают усложнять работу бедных бизнес-аналитиков, которые затем начинают требовать от программистов помощи. Медленное развертывание правил недопустимо в финансовой бизнес-среде, а значит, и в других средах.   -  person JeeBee    schedule 28.07.2009
comment
Но программисты также должны предоставлять обработчики правил и точки данных для работы BA. Приложения, которые мы пишем, должны каким-то образом связаны с механизмом правил.   -  person Andrew Siemer    schedule 28.07.2009
comment
Да, ваши приложения помещают данные в механизм правил, механизм правил запускает правила, вычисления, настраиваемые процессы (куда входят программисты, например, если вам нужно добавить вызов веб-службы на полпути выполнения рабочего процесса) и выдает ответы. Интерфейс (веб-сервис, прямой вызов метода) должен быть достаточно общим. BA определяют имена данных, с которыми они работают, и это то, что вы передаете. Конечно, я уверен, что финансовые рабочие процессы отличаются от других рабочих процессов / механизмов правил. Мы размещаем наши механизмы правил в Tomcat и вызываем их через веб-службу (небольшие накладные расходы по сравнению с самими правилами).   -  person JeeBee    schedule 28.07.2009
comment
УХ ТЫ. Вы говорите, что внедрение веб-службы в середине потока правил / рабочего процесса внутри механизма правил является приемлемой практикой? В настоящее время я думаю, что НЕ буду осуществлять доступ к данным внутри механизма правил, а скорее ожидаю, что все данные, с которыми мне нужно работать, будут переданы мне. Это далеко от принятой нормы? У вас есть ссылки на ресурсы с передовыми методами разработки правил?   -  person Andrew Siemer    schedule 28.07.2009
comment
Я думаю, мы здесь работаем, исходя из разных идей. Механизм правил - это часть рабочего процесса, один из видов деятельности, который можно встроить. Бизнес-аналитики создают рабочие процессы бизнес-решений, которые включают наборы правил. Нам нужно вызывать внешние веб-службы (например, проверки кредитоспособности) в рамках рабочего процесса. Возможно, наши потребности очень разные (и поэтому я не стал это комментировать).   -  person JeeBee    schedule 28.07.2009
comment
... Программисты должны писать механизмы правил ... - если они хотят узнать, как работают механизмы правил Rete, или если бюджет не позволяет их купить. В противном случае купите один.   -  person duffymo    schedule 28.07.2009
comment
@JeeBee - Правило программирования №1: никогда не пишите, что можно купить, одолжить или украсть.   -  person Amy B    schedule 30.07.2009


Ответы (4)


Мы используем ILOG для DotNet и уже развернули пилотный проект.

Вот краткое изложение нашей незрелой архитектуры правил:

  1. Весь доступ к данным осуществляется вне правил.
  2. Правила развертываются так же, как и код (контроль версий, процесс выпуска, yada yada).
  3. Проекты (службы), использующие правила, имеют ссылку на ILOG.Rules.dll и новые механизмы RuleEngines через настраиваемый класс объединения. RuleEngines объединены в пул, потому что привязать RuleSet к RuleEngine дорого.
  4. Почти все правила написаны для ожидания объектов Assert'd, а не параметров RuleFlow.
  5. Поскольку правила выполняются в одном и том же пространстве памяти, экземпляры, измененные правилами, являются такими же экземплярами в программе, что является немедленным распространением состояния.
  6. Почти все правила выполняются через RuleFlow (даже если это единственный RuleStep в RuleFlow).

Мы рассматриваем RuleExecutionServer как платформу хостинга, а также RuleTeamServerForSharePoint как хост для источника правил. В конце концов, правила будут развернуты в производственной среде вне процесса выпуска кода.

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

person Amy B    schedule 29.07.2009

Мне никогда не нравился аргумент централизации. Это означает, что все объединено в механизм правил, который становится свалкой для всех правил в системе. Довольно скоро вы не сможете ничего изменить из-за страха перед неизвестным: «Что мы сломаем?»

Я предпочитаю следовать идее Amazon об услугах как об изолированных автономных компонентах. Я интерпретирую это как то, что сервисы владеют их данными и своими правилами.

Это дает дополнительное преимущество в виде разделения пространства правил. По мере роста набора правил становится все труднее поддерживать; лучше держать их в приемлемом размере.

Если части набора правил являются общими, я бы предпочел управляемый данными подход DI, когда служба может иметь собственный экземпляр механизма правил и загружать общие правила из базы данных при запуске. Это может оказаться невозможным, если ваша лицензия iLog делает несколько экземпляров слишком дорогими. Это будет тот случай, когда продукт, который должен помочь, на самом деле может диктовать архитектурный выбор, который принесет горе. Это был бы хороший аргумент в пользу менее дорогой альтернативы (например, JBoss Rules в Java-land).

А как насчет подхода дерева решений, основанного на данных? Действительно ли необходим механизм правил Rete, или решение о «корпоративном инструменте» влияет на ваш выбор?

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

person duffymo    schedule 28.07.2009

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

person James Taylor    schedule 29.07.2009

По моему опыту работы с механизмами правил, мы применили довольно простой набор практик для управления взаимодействием с механизмом правил. Прежде всего, это всегда были коммерческие механизмы правил (iLog, Corticon), а не с открытым исходным кодом (Drools), поэтому локальное развертывание на каждом из серверов приложений никогда не было жизнеспособным вариантом из-за затрат на лицензирование. Следовательно, мы всегда использовали централизованную модель, хотя и в двух основных вариантах:

  • Удаленное выполнение веб-службы. Таким же образом, как вы указали в своем вопросе, мы обращаемся к службам на основе SOAP, предоставляемым продуктом механизма правил. В области веб-сервисов мы столкнулись с несколькими вариантами: (1) «Boxcar» запросы, позволяющие приложению ставить в очередь запросы обработки правил и отправлять их частями, а не разовыми сообщениями; (2) Настройте параметры потоков и обработки, предоставленные поставщиком. Это включает в себя возможность разделения служб принятия решений по функциям и выделение каждой W3WP и / или использование веб-садов. Существует огромное количество настроек, которые вы можете сделать с товарными вагонами, потоками и процессами, и получение правильного сочетания - это скорее процесс проб и ошибок (и знание ваших наборов правил и данных), чем точная наука.
  • Удаленный вызов обрабатываемой системы правил - классический прием пакетного стиля, позволяющий избежать накладных расходов на сериализацию и десериализацию. Выполнение удаленного вызова, инициирующего внутрипроцессный вызов механизма правил. Это может быть выполнено либо по расписанию (например, партиями), либо по запросу (например, «товарные вагоны» запросов). В любом случае можно избежать значительных накладных расходов на вызовы сервисов, напрямую взаимодействуя с процессом и базой данных. Обратной стороной этого процесса является то, что у вас нет IIS или контейнера EJB / сервлета, управляющего потоками за вас, и вам придется делать это самостоятельно.
person Thomas Beck    schedule 28.07.2009