Якщо уявити розподілену систему як великий музичний оркестр, то є два підходи до керування її виконанням: оркестрація та хореографія.
- Оркестрація — це коли у вас є диригент (централізований компонент), який контролює і спрямовує дії кожного інструмента (мікросервісу). Він визначає, коли і хто має виконати свою частину.
- Хореографія — це ніби імпровізаційний танець, де інструменти (мікросервіси) взаємодіють між собою напряму, без вказівок від диригента. Кожен сервіс просто реагує на події, що відбуваються в системі.
Різниці між оркестрацією та хореографією
| Аспект | Оркестрація | Хореографія |
|---|---|---|
| Підхід | Централізоване управління | Децентралізована взаємодія |
| Координатор | Є головний координатор | Немає головного координатора |
| Гнучкість | Менш гнучка, потрібні зміни в диригенті | Висока гнучкість, можна легко додавати нові події |
| Простота налагодження | Легше налагоджувати, зміни централізовані | Складніше налагоджувати через децентралізованість |
| Приклади | BPMN, Camunda | Kafka, RabbitMQ |
Оркестрація саг
У випадку оркестрації є один центральний компонент, який керує всіма кроками саги. Це свого роду "координатор саги". Він знає, які дії потрібно виконати, у якій послідовності і що робити, якщо щось іде не так.
Наприклад, якщо ви хочете реалізувати процес оформлення замовлення, координатор буде керувати:
- Створенням замовлення.
- Резервуванням товарів на складі.
- Виставленням рахунку клієнту.
Якщо на одному з цих кроків щось піде не так, координатор скаже: "Окей, скасовуємо замовлення".
Переваги оркестрації
- Простота управління: всі кроки керуються централізовано, що полегшує розуміння загального процесу.
- Легше налагоджувати: логи координатора допоможуть відстежити, де сталася помилка.
- Підходить для складних процесів: зручно, коли у вас складний процес з великою кількістю кроків.
Недоліки оркестрації
- Централізована точка відмови: якщо координатор виходить з ладу, процес зупиняється.
- Менша гнучкість: додавання нових кроків або змін вимагає внесення правок у координатора.
Інструменти для оркестрації
Деякі популярні інструменти для оркестрації:
- Camunda: це потужний BPMN-движок, який дозволяє моделювати і керувати процесами.
- Zeebe: це більш сучасний інструмент, розроблений тією ж командою, що й Camunda, але легший і орієнтований на мікросервіси.
Хореографія саг
У моделі хореографії немає одного керуючого центру. Натомість мікросервіси реагують на події, що відбуваються навколо. Наприклад, у процесі оформлення замовлення:
- Сервіс створення замовлення публікує подію
OrderCreated. - Сервіс управління складом отримує цю подію і намагається зарезервувати товари. Якщо успішно, він публікує подію
StockReserved. - Сервіс виставлення рахунків обробляє подію
StockReservedі виставляє рахунок клієнту.
Кожен сервіс відповідає за свою частину роботи, а підключення відбувається через обмін подіями.
Переваги хореографії
- Гнучкість: можна легко додати новий сервіс, який реагує на існуючі події.
- Висока масштабованість: немає єдиної точки відмови.
- Асинхронність: дозволяє обробляти кожну частину процесу незалежно.
Недоліки хореографії
- Складність налагодження: важче зрозуміти, де що пішло не так, оскільки процес розподілений.
- Відсутність централізованого "знання": складно мати повне уявлення про поточний стан саги.
Інструменти для хореографії
Інструменти, які добре підходять для керування подіями:
- Apache Kafka: надає платформу для публікації/підписки на події.
- RabbitMQ: ще одна популярна система повідомлень.
- Eventuate: платформа, яка спеціально створена для реалізації хореографії подійно-орієнтованих систем.
Коли використовувати оркестрацію, а коли хореографію?
Обидва підходи мають свої сильні та слабкі сторони. Вибір підходу залежить від вашого бізнес-кейсу, масштабу системи та вимог до відмовостійкості.
Використовуйте оркестрацію, якщо:
- Ваша бізнес-логіка складна і потрібен строгий контроль за кроками процесу.
- Потрібно мати централізоване управління процесом.
Використовуйте хореографію, якщо:
- Ваші процеси досить автономні і ви хочете мінімізувати залежність між сервісами.
- Важлива гнучкість і можливість додавати/змінювати кроки без правок у всій системі.
Приклад реалізації: Оформлення замовлення
Сценарій
Уявімо, що в нас є процес оформлення замовлення, який складається з кроків:
- Створення замовлення.
- Резервування товарів.
- Виставлення рахунку.
- Відправка повідомлення клієнту.
Реалізація оркестрації
@Component
public class OrderSagaOrchestrator {
// Інжектимо сервіси для виконання кроків
@Autowired
private InventoryService inventoryService;
@Autowired
private BillingService billingService;
@Autowired
private NotificationService notificationService;
public void startOrderSaga(Order order) {
try {
// Крок 1: Резервуємо товари
inventoryService.reserveStock(order);
// Крок 2: Виставляємо рахунок
billingService.createInvoice(order);
// Крок 3: Повідомляємо клієнта
notificationService.sendOrderConfirmation(order);
} catch (Exception e) {
// Якщо щось пішло не так — виконуємо компенсацію
inventoryService.releaseStock(order);
}
}
}
Реалізація хореографії
// Сервіс замовлення публікує подію
@Component
public class OrderService {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
public void createOrder(Order order) {
// Логіка створення замовлення...
// Публікуємо подію
kafkaTemplate.send("order-topic", "OrderCreated", order.getId());
}
}
// Сервіс складу обробляє подію "OrderCreated"
@Component
@KafkaListener(topics = "order-topic")
public class InventoryService {
@KafkaHandler
public void handleOrderCreated(String orderId) {
// Логіка резервування товарів...
// Публікуємо подію "StockReserved"
kafkaTemplate.send("inventory-topic", "StockReserved", orderId);
}
}
// Сервіс виставлення рахунків обробляє подію "StockReserved"
@Component
@KafkaListener(topics = "inventory-topic")
public class BillingService {
@KafkaHandler
public void handleStockReserved(String orderId) {
// Логіка виставлення рахунку...
// Публікуємо подію "InvoiceCreated"
kafkaTemplate.send("billing-topic", "InvoiceCreated", orderId);
}
}
Висновки
Оркестрація і хореографія — два різні підходи до керування складними процесами в мікросервісній архітектурі. Кожен з них має свої плюси й мінуси, і вибір залежить від конкретного бізнес-кейсу. Щоб побудувати надійну, масштабовану та відмовостійку систему, часто використовують обидва підходи в рамках одного додатку. Наприклад, складні процеси можна керувати через оркестрацію, а прості — через хореографію.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ