← Назад к вопросам

Что такое шлюзы в BPMN? Какие типы шлюзов вы знаете?

2.0 Middle🔥 201 комментариев
#Нотации и диаграммы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Шлюзы в 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)U1+Все выбранныеМножественные условия
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 при моделировании

  1. Используй правильный тип шлюза:

    • Если только ОДИН путь → XOR
    • Если ВСЕ пути параллельно → AND
    • Если НЕСКОЛЬКО путей (но не все) → OR
    • Если зависит от событий → Event-based
  2. Предусмотри условия:

    • На каждом исходящем потоке от XOR/OR должно быть условие
    • Условия должны быть mutually exclusive (для XOR)
    • Условия должны покрывать все возможные случаи
  3. Документируй процесс:

    • Каждый шлюз должен иметь название
    • Условия должны быть ясными
    • Исходящие потоки должны быть подписаны
  4. Избегай спагетти:

    • Не создавай слишком много путей
    • Старайся группировать в подпроцессы
    • Используй вложенные процессы для сложных ветвлений

Инструменты для моделирования BPMN

Я использую несколько инструментов в своей практике:

  • Camunda Modeler — отличный бесплатный tool
  • Lucidchart — web-based, удобно для collaboration
  • Draw.io — простой и быстрый
  • Bizagi — профессиональный для больших проектов

Шлюзы в BPMN — это мощный инструмент для моделирования сложных бизнес-процессов. Правильное использование разных типов шлюзов помогает создавать ясные, понятные и исполняемые модели процессов.

Что такое шлюзы в BPMN? Какие типы шлюзов вы знаете? | PrepBro