Встречается на собеседованиях • сегодня

Знаешь ли как написать распределенную транзакцию в микросервисной архитектуре

Распределенные транзакции в микросервисах обычно реализуют через паттерн Saga. Вместо ACID используется подход компенсирующих операций. Есть 2 варианта:

  1. Хореография - сервисы общаются через события:
java
// OrderService
@Transactional
public void createOrder() {
    // Локальная транзакция
    orderRepository.save(order);
    eventPublisher.publish(new OrderCreatedEvent(orderId));
}

// PaymentService (подписан на OrderCreatedEvent)
public void onOrderCreated(OrderCreatedEvent event) {
try {
processPayment();
} catch (Exception e) {
eventPublisher.publish(new PaymentFailedEvent(event.orderId()));
}
}

text

2. **Оркестрация** - центральный координатор управляет потоком:
```java
// SagaOrchestrator
public void executeOrderSaga() {
    try {
        orderService.createOrder();
        paymentService.processPayment();
        inventoryService.reserveItems();
    } catch (Exception e) {
        // Компенсирующие транзакции
        paymentService.cancelPayment();
        orderService.cancelOrder();
    }
}

Для надежности часто используют Outbox Pattern и идемпотентные операции. Альтернативы - двухфазный коммит (2PC) или SAGA через Apache Camel.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы