🔗
Distributed Data & Transactions

Avoiding Distributed Transactions

Eventual Consistency in Spring
💡 Spring, Boot, microservices, mein, TRADITIONAL, @Transactional, EK, SINGLE, database, tak, hi, LIMITED, hai — EK, DUSRE, database, PAR, spread, EK, "SINGLE, TRANSACTION" Spring, ke, LOCAL, @Transactional, se, POSSIBLE, NAHI, hai.

@Transactional, ANNOTATION, sirf, EK, SINGLE, database, ke, ANDAR, kaam, karta hai — MULTIPLE, microservices, (aur, unki, ALAG, databases) ke, ACROSS, EK, ATOMIC, transaction, MAINTAIN, karna, Spring's, LOCAL, transaction, management, se, POSSIBLE, NAHI, hai.

Isliye, Spring, Boot, microservices, mein, "eventual, consistency" ACCEPT, ki, jaati, hai — SAGA, PATTERN, YA, EVENT-DRIVEN, updates, se, DATA, EVENTUALLY, CONSISTENT, STATE, mein, PAHUNCH, jaata, hai.

// LOCAL transaction — EK, HI, database, ke, liye, WORKS:
@Transactional
public void createOrder(Order order) {
    orderRepository.save(order);   // SAME, database
}

// CROSS-service, "transaction" — saga, pattern, chahiye, hoga
// order-service, inventory-service, ko, DIRECTLY, "transaction" mein, INCLUDE, NAHI, kar, sakta
🔗
Spring, Boot, microservices, mein, TRADITIONAL, @Transactional, EK, SINGLE, database, tak, hi, LIMITED, hai — EK, DUSRE, database, PAR, spread, EK, "SINGLE, TRANSACTION" Spring, ke, LOCAL, @Transactional, se, POSSIBLE, NAHI, hai.
1 / 2
⚡ झट से Recap
  • @Transactional, sirf, EK, single, database, ke, andar, kaam, karta, hai
  • Multiple microservices, ke, across, LOCAL, transactions, se, atomic, transaction, POSSIBLE, nahi
  • Eventual consistency, (saga, pattern) modern, approach, hai
इस page में (2 subtopics)

Outbox, pattern, mein, EK, event, ko, database, change, ke, SAME, LOCAL, transaction, mein, EK, "outbox" table, mein, WRITE, kiya, jaata hai — EK, SEPARATE, process, PHIR, outbox, se, events, ko, RELIABLY, Kafka, ko, publish, karta hai — "DUAL, WRITE" problem, ko, SOLVE, karta hai.

@Transactional
public void createOrder(Order order) {
    orderRepository.save(order);
    outboxRepository.save(new OutboxEvent("OrderCreated", order));   // SAME, transaction
}

Ek, database, WRITE, aur, EK, message, publish, DO, SEPARATE, operations, HAIN — agar, database, WRITE, SUCCEED, hoti, hai, LEKIN, message, publish, FAIL, hoti, hai, (ya, VICE-VERSA), system, INCONSISTENT, state, mein, chala, jaata hai. Outbox, pattern, ISE, SOLVE, karta hai.