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 состоит из нескольких ключевых модулей, взаимодействующих между собой:
- Drools Core — ядро системы: парсеры правил, компилятор DRL, сессия исполнения (KieSession).
- Drools Compiler — компилятор, преобразующий исходные тексты правил (DRL, Excel, DMN) в объектную модель, понятную для движка.
- Drools Expert — основной модуль для исполнения правил и механизм вывода (inference engine) на основе алгоритма Rete-OO. Обеспечивает прямой и обратный цепной вывод (forward/backward chaining).
- Drools Fusion — модуль для обработки сложных событий (CEP), работающий с временными окнами и корреляциями событий.
- Drools Workbench (бывший Guvnor) — веб-интерфейс для визуального редактирования и управления правилами, версионирования, тестирования и публикации (входит в состав Red Hat Decision Manager или поставляется отдельно как Business Central).
- Drools DMN Engine — исполняющий движок для стандарта DMN 1.4/1.5. Позволяет описывать таблицы решений, графические модели в формате XML (DRD).
Механизм вывода (Rete-OO)
Сердцем Drools является модифицированный алгоритм Rete-OO (Object Oriented Rete). Алгоритм строит сеть узлов, где каждый узел представляет собой условие, факт или агрегацию. При добавлении или изменении объекта (факта) в рабочую память (working memory) сеть быстро находит все правила, условия которых удовлетворены, без полного перебора всех правил. Это обеспечивает высокую производительность на тысячах и сотнях тысяч правил (паттерны «многие-ко-многим»). Drools также поддерживает обратный цепной вывод (backward chaining) — стратегию, когда движок пытается доказать цель, обращаясь к правилам, что полезно для экспертных систем.
Языки описания правил
Drools поддерживает несколько способов описания правил:
- DRL (Drools Rule Language) — основной текстовый язык, основанный на синтаксисе Java. Правило в DRL включает:
module— пакет;import— импорт Java-классов;rule— блок правила с именем, метаданными (приоритет, активация, группа);when— условие (левая часть, LHS): шаблоны с привязкой переменных, логические операторы (and,or,not), вызовы методов;then— действие (правая часть, RHS): исполнение кода на Java, изменение фактов, вызов сервисов.
Пример простого правила на 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 ```
- Decision Tables (Excel/CSV) — правила, описываемые в виде таблицы решений (строки — комбинации условий, столбцы — условия и действия). Поддерживаются в формате
.xls/.xlsx, а также в виде веб-таблиц в Workbench. - DMN (Decision Model and Notation) — стандартный нотационный язык OMG (ISO 23247). Drools реализует полную поддержку DMN 1.4/1.5: графические диаграммы принятия решений (DRD), таблицы решений (FEEL-выражения), списки принятия решений. DMN-модели исполняются на выделенном движке DMN Engine, который может работать независимо от правил DRL.
- Guided Rules (визуальный редактор) — интерфейс в Workbench, где правило строится из выпадающих списков, полей и выражений — не требует написания кода.
- Java / Domain Specific Language (DSL) — возможность создавать пользовательские фразы (DSL-расширения), которые транслируются в DRL. Это упрощает написание правил бизнес-аналитиками, не знакомыми с Java.
Применение
Drools применяется в различных отраслях и сценариях, где требуется гибкая, изменяемая логика принятия решений, не жёстко зашитая в код:
- Банкинг и страхование — расчёт кредитных рейтингов, скоринг заявок, андеррайтинг, расчёт страховых премий, проверка на мошенничество (fraud detection). Правила могут быстро меняться под требования регуляторов (ЦБ РФ, Минфин).
- Ритейл и e-commerce — динамические цены, персонализированные скидки, акции, рекомендации товаров на основе покупок и поведения.
- Телеком — маршрутизация вызовов, тарификация, управление подписками, обнаружение аномалий в сети.
- Логистика и транспорт — оптимизация маршрутов, распределение заказов, управление складскими операциями, правила отгрузки.
- Энергетика — управление спросом, прогнозирование нагрузки, контроль параметров оборудования.
- Государственные информационные системы — расчёт пособий, налоговых вычетов, проверка соответствия заявителя требованиям программ (например, «Социальное казначейство» в РФ).
- Обработка сложных событий (CEP) — мониторинг промышленных датчиков (IoT), детекция аварий на основе временных окон (например, превышение температуры и давления в течение 10 секунд), финансовый трейдинг (автоматический ордер на продажу при определённом движении цены).
Преимущества и недостатки
Преимущества
- Отделение логики от кода — бизнес-правила хранятся и изменяются отдельно от Java-приложения, их можно править без перекомпиляции и перезапуска.
- Высокая производительность — алгоритм Rete-OO эффективно обрабатывает тысячи правил с тысячами фактов.
- Гибкость языка — поддержка DRL, DMN, таблиц решений, DSL, что подходит как разработчикам, так и аналитикам.
- Встроенное управление версиями — в Workbench реализована система версионирования артефактов (Maven-репозиторий).
- Интеграция с экосистемой Java — полная поддержка Spring Boot, Quarkus, Hibernate, JPA, Java EE / Jakarta EE.
- Открытый исходный код — бесплатное использование, широкая поддержка сообщества.
Недостатки
- Сложность отладки — при большом количестве правил и цепном выводе (backward chaining) трассировка выполнения может быть нетривиальной.
- Потребление памяти — сеть Rete-OO на сотни тысяч правил может занимать значительный объём оперативной памяти (сотни MB).
- Порог входа для аналитиков — хотя есть визуальные редакторы, продвинутые сценарии часто требуют написания DRL (Java-синтаксиса), что неудобно для нетехнических специалистов.
- Лицензионные ограничения в платной версии — Red Hat Decision Manager (поддержка, SLA, расширенная интеграция) требует коммерческой подписки. Однако сама библиотека Drools остаётся свободной.
- Не подходит для простых задач — если логика состоит из 5–10 простых
if-else, внедрение Drools избыточно.
Статус в России
Drools используется в ряде российских компаний и государственных информационных систем, преимущественно в банковском секторе и при разработке внутренних платформ по управлению правилами. При этом, после ухода из РФ компании Red Hat (2022 год), прекратилась официальная поддержка и обновления для Red Hat Decision Manager. Тем не менее, сам проект Drools (Apache 2.0) остаётся доступным для скачивания, а его код распространяется через GitHub. Российские разработчики могут продолжать использовать Drools в рамках открытой лицензии, а также участвовать в доработке форков (например, проект «Drools-CE» от сообщества). Развертывание в госсекторе может потребовать использования импортозамещённых версий Java (например, Liberica JDK, Eclipse Temurin) и дополнительного тестирования на совместимость.
Связанные технологии
- JBoss Rules — устаревшее название Drools (до версии 4.0).
- Red Hat Decision Manager (RHDM) — коммерческая платформа на основе Drools, включающая Workbench, Kibana-like мониторинг, управление версиями и API для интеграции. В России до 2022 года входила в реестр отечественного ПО (поставки через партнёров).
- OptaPlanner — проект той же экосистемы, решающий задачи оптимизации (планирование, маршрутизация, расписание) на основе Drools-правил для расчёта скора.
- Kogito — облачная (Cloud-native) платформа для автоматизации бизнес-процессов и решений, включающая движок Drools, оптимизированный для работы в Kubernetes и Knative.
- Drools vs. DMN vs. Production Rules — помимо Drools, существуют другие BRMS: IBM ODM (ILOG), FICO Blaze Advisor, Oracle Policy Automation, SAP S/4HANA BRFplus. В российской юрисдикции альтернативой является, например, система «ELMA Rules» или «Правило-Р».
Источники
- Официальная документация проекта Drools (Drools.org, Red Hat)
- GitHub-репозиторий droolsjbpm/drools (лицензия Apache 2.0)
- Документация Red Hat Decision Manager 7.x (Red Hat Customer Portal)
- Стандарт OMG DMN 1.4 (Object Management Group)
- Спецификация алгоритма Rete-OO (Charles L. Forgy, 1979)
- Статья «Drools: A Modern Approach to Business Rules» (InfoQ, 2018)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →