Ядро оркестрации Camunda 8

Диспетчерская для распределённых процессов

Zeebe — это движок BPMN, который проводит каждый экземпляр процесса через сеть из партиций и брокеров, как диспетчер разводит поезда по путям: без общей базы данных, без единой точки отказа, с масштабированием по горизонтали.

100K+экземпляров процессов в секунду
BPMN 2.0открытая нотация, не проприетарная
0центральных баз данных
СХЕМА · маршрут задачиlive
Клиент gRPC Gateway маршрутизация Партиция 1 лидер · брокер 2 Партиция 2 лидер · брокер 0 Партиция 3 лидер · брокер 1 задача проходит без записи в общую БД — только собственный event-log партиции

Что такое Zeebe

Zeebe — это открытый движок оркестрации процессов, написанный на Java и работающий по протоколу gRPC. Он исполняет диаграммы BPMN 2.0 и является ядром Camunda 8 — как в облачной версии SaaS, так и в self-managed развёртывании на Kubernetes.

В отличие от Camunda 7, где движок встроен в JVM-приложение и опирается на реляционную БД, Zeebe хранит состояние в собственном журнале событий на базе RocksDB и реплицирует его между узлами по протоколу Raft — это и даёт горизontальное масштабирование без единой точки отказа.


Как процесс движется через движок

Каждый экземпляр процесса — это токен, идущий по графу BPMN: от стартового события через задачи и шлюзы до завершения. Zeebe продвигает токен, публикуя события в журнал, а не блокируя строки в таблице.

Заявка подана Проверить документы service task exclusive gateway Открыть счёт одобрено Уведомить об отказе отклонено Сообщение клиенту Готово
событие задача шлюз-развилка

Архитектура: брокеры, партиции, реплики

Zeebe не хранит процессы в общей таблице. Пространство состояний делится на партиции, каждая — со своим журналом. Партиция реплицируется на несколько брокеров: один ведёт запись (лидер), остальные держат копию наготове (последователи).

Gateway приём gRPC Брокер 0 Партиция 2 · лидер Партиция 1 · реплика Партиция 3 · реплика Брокер 1 Партиция 2 · реплика Партиция 1 · реплика Партиция 3 · лидер Брокер 2 Партиция 2 · реплика Партиция 1 · лидер Партиция 3 · реплика
Партиционирование

Нагрузка делится, а не дублируется

Каждый экземпляр процесса живёт на одной партиции. Больше партиций — выше суммарная пропускная способность кластера.

Raft-репликация

Отказ брокера — не отказ системы

Если брокер с лидером партиции падает, один из последователей избирается новым лидером за секунды.

Без общей БД

Журнал вместо таблиц

Состояние партиции — это её собственный append-only журнал в RocksDB, а не строки в общей реляционной схеме.


Почему команды выбирают Zeebe

Для сценариев, где процесс живёт часами, днями или неделями, и где важно видеть, на каком шаге он застрял.

Долгоживущие процессы

Ожидание таймера, сообщения от внешней системы или ручного согласования не занимает поток — процесс просто ждёт в журнале, пока не придёт нужное событие.

Язык-агностичные воркеры

Бизнес-логика выполняется вне движка, в собственных сервисах на любом языке — они подключаются как job-воркеры по gRPC и забирают задачи нужного типа.

Аудируемость по BPMN

Диаграмма процесса — не картинка для документации, а исполняемый артефакт. Разработчик, аналитик и аудитор смотрят на одну и ту же схему.

Горизонтальное масштабирование

Пропускная способность растёт добавлением партиций и брокеров, без остановки кластера и без миграции схемы.


Подключить воркер за несколько строк

Воркер подписывается на тип задачи и обрабатывает её, когда движок продвигает до него токен процесса.

worker.jsNode.js
const { ZBClient } = require('zeebe-node');

const zbc = new ZBClient();

zbc.createWorker({
  taskType: 'provision-account',
  taskHandler: async (job) => {
    // бизнес-логика воркера
    const accountId = await openAccount(job.variables);
    return job.complete({ accountId });
  },
});
deploy.shzbctl
# развернуть диаграмму процесса в кластер
zbctl deploy resource onboarding.bpmn

# запустить новый экземпляр процесса
zbctl create instance onboarding \
  --variables '{"applicantId":"a-1042"}'

# посмотреть топологию кластера
zbctl status