Согласование протоколов Gossip и Raft вызывает состояния гонки при обнаружении отказов. #1
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?
Проблема
Система одновременно запускает два протокола обнаружения отказов: GossipManager (в конечном счёте согласованный, AP-стиль) для распространения информации о состоянии узлов и RaftCoordinator (строго согласованный, CP-стиль) для консенсуса и управления кластером.
Эти протоколы обмениваются информацией асинхронно, без механизма координации, что приводит к состояниям гонки при принятии решений о восстановлении узлов. Ложные срабатывания возникают, когда SelfHealingManager инициирует восстановление узла, который Raft всё ещё считает живым. Ложные пропуски происходят, когда узел помечен Gossip как живой, но Raft считает его мёртвым.
Состояния «разделённого мозга» во времени проявляются, когда разные компоненты системы имеют разное представление о состоянии кластера.
Архитектурная проблема
Как согласовать информацию от протокола Gossip (AP, в конечном счёте согласованный) и протокола Raft (CP, строго согласованный), чтобы принимать единые решения о состоянии кластера и работоспособности узлов?
Предлагаемые направления исследований
Соответствующие файлы с исходным кодом