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