Zookeeper - Обзор

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

Фреймворк ZooKeeper изначально был создан в Yahoo! для доступа к своим приложениям простым и надежным способом. Позже Apache ZooKeeper стал стандартом для организованного сервиса, используемого Hadoop, HBase и другими распределенными фреймворками. Например, Apache HBase использует ZooKeeper для отслеживания состояния распределенных данных.

Прежде чем двигаться дальше, важно, чтобы мы кое-что знали о распределенных приложениях. Итак, давайте начнем обсуждение с краткого обзора распределенных приложений.

Распределенное приложение

Распределенное приложение может работать в нескольких системах в сети в заданное время (одновременно) за счет координации между собой для быстрого и эффективного выполнения конкретной задачи. Обычно сложные и трудоемкие задачи, выполнение которых нераспределенным приложением (работающим в одной системе) занимает несколько часов, распределенное приложение может выполнить за несколько минут, используя вычислительные возможности всей задействованной системы.

Время выполнения задачи можно еще больше сократить, настроив распределенное приложение для работы в большем количестве систем. Группа систем, в которых работает распределенное приложение, называетсяCluster и каждая машина, работающая в кластере, называется Node.

Распределенное приложение состоит из двух частей: Server и Clientприменение. Серверные приложения фактически распределены и имеют общий интерфейс, так что клиенты могут подключаться к любому серверу в кластере и получать тот же результат. Клиентские приложения - это инструменты для взаимодействия с распределенным приложением.

Преимущества распределенных приложений

  • Reliability - Отказ одной или нескольких систем не приводит к отказу всей системы.

  • Scalability - Производительность может быть увеличена по мере необходимости путем добавления дополнительных машин с незначительными изменениями конфигурации приложения без простоев.

  • Transparency - Скрывает сложность системы и показывает себя как единое целое / приложение.

Проблемы распределенных приложений

  • Race condition- Две или более машины пытаются выполнить определенную задачу, которая на самом деле должна выполняться только одной машиной в любой момент времени. Например, общие ресурсы должны быть изменены только на одной машине в любой момент времени.

  • Deadlock - Две или более операций, ожидающих завершения друг друга бесконечно.

  • Inconsistency - Частичный сбой данных.

Для чего предназначен Apache ZooKeeper?

Apache ZooKeeper - это служба, используемая кластером (группой узлов) для координации между собой и поддержки общих данных с помощью надежных методов синхронизации. ZooKeeper сам по себе является распределенным приложением, предоставляющим услуги для написания распределенного приложения.

Общие услуги, предоставляемые ZooKeeper, следующие:

  • Naming service- Определение узлов в кластере по имени. Он похож на DNS, но для узлов.

  • Configuration management - Самая последняя и актуальная информация о конфигурации системы для присоединяющегося узла.

  • Cluster management - Присоединение / выход узла в кластере и статус узла в реальном времени.

  • Leader election - Выбор узла лидером для координации.

  • Locking and synchronization service- Блокировка данных при их изменении. Этот механизм помогает в автоматическом восстановлении после сбоя при подключении других распределенных приложений, таких как Apache HBase.

  • Highly reliable data registry - Доступность данных даже при выходе из строя одного или нескольких узлов.

Распределенные приложения предлагают множество преимуществ, но они также создают несколько сложных и труднопреодолимых проблем. Фреймворк ZooKeeper предоставляет полный механизм для решения всех проблем. Состояние гонки и взаимоблокировка обрабатываются с помощьюfail-safe synchronization approach. Другой главный недостаток - несогласованность данных, которую ZooKeeper решает с помощьюatomicity.

Преимущества ZooKeeper

Вот преимущества использования ZooKeeper -

  • Simple distributed coordination process

  • Synchronization- Взаимное исключение и взаимодействие между серверными процессами. Этот процесс помогает в Apache HBase для управления конфигурацией.

  • Ordered Messages

  • Serialization- Кодируйте данные по определенным правилам. Убедитесь, что ваше приложение работает стабильно. Этот подход можно использовать в MapReduce для координации очереди для выполнения запущенных потоков.

  • Reliability

  • Atomicity - Передача данных либо успешна, либо полностью завершена, но ни одна транзакция не является частичной.