Как реализовать 2pc в кластере Zookeeper?

У меня есть вопрос относительно реализации протокола двухфазной фиксации в кластере zookeeper для координации определенных транзакций между несколькими клиентскими подключениями. Прямо сейчас у меня есть следующая идея:

  • координатор C зарегистрировать узел транзакции /app/tx
  • зарегистрировать узел обработки для каждой участвующей стороны /app/tx/%d (Ni)
  • установить наблюдателей на каждом задействованном стороннем узле Ni
  • уведомить каждого Ni о новой транзакции tx
  • Ni проверяет, что его узел создан
  • Ni устанавливает транзакцию для prepare()/abort()
  • C получает результат от всех сторон и решает прервать / продолжить
  • если продолжить, каждый Ni выполняет запрос
  • Nя уведомляю C с ок / провал
  • C решает прервать | совершить
  • C уведомляет всех о результате.
  • tx совершено

Но я не уверен, что это верное направление? И я не уверен, как реализовать это в python kazoo или любом другом языке (Java)? Было бы хорошо, если бы вы могли помочь мне, предоставив фрагмент или исправив мой алгоритм? Кроме того, как расширить этот протокол для связи между зоопарками? Скажем, мы поддерживаем несколько разных кластеров zookeeper, которые обернуты в зоны или любую другую абстрактную сущность, и мы хотели бы выполнять такие явные транзакции в конкретной зоне с использованием двухфазного принятия?

1 ответ

Важной настройкой вашего алгоритма на основе 2PC с использованием Zk является:

  • Координатор C зарегистрирует транзакцию, узел / приложение /tx
  • Координатор уведомляет клиентов о транзакции
  • Координатор устанавливает WATCH в /app/tx, когда под ним создаются узлы
  • Каждый клиент создает временный узел /app/tx/node_i с решением о подготовке / отмене
  • Клиент устанавливает часы на узле
  • Coorindator решает зафиксировать / отменить после ожидания времени ожидания или всех созданных узлов
  • Координатор меняет значение эпиферальных узлов для каждого клиента для фиксации / отмены
  • Клиенты фиксируют / отменяют транзакцию
  • Клиенты обновляют значение узла до подтвержденного
Другие вопросы по тегам