Tail Spin

Blog So Hard

ZooKeeper Intro (Rus)

Любое распределенное приложение не может обойтись без центрального сервиса, который координирует процессы в нем. Реализовывать координацию можно, однако разработка отказоустйчивой системы координации без deadlock’ов и race conditions – задача не из тривиальных. Проект Apache ZooKeeper призван избавить нас от решения этой проблемы.

ZooKeeper – это распределенный, open-source сервис координнации для расспределенных приложений. Он предоставляет низкоуровневый API, с помощью которого приложения могут реализовать высокоуровневые сервисы для координации и синхронизации процессов в расспредеелнной системе.

API ZooKeeper’a черезвычайно прост. Распределенные процессы могут координироваться между собой с помощью расшаренной на всех клиентов иерархии znode’ов, организация которых по структуре похожа на файловую систему. Как и в файловой системе каждый znode идентифицируется своим уникальным путем, вида /node1/stuff/logs. В отличии от привычной файловой системы, каждый znode может быть корневым узлом для других znode’ов. Если говорить в терминах файловой системы: файл может выступать в роли директории. Znode’ы версионируются и ZooKeeper позволяет “смотреть”(watch) за изменениями в ноде. Как только znode’a изменяется, клиент, смотрящий за нодой, получает пакет, который говорит что в ноде произошло измение.

ZooKeeper реплицируемый и обрабатывает команды в строгой последовательности. Первое намного повышает его надежность, второе дает возможность пользователям разрабатывать примитивы синхронизации для распределенных систем. Все данные ZooKeeper держит в памяти, что позволяет ему работать черезвычайно быстро. Разработчики дауют нам следующие гарантии:

  • Sequential Consistency – Обновления от клиента будут применены в порядке в котором они были отправены
  • Atomicity – Изменения от клиента атомарны, они либо исполняются либо нет
  • Single System Image – Клиент получет одинаковый набор znode’ов вне зависимости от того к какому серверу он подключен
  • Reliability – Как только измение было применено, состояние будет неизменно до тех пор пока клиент не перетрет его
  • Timeliness – Состояние системы для клиент гарантированно up-to-date с некоторой погрешностью по времени