У меня есть вопрос относительно реализации протокола двухфазной фиксации в кластере zookeeper для координации определенной транзакции между несколькими клиентскими соединениями. Сейчас у меня есть следующая идея:
- Координатор
C
узел транзакции регистрации/app/tx
- регистрировать узел обработки для каждой вовлеченной стороны
/app/tx/%d (Ni)
- установить наблюдателей на каждом узле вовлеченной стороны
Ni
- уведомить каждого
Ni
о новой транзакцииtx
Ni
проверяет, создан ли его узелNi
устанавливает транзакцию для подготовки () / прерывания ()C
получает результат от всех сторон и решает прервать / продолжить- если продолжить, каждый
Ni
выполняет запрос N
i уведомляетC
сообщение ОК / сбойC
решает прервать | зафиксироватьC
уведомляет всех о результате.tx
совершено
Но я не уверен, что это правильное направление? И я не уверен, как это реализовать на python kazoo или на любом другом языке (Java)? Было бы неплохо, если бы вы могли мне помочь, предоставив фрагмент или исправив мой алгоритм? Кроме того, как расширить этот протокол для связи между сотрудниками зоопарка? Скажем, мы поддерживаем несколько разных кластеров zookeeper, которые заключены в зоны или любую другую абстрактную сущность, и мы хотели бы выполнять такие явные транзакции в определенной зоне с использованием двухфазной фиксации?
C
должен делать больше вещей). Я думаю, что узлы могут сами решить, следует ли совершать транзакцию или нет, так как они следят за всеми локациями ZK - person Christopher Swenson   schedule 03.11.2014