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 для координации очереди для выполнения запущенных потоков.
надежность
Атомарность. Передача данных либо завершается успешно, либо завершается неудачей полностью, но никакая транзакция не является частичной