Zookeeper читает не полностью согласовано с документацией, но создает ли znode полностью согласованно? - PullRequest
0 голосов
/ 31 декабря 2018

Ниже приведены мои предположения / вопросы.Пожалуйста, обращайтесь, если что-то не так в моем понимании

Читая документацию, я понял, что

  1. Записи Zookeeper идут к Лидеру, и они копируются на последователя.Запрос на чтение может быть подан от самого ведомого (ведомого).Следовательно, чтение может быть устаревшим.
  2. Почему мы не можем использовать zookeeper в качестве системы кэширования?
  3. Поскольку запрос на запись всегда выполняется / перенаправляется в Leader, это означает, что создание узла согласованно.Когда два клиента, отправляющие запрос на запись для одного и того же имени узла, один из них ВСЕГДА получит ошибку (NodeExistsException).
  4. Если выше указано значение true, тогда мы можем использовать zookeeper для отслеживания дублированных запросов, создав znodewith requestId.
  5. Для генерации порядкового номера в распределенной системе мы можем использовать создание последовательного узла.

1 Ответ

0 голосов
/ 02 января 2019

Исходя из того, какая информация имеется в вопросе и комментариях, выясняется, что основной вопрос: В многосерверной архитектуре без сохранения состояния, как наилучшим образом предотвратить дублирование данных , здесь данные "был ли этот возврат обработан?"

Это квалифицируется как "в основном основанное на мнении".Есть несколько способов сделать это, и ни один из них не является лучшим.Вы можете сделать это с MySQL, и вы можете сделать это с Zookeeper.

Теперь приходит чистое мнение и предположение:

Чтобы обработать возврат, где-то должна быть какая-то база данных?Почему бы просто не проверить это?Сценарий с дублирующимся запросом, против которого вы готовитесь, кажется редким явлением - такого не будет сто раз в секунду.Если это так, то этот сценарий не гарантирует высокую производительность реализации.Просто поиск в базе данных должен быть в порядке.

Ваша рабочая нагрузка, похоже, равна 1:1 read:write.Каждый раз, когда возмещение обрабатывается, вы проверяете, обработано ли оно уже или нет, а если не обработано, обрабатываете его и делаете запись для него.Теперь сам Zookeeper говорит, что лучше всего работает для чего-то вроде 10:1 коэффициент read:write.Хотя для MySQL такой метрики не существует, нет необходимости * в определенных * гарантиях, которые zookeeper делает для операций записи.Следовательно, я надеюсь, что это должно быть лучше для чистой интенсивной записи. (* Гарантии, такие как последовательность, широковещание, консенсус и т. Д.)

Просто ничтожество, но ваши данные представляют собой линейный список из сотен (тысяч? Миллионов?) Идентификаторов транзакций.Это точно , для чего построен MySQL (или любая база данных) и его первичный ключ.Zookeeper создан для более сложных / мощных иерархических данных.Это вам не нужно.

...