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

Расскажи про опыт работы с распределенными транзакциями

В Java распределенные транзакции обычно реализуются через JTA (Java Transaction API) и менеджеры транзакций вроде Atomikos или Narayana. Основная проблема - обеспечение ACID в распределенной среде (2PC - двухфазный коммит).

Пример с JTA:

java
@Stateless
public class DistributedService {
    @Resource
    private UserTransaction utx;
text
@PersistenceContext(unitName = "db1")
EntityManager em1;

@PersistenceContext(unitName = "db2")
EntityManager em2;

public void transfer() throws Exception {
    utx.begin();
    try {
        em1.persist(new Entity1());
        em2.persist(new Entity2());
        utx.commit();
    } catch (Exception e) {
        utx.rollback();
        throw e;
    }
}

}

text

Основные проблемы: 
- Производительность из-за блокировок
- Сложность отладки
- Риск частичного коммита при сбоях

Альтернативы: Saga-паттерн, eventual consistency, компенсирующие транзакции.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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