Учебники

Zookeeper — Обзор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Прозрачность — скрывает сложность системы и показывает себя как единое целое / приложение.

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

  • Состояние гонки — две или более машины пытаются выполнить определенную задачу, которая фактически должна выполняться только одной машиной в любой момент времени. Например, общие ресурсы должны быть изменены только одной машиной в любой момент времени.

  • Тупик — две или более операций, ожидающих друг друга до бесконечности.

  • Несоответствие — Частичный сбой данных.

Состояние гонки — две или более машины пытаются выполнить определенную задачу, которая фактически должна выполняться только одной машиной в любой момент времени. Например, общие ресурсы должны быть изменены только одной машиной в любой момент времени.

Тупик — две или более операций, ожидающих друг друга до бесконечности.

Несоответствие — Частичный сбой данных.

Для чего нужен Apache ZooKeeper?

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

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

  • Служба именования — идентификация узлов в кластере по имени. Это похоже на DNS, но для узлов.

  • Управление конфигурацией — самая свежая и актуальная информация о конфигурации системы для присоединяющегося узла.

  • Управление кластером — присоединение / выход узла в кластере и статус узла в режиме реального времени.

  • Выбор лидера — Выбор узла в качестве лидера для целей координации.

  • Служба блокировки и синхронизации — блокировка данных при их изменении. Этот механизм помогает вам в автоматическом восстановлении после сбоя при подключении других распределенных приложений, таких как Apache HBase.

  • Высоконадежный реестр данных — доступность данных, даже когда один или несколько узлов не работают.

Служба именования — идентификация узлов в кластере по имени. Это похоже на DNS, но для узлов.

Управление конфигурацией — самая свежая и актуальная информация о конфигурации системы для присоединяющегося узла.

Управление кластером — присоединение / выход узла в кластере и статус узла в режиме реального времени.

Выбор лидера — Выбор узла в качестве лидера для целей координации.

Служба блокировки и синхронизации — блокировка данных при их изменении. Этот механизм помогает вам в автоматическом восстановлении после сбоя при подключении других распределенных приложений, таких как Apache HBase.

Высоконадежный реестр данных — доступность данных, даже когда один или несколько узлов не работают.

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

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

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

Простой распределенный процесс координации

Синхронизация — взаимное исключение и взаимодействие между процессами сервера. Этот процесс помогает в Apache HBase для управления конфигурацией.

Заказанные сообщения

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

надежность

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