Отсутствие гарантий завершения Saga/TCC-транзакций в сетях с разделением #7
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проблема
Реализация распределённого координатора кластера на основе алгоритма консенсуса Raft реализует распределённые транзакции через паттерны Saga (SagaManager) и TCC (TCCManager). Однако текущая реализация не предоставляет формальных гарантий финальности транзакций при сетевых разделениях.
Симптомы. При потере лидера кластера Raft транзакции могут оставаться в промежуточных состояниях (компенсация, подтверждение). Механизм компенсации не имеет гарантий доставки — если узел с неудачной компенсацией не перезапустится, транзакция зависнет навсегда. Отсутствует единый журнал транзакций для восстановления после отказа координатора. TCCManager использует таймауты, но не имеет механизма повторных попыток для фаз Confirm/Cancel.
Архитектурная проблема
Как обеспечить атомарность и финальность распределённых транзакций в системе с возможными частичными отказами при использовании паттернов Saga/TCC?
Предлагаемые направления исследований
Соответствующие файлы с исходным кодом:
internal/cluster/raft_coordinator.go(строки 1800–2100, Saga/TCC)internal/cluster/raft_coordinator.go(RecoveryManager)