Avoiding Distributed Transactions
@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- @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
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.