Что такое шлюзы в BPMN? Какие типы шлюзов вы знаете?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Шлюзы в BPMN и их типы
Введение в BPMN
BPMN (Business Process Model and Notation) — это стандарт для моделирования бизнес-процессов. Он использует графическую нотацию для описания потоков работы. Шлюзы (Gateways) — это один из ключевых элементов BPMN.
Что такое шлюз (Gateway)?
Определение: Шлюз — это элемент BPMN, который контролирует разделение и объединение потоков в процессе. Это как развилка на дороге — процесс может пойти по разному пути в зависимости от условий.
Визуальное представление: Шлюзы изображаются в виде ромба (◊) с символом внутри, обозначающим тип.
Типы шлюзов
1. Exclusive Gateway (Исключающий шлюз) - XOR
Символ: ◊ с крестиком (✕) внутри
Что это: Процесс может пойти только по ОДНОМУ из нескольких путей, в зависимости от условия.
Пример: Процесс обработки заказа
┌─── Start
│
▼
[Получить заказ]
│
▼
◊ (XOR Gateway)
/ │ \
/ │ \
[Сумма < 1000] [1000 ≤ Сумма ≤ 5000] [Сумма > 5000]
/ │ \
▼ ▼ ▼
[Быстрая] [Стандартная] [Премиум]
[Доставка] [Доставка] [Обработка]
│ │ │
└────┬────┴────┬────┘
▼
[Отправить]
│
▼
[End]
Условия (Conditions):
Путь 1: if amount < 1000 then "быстрая доставка"
Путь 2: if 1000 ≤ amount ≤ 5000 then "стандартная доставка"
Путь 3: if amount > 5000 then "премиум обработка"
Обязательно: только ОДИН путь выбран
Особенности:
- Diverging (разветвление): один входящий поток, несколько выходящих
- Converging (объединение): несколько входящих потоков, один выходящий
- Идемпотентный: повторное прохождение даст тот же результат
Когда использую в своей практике:
- Проверка статуса платежа: успешен / отклонён / ошибка
- Валидация данных: валидны / невалидны
- Категоризация по правилам: VIP / обычный / новый
2. Parallel Gateway (Параллельный шлюз) - AND
Символ: ◊ с плюсом (+) внутри
Что это: Все исходящие потоки выполняются ПАРАЛЛЕЛЬНО (одновременно). При объединении ждём, пока ВСЕ потоки завершатся.
Пример: Процесс запуска сервиса
[Начать развёртывание]
│
▼
◊ (+)
/ │ \
/ │ \
[Запустить] [Загрузить] [Инициализировать]
[Database] [Config] [Cache]
| │ │
│ │ │ (все выполняются параллельно)
│ │ │
└─────┼─────┘
▼
◊ (+) (все должны завершиться)
│
▼
[Сервис готов]
Особенности:
- Diverging: все исходящие потоки ОБЯЗАНЫ быть выполнены
- Converging: ждём завершение ВСЕх входящих потоков (synchronization bar)
- Асинхронность: потоки выполняются одновременно
Когда использую:
- Когда несколько задач не зависят друг от друга и могут выполняться параллельно
- Обработка платежа (параллельно: проверка баланса, проверка fraud, запись в лог)
- Уведомления (параллельно: SMS, Email, Push notification)
Пример из моей практики (система логистики):
[Заказ подтвержден]
│
▼
◊ (+)
/ │ \
/ │ \
[Зарезервировать] [Создать] [Отправить
[Товар] [Доставку] [Уведомление]
│ │ │
│ │ │ (параллельно)
│ │ │
└──────┼──────┘
▼
◊ (ждём все 3)
│
▼
[Готово к отправке]
3. Inclusive Gateway (Включающий шлюз) - OR
Символ: ◊ с дугой (U) внутри
Что это: Могут быть выбраны ОДИН или НЕСКОЛЬКО путей (в зависимости от условий). Это комбинация XOR и AND.
Пример: Отправка документов заказчику
[Заказ завершён]
│
▼
◊ (U)
/ │ \
/ │ \
[Требуется] [Требуется] [Требуется]
[Квитанция] [Чек] [Страховка]
? ? ?
│ │ │
▼ ▼ ▼
[Отправить Квитанцию] [Отправить Чек] [Отправить Страховку]
(если нужна) (если нужен) (если нужна)
│ │ │
└──────────┼───────────┘
▼
◊ (ждём все отправленные)
│
▼
[Документы отправлены]
Особенности:
- Diverging: 1+ путей могут быть выбраны (в отличие от XOR, где только 1)
- Converging: ждём ВСЕх выбранных потоков (не как в XOR, где ждём первый)
- Сложнее реализовать (нужен logic для слияния)
Когда использую:
- Когда несколько условий могут быть истинными одновременно
- Отправка уведомлений (Email AND/OR SMS AND/OR Push)
- Валидация (может быть ошибка_1 И ошибка_2)
4. Event-Based Gateway
Символ: ◊ с пятиугольником (★) внутри
Что это: Даделение потока основано на событиях, а не на условиях. Процесс ждёт какого-то внешнего события.
Пример: Ожидание входящего платежа или отмены
[Заказ ожидает оплаты]
│
▼
◊ (Event-based)
/ \
/ \
[Платёж [Заказ
поступил] отменён]
│ │
▼ ▼
[Подтвердить] [Освободить
[Заказ] [Товар]
│ │
└─────┬─────┘
▼
[End]
Особенности:
- Ждёт внешнее событие (не условие)
- Обычно используется с timer или message event
- Асинхронный характер
Когда использую:
- Ожидание callback от external system
- Таймер (подождать X часов, потом продолжить)
- Ожидание пользовательского действия
Таблица сравнения типов шлюзов
| Тип | Символ | Выбор путей | Слияние | Использование |
|---|---|---|---|---|
| Exclusive (XOR) | ✕ | Ровно 1 | Первый завершённый | Условные ветвления |
| Parallel (AND) | + | Все | Все завершены | Параллельные задачи |
| Inclusive (OR) | U | 1+ | Все выбранные | Множественные условия |
| Event-based | ★ | По событиям | По событиям | Асинхронные события |
Правила использования шлюзов
1. Базовые правила
Правило 1: Входящие и исходящие потоки
Divergence (разветвление):
┌─────────────────┐
│ Incoming = 1 │
│ Outgoing = 2+ │
└─────────────────┘
▼
◊ (shutter)
/ │ \
Convergence (слияние):
/ │ \
/ │ \
◊ (shutter)
┌─────────────────┐
│ Incoming = 2+ │
│ Outgoing = 1 │
└─────────────────┘
Правило 2: Метки на потоках (Conditions)
Для Exclusive Gateway обязательны условия:
◊ (XOR)
/ │ \
/ │ \
[status [status [status
=paid] =pending] =failed]
▼ ▼ ▼
Правило 3: Синхронизация
При объединении потоков Parallel Gateway ждёт ВСЕх:
Task1 ──┐
├─► ◊ (+) ──► [Next Task]
Task2 ──┤
│
Task3 ──┘
[Next Task] начнётся ПОСЛЕ завершения Task1 AND Task2 AND Task3
Примеры из моей практики (System Analyst)
Пример 1: Процесс утверждения заказа
BPMN Диаграмма:
[Создать заказ]
│
▼
◊ (XOR) ← Exclusive Gateway
/ │ \
/ │ \
[Сумма [1000≤ [Сумма
<1000] Сумма≤5000] >5000]
│ │ │
│ │ ▼
│ │ [Требуется
│ │ Утверждение]
│ │ │
│ │ ▼
│ │ [Отправить на утверждение]
│ │ │
│ │ ▼
│ │ ◊ (XOR) ← Convergence
│ │ │
│ │ ▼
└──────┼──► [Обработка платежа]
│ │
└──────┘
│
▼
[Зарезервировать товар]
│
▼
◊ (+) ← Parallel Gateway (Divergence)
/ │ \
/ │ \
[Создать] [Рассчитать] [Отправить
[Доставку] [Стоимость] [Уведомление]
│ │ │
│ │ │ (все параллельно)
│ │ │
└───┬───┴──────┘
▼
◊ (+) ← Convergence (ждём все)
│
▼
[Заказ готов]
Пример 2: Процесс обработки платежа с параллелизмом
[Платёж поступил]
│
▼
◊ (XOR) ← Проверка типа платежа
/ │ \
/ │ \
[Карта] [Крипто] [Банк]
│ │ │
▼ ▼ ▼
[Verify] [Verify] [Verify]
[Card] [Wallet] [Account]
│ │ │
└───┬───┴───────┘
▼
◊ (+) ← Параллельная обработка
/ │ \
/ │ \
[Обновить] [Отправить] [Логировать в
[Balance] [Email] аналитику]
│ │ │
└────┬───┴──────────┘
▼
◊ (+) ← Convergence
│
▼
[Платёж подтвержден]
Best Practices при моделировании
-
Используй правильный тип шлюза:
- Если только ОДИН путь → XOR
- Если ВСЕ пути параллельно → AND
- Если НЕСКОЛЬКО путей (но не все) → OR
- Если зависит от событий → Event-based
-
Предусмотри условия:
- На каждом исходящем потоке от XOR/OR должно быть условие
- Условия должны быть mutually exclusive (для XOR)
- Условия должны покрывать все возможные случаи
-
Документируй процесс:
- Каждый шлюз должен иметь название
- Условия должны быть ясными
- Исходящие потоки должны быть подписаны
-
Избегай спагетти:
- Не создавай слишком много путей
- Старайся группировать в подпроцессы
- Используй вложенные процессы для сложных ветвлений
Инструменты для моделирования BPMN
Я использую несколько инструментов в своей практике:
- Camunda Modeler — отличный бесплатный tool
- Lucidchart — web-based, удобно для collaboration
- Draw.io — простой и быстрый
- Bizagi — профессиональный для больших проектов
Шлюзы в BPMN — это мощный инструмент для моделирования сложных бизнес-процессов. Правильное использование разных типов шлюзов помогает создавать ясные, понятные и исполняемые модели процессов.