Открыть сервис

Drools

Drools — это система управления бизнес-правилами (Business Rule Management System, BRMS) с открытым исходным кодом, разработанная на языке Java под эгидой компании Red Hat (входит в состав IBM). Drools предоставляет механизм для отделения логики принятия решений от основного кода приложения, позволяя описывать бизнес-правила в декларативной форме и исполнять их в рантайме. Проект является частью экосистемы JBoss и распространяется под лицензией Apache 2.0.

История

Разработка Drools началась в 2000-х годах как независимый проект, инициированный Бобом МакУиртером (Bob McWhirter). В 2005 году проект был передан в управление JBoss, которая впоследствии стала частью Red Hat. Ключевой вехой стал выпуск версии 4.0 в 2007 году, в которой был полностью переработан механизм вывода правил на основе усовершенствованного алгоритма Rete (Rete-OO). В 2012 году вышла версия 5.5, представившая язык описания правил DRL (Drools Rule Language) и интеграцию с платформой BRMS. С версии 6.0 (2014 год) проект объединил в себе также модули для обработки сложных событий (Complex Event Processing, CEP) и планирования. Начиная с версии 7.x (2018–2019 гг.) Drools вошёл в состав платформы Red Hat Decision Manager и получил поддержку DMN (Decision Model and Notation) — стандартного нотационного языка для описания моделей принятия решений OMG. Текущая стабильная линейка — Drools 8.x (выпущена в 2022 году), в которой добавлена поддержка Java 17, Kotlin и улучшена интеграция с облачными средами.

Архитектура и компоненты

Drools состоит из нескольких ключевых модулей, взаимодействующих между собой:

Механизм вывода (Rete-OO)

Сердцем Drools является модифицированный алгоритм Rete-OO (Object Oriented Rete). Алгоритм строит сеть узлов, где каждый узел представляет собой условие, факт или агрегацию. При добавлении или изменении объекта (факта) в рабочую память (working memory) сеть быстро находит все правила, условия которых удовлетворены, без полного перебора всех правил. Это обеспечивает высокую производительность на тысячах и сотнях тысяч правил (паттерны «многие-ко-многим»). Drools также поддерживает обратный цепной вывод (backward chaining) — стратегию, когда движок пытается доказать цель, обращаясь к правилам, что полезно для экспертных систем.

Языки описания правил

Drools поддерживает несколько способов описания правил:

Пример простого правила на DRL:

```drl package com.example.rules import com.example.model.Order

rule "Скидка за сумму заказа" salience 10 when $o: Order(totalAmount > 1000) then $o.setDiscount(10.0); update($o); end ```

Применение

Drools применяется в различных отраслях и сценариях, где требуется гибкая, изменяемая логика принятия решений, не жёстко зашитая в код:

Преимущества и недостатки

Преимущества

Недостатки

Статус в России

Drools используется в ряде российских компаний и государственных информационных систем, преимущественно в банковском секторе и при разработке внутренних платформ по управлению правилами. При этом, после ухода из РФ компании Red Hat (2022 год), прекратилась официальная поддержка и обновления для Red Hat Decision Manager. Тем не менее, сам проект Drools (Apache 2.0) остаётся доступным для скачивания, а его код распространяется через GitHub. Российские разработчики могут продолжать использовать Drools в рамках открытой лицензии, а также участвовать в доработке форков (например, проект «Drools-CE» от сообщества). Развертывание в госсекторе может потребовать использования импортозамещённых версий Java (например, Liberica JDK, Eclipse Temurin) и дополнительного тестирования на совместимость.

Связанные технологии

Источники

  1. Официальная документация проекта Drools (Drools.org, Red Hat)
  2. GitHub-репозиторий droolsjbpm/drools (лицензия Apache 2.0)
  3. Документация Red Hat Decision Manager 7.x (Red Hat Customer Portal)
  4. Стандарт OMG DMN 1.4 (Object Management Group)
  5. Спецификация алгоритма Rete-OO (Charles L. Forgy, 1979)
  6. Статья «Drools: A Modern Approach to Business Rules» (InfoQ, 2018)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →