Пояснення Apache ZooKeeper


376

Я намагаюся зрозуміти ZooKeeper, як він працює і що робить. Чи є програма, яка порівнянна з ZooKeeper?

Якщо ви знаєте, то як би ви описали ZooKeeper мирянину?

Я спробував apache wiki, zookeeper sourceforge ... але я все ще не в змозі з цим пов'язатись.

Я щойно прочитав через http://zookeeper.sourceforge.net/index.sf.shtml , тож чи не існує більше таких служб? Це так просто, як просто реплікація серверної послуги?


6
Подібний , але не точну відповідь , який ви шукаєте: stackoverflow.com/questions/1479442/real-world-use-of-zookeeper
zengr


Ви можете прочитати цей документ ZooKeeper: Координація без очікування для систем в Інтернеті Автор двох Yahoo! інженери
yaphet

Ось технологічна бесіда, яка є вступом до Apache ZooKeeper від Каміля Фурньє, який є центральним директором RentTheRunway. Я сподіваюся, що це корисно.
Генадінік

@Luca Geretti ... Відповідно до мене, Zookeper надає набір apis, щоб ми могли використовувати його для координації розподіленої програми. виправте мене, якщо я помиляюся.
користувач3797438

Відповіді:


434

Коротше кажучи, ZooKeeper допомагає створювати розподілені програми.

Як це працює

Ви можете описати ZooKeeper як копіювану послугу синхронізації з можливою послідовністю. Це надійно, оскільки збережені дані розподіляються між декількома вузлами (цей набір вузлів називається "ансамблем") і один клієнт підключається до будь-якого з них (тобто конкретного "сервера"), мігруючи, якщо один вузол виходить з ладу; поки працює сувора більшість вузлів, ансамбль вузлів ZooKeeper живий. Зокрема, головний вузол динамічно вибирається консенсусом всередині ансамблю; якщо головний вузол виходить з ладу, роль ведучого переходить на інший вузол.

Як обробляються записи

Майстер є авторитетом для запису: таким чином записи можуть бути гарантовано збережені в порядку, тобто записи є лінійними . Кожен раз, коли клієнт пише в ансамбль, більшість вузлів зберігає інформацію: ці вузли включають сервер для клієнта і, очевидно, головний майстер. Це означає, що кожне записування робить сервер в курсі майстра. Це також означає, що ви не можете мати одночасні записи.

Гарантія лінійного запису є причиною того, що ZooKeeper не працює на робочих навантаженнях, що домінують при записі. Зокрема, його не слід використовувати для обміну великими даними, наприклад, ЗМІ. Поки ваше спілкування передбачає спільні дані, ZooKeeper допомагає вам. Коли дані можуть бути записані одночасно, ZooKeeper насправді заважає, оскільки це накладає суворе впорядкування операцій, навіть якщо це не є строго необхідним з точки зору письменників. Його ідеальне використання - для координації, де обмінюються повідомленнями між клієнтами.

Як обробляються читання

Тут ZooKeeper перевершує: читання є одночасними, оскільки їх обслуговує конкретний сервер, до якого підключається клієнт. Однак це також є причиною можливої ​​послідовності: "перегляд" клієнта може бути застарілим, оскільки майстер оновлює відповідний сервер з обмеженою, але невизначеною затримкою.

Детально

Реплікувана база даних ZooKeeper включає дерево знодів , які є сутностями, що приблизно представляють вузли файлової системи ( уявляйте їх як каталоги). Кожен znode може бути збагачений байтовим масивом, який зберігає дані. Також кожен znode може мати під собою інші znodes, практично утворюючи внутрішню систему каталогів.

Послідовні вузли

Цікаво, що ім'я znode може бути послідовним , це означає, що ім'я, яке надає клієнт при створенні znode, є лише префіксом: повне ім'я також надається послідовним номером, обраним ансамблем. Це корисно, наприклад, для цілей синхронізації: якщо кілька клієнтів хочуть отримати блокування на ресурсі, вони можуть одночасно створити послідовний зон у локації: той, хто отримує найменший номер, має право на блокування.

Ефемерні вузли

Також znode може бути ефемерним : це означає, що він знищується, як тільки клієнт, який його створив, відключиться. Це в основному корисно для того, щоб знати, коли клієнт відмовляє, що може бути актуально, коли сам клієнт має обов'язки, які повинен взяти на себе новий клієнт. Беручи приклад блокування, як тільки клієнт з блокуванням відключається, інші клієнти можуть перевірити, чи мають вони право на замок.

Годинники

Приклад, пов’язаний з відключенням клієнта, може бути проблематичним, якщо нам потрібно періодично опитувати стан znodes. На щастя, ZooKeeper пропонує систему подій, де годинник можна встановити на зоні. Ці годинники можуть бути встановлені для запуску події, якщо znode спеціально змінено або видалено або під ним створюються нові діти. Це однозначно корисно в поєднанні з послідовними та ефемерними варіантами для знодів.

Де і як ним користуватися

Канонічним прикладом використання Zookeeper є обчислення розподіленої пам'яті, де деякі дані діляться між клієнтськими вузлами і повинні бути доступні / оновлені дуже обережно для обліку синхронізації.

ZooKeeper пропонує бібліотеці сконструювати ваші примітиви синхронізації, тоді як можливість запуску розподіленого сервера дозволяє уникнути проблеми з єдиною точкою помилки, яка виникає при використанні централізованого сховища повідомлень (подібних до брокера).

ZooKeeper - це функція, що означає, що механізми, такі як вибори лідера, блокування, бар'єри тощо, вже відсутні, але їх можна записати вище примітивів ZooKeeper. Якщо API C / Java занадто громіздкий для ваших цілей, вам слід покластися на бібліотеки, побудовані на ZooKeeper, такі як клітки та особливо куратор .

Де читати більше

Окрім офіційної документації, яка є досить хорошою, я пропоную прочитати Розділ 14 Hadoop: Посібник з визначеннями, який містить ~ 35 сторінок, де пояснюється по суті, що робить ZooKeeper, а потім приклад служби конфігурації.


2
Я не впевнений, що я розумію схему комунікацій, яку ви пропонуєте, але ви можете використовувати ZooKeeper, щоб "опублікувати" інформацію від виробника, і кілька споживачів її прочитали. Якщо, з іншого боку, існує лише один екземпляр кожного типу сервера, то використання ZK мало користі.
Лука Геретті

57
ІМО цим не пояснює, що таке ZooKeeper для непрофесійних працівників. Коли мені знадобиться ZooKeeper? Що б я йому написав? Яку проблему вона вирішує? Це магазин ключових цінностей? Пошукова система? Розподілений замок? Чому я вибираю ZooKeeper, наприклад, Redis або файл, JIRA або нотатки після нього? Ви чітко знаєте багато про ZooKeeper - але чи можете ви пояснити це менш технічно?
Дан Пассаро

1
Оскільки Zookeeper лінійно пише, це не заважає мені використовувати Асинхронні API для створення вузлів і прийому відповіді у зворотному дзвінку? Хоча внутрішньо це може не дозволити одночасне записування, чи я щось пропускаю?
jdk2588

1
"Кожен раз, коли клієнт пише в ансамбль, більшість вузлів зберігає інформацію: ці вузли включають сервер для клієнта, і, очевидно, майстер" => Чи можете ви, будь ласка, вказати мені на документа. чи щось там, де це пояснено? Мені цікаво, чи можливо, що успішно було проведено зміну стану, виключаючи сервер, до якого підключений клієнт (у такому випадку клієнт може відчути дивну поведінку, що не зможе на хвилину прочитати власне записування)
senseiwu

2
Цілком і повністю антитетично поставлене питання. Якби це був годинник, він шукав би "пристрій, що зберігає час", а не опис електропередачі, колісного поїзда, спасання та їх взаємодії на основі періоду коливань, моменту інерції та впливу штучних кристалів сапфіру.
Rick O'Shea

10

Zookeeper - один з найкращих серверів та сервісів з відкритим кодом, який допомагає надійно координувати розподілені процеси. Zookeeper - це система CP (див. Теорема CAP Cfer), яка забезпечує толерантність і послідовність розподілу. Реплікація стану Zookeeper у всіх вузлах робить його з часом послідовним розподіленим сервісом.

Більше того, будь-який новообраний лідер оновлює своїх послідовників відсутніми пропозиціями або з коротким зображенням держави, якщо у послідовників багато пропозицій не буде.

Zookeeper також пропонує API, який дуже простий у використанні. Ця публікація в блозі, приклади API API Zookeeper , містить кілька прикладів, якщо ви шукаєте приклади.

То де ми це використовуємо? Якщо ваш розподілений сервіс потребує централізованого, надійного та послідовного управління конфігурацією, блокування, черги тощо, ви знайдете Zookeeper надійним вибором.


4
"Zookeeper - це система CP (див. Теорему CAP), яка забезпечує толерантність та роздільність", я думаю, що Zookeeper мають майстра та послідовників, коли майстер знищить, то один із послідовників буде обраний лідером, тому Zookeeper повинен забезпечити AP, однак C зрештою послідовно.
ЮФен Шен

5
З точки зору теореми CAP, "C" насправді означає лінійність. Фактично ZooKeeper надає "послідовну послідовність", а це означає, що оновлення від клієнтів застосовуватимуться в тому порядку, коли вони були отримані. Це слабше, ніж лінійність, але все ще дуже сильна, набагато сильніше, ніж "можлива послідовність". Зоохранник - це не A, і це тому, що якщо лідера не вдасться обрати (немає кворуму), тоді зоохранник не виконає запитів. Ось чому це не дуже доступно.
Біну Джордж

7

Я розумію ZooKeeper взагалі, але в мене були проблеми з термінами "кворум" та "розбитий мозок", тому, можливо, я можу поділитися своїми висновками з вами (я вважаю себе також непрофесіоналом).

Скажімо, у нас є кластер ZooKeeper з 5 серверів. Один з серверів стане лідером, а інші стануть послідовниками.

  • Ці 5 серверів утворюють кворум. Кворум просто означає "ці сервери можуть голосувати за того, хто повинен бути лідером".

  • Тож голосування відбувається на основі більшості. Більшість просто означає "більше половини", тому більше половини кількості серверів повинні погодитися, щоб конкретний сервер став лідером.

  • Отже, є ця погана річ, яка може статися під назвою "розщеплений мозок". Наскільки я розумію, розділений мозок - це просто так: Кластер з 5 серверів розпадається на дві частини, або, скажімо, це "серверні команди", можливо, одна частина 2, а інша 3 сервери. Це справді погана ситуація, як якщо б обидві "серверні команди" повинні виконати певне замовлення, як би ви вирішили, якій команді слід віддати перевагу? Можливо, вони отримали різну інформацію від клієнтів. Тому дуже важливо знати, яка «команда сервера» все ще є актуальною, а яку можна / слід ігнорувати.

  • Більшість також є причиною використання непарної кількості серверів. Якщо у вас є 4 сервери та розділений мозок, де два сервери відокремлюються, то обидві "серверні команди" можуть сказати "ей, ми хочемо вирішити, хто є лідером!" але як слід вирішити, які 2 сервери вам вибрати? З 5 серверами це просто: команда серверів з 3-ма серверами має більшість і може обрати нового лідера.

  • Навіть якщо у вас просто 3 сервери і один з них не вдається, інші 2 все ще складають більшість і можуть погодитися, що один з них стане новим лідером.

Я розумію, як тільки ти подумаєш про це деякий час і зрозумієш терміни, що це вже не так вже й складно. Я сподіваюся, що це також допомагає комусь зрозуміти ці терміни.


1

Zookeeper - це централізований сервер з відкритим кодом для підтримки та керування інформацією про конфігурацію, називання конвенцій та синхронізації для розподіленого кластерного середовища. Zookeeper допомагає розподіленим системам зменшити складність управління, забезпечуючи низьку затримку та високу доступність. Zookeeper спочатку був підпроектом для Hadoop, але зараз це незалежний проект вищого рівня Apache Software Foundation.

Більше інформації


2
Що змушує вас сказати, що зоопарк централізований? Зоохранник може і повинен бути розповсюджений.
Бенджамін Хаммер Норгаард

1

Я б запропонував такі ресурси:

  1. Стаття: https://pdos.csail.mit.edu/6.824/papers/zookeeper.pdf
  2. Лекція, яку пропонує MIT 6.824 з 36:00: https://youtu.be/pbmyrNjzdDk?t=2198

Я б запропонував переглянути відео, прочитати папір, а потім переглянути ще раз. Це було б легше зрозуміти, якщо ви заздалегідь знаєте Пліт.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.