Ošetřovatel zoo je distribuovaná open-source koordinační služba pro distribuované aplikace. Odhaluje jednoduchou sadu primitiv pro implementaci služeb vyšší úrovně pro synchronizaci, údržbu konfigurace a seskupování a pojmenování.
V distribuovaném systému existuje více uzlů nebo strojů, které spolu potřebují komunikovat a koordinovat své akce. ZooKeeper poskytuje způsob, jak zajistit, aby si tyto uzly byly navzájem vědomy a mohly koordinovat své akce. Dělá to udržováním hierarchického stromu volaných datových uzlů Znodes , který lze použít k ukládání a načítání dat a udržování informací o stavu. ZooKeeper poskytuje sadu primitiv, jako jsou zámky, bariéry a fronty, které lze použít ke koordinaci akcí uzlů v distribuovaném systému. Poskytuje také funkce, jako je volba vůdce, převzetí služeb při selhání a obnova, které mohou pomoci zajistit odolnost systému vůči selháním. ZooKeeper je široce používán v distribuovaných systémech, jako je Hadoop, Kafka a HBase, a stal se nezbytnou součástí mnoha distribuovaných aplikací.
Proč to potřebujeme?
- Koordinační služby : Integrace/komunikace služeb v distribuovaném prostředí.
- Koordinační služby jsou složité. Jsou obzvláště náchylné k chybám, jako jsou závodní podmínky a uváznutí.
- Závodní podmínky -Dva nebo více systémů se snaží provést nějaký úkol.
- Zablokování – Dvě nebo více operací na sebe čekají.
- Aby byla koordinace mezi distribuovanými prostředími snadná, přišli vývojáři s nápadem nazvaným zookeeper, aby nemuseli zbavovat distribuované aplikace odpovědnosti za implementaci koordinačních služeb od nuly.
Co je distribuovaný systém?
- Více počítačových systémů pracuje na jediném problému.
- Jedná se o síť, která se skládá z autonomních počítačů, které jsou propojeny pomocí distribuovaného middlewaru.
- Klíčové vlastnosti : Souběžné, sdílení zdrojů, nezávislé, globální, větší odolnost proti chybám a poměr cena/výkon je mnohem lepší.
- Klíčový cíl s: Transparentnost, spolehlivost, výkon, škálovatelnost.
- Výzvy : Zabezpečení, chyba, koordinace a sdílení zdrojů.
Koordinační výzva
- Proč je koordinace v distribuovaném systému těžkým problémem?
- Správa koordinace nebo konfigurace pro distribuovanou aplikaci, která má mnoho systémů.
- Hlavní uzel, kde jsou uložena data clusteru.
- Pracovní uzly nebo podřízené uzly získávají data z tohoto hlavního uzlu.
- jediný bod selhání.
- synchronizace není jednoduchá.
- Je zapotřebí pečlivého návrhu a implementace.
Apache Zookeeper
Apache Zookeeper je distribuovaná open-source koordinační služba pro distribuované systémy. Poskytuje centrální místo pro distribuované aplikace pro ukládání dat, vzájemnou komunikaci a koordinaci činností. Zookeeper se používá v distribuovaných systémech ke koordinaci distribuovaných procesů a služeb. Poskytuje jednoduchý, stromově strukturovaný datový model, jednoduché API a distribuovaný protokol pro zajištění konzistence a dostupnosti dat. Zookeeper je navržen tak, aby byl vysoce spolehlivý a odolný proti chybám a zvládá vysokou úroveň propustnosti čtení a zápisu.
Zookeeper je implementován v Javě a je široce používán v distribuovaných systémech, zejména v ekosystému Hadoop. Je to projekt Apache Software Foundation a je vydán pod licencí Apache 2.0.
Architektura Zookeeper

Služby chovatelů v zoo
Architektura ZooKeeper se skládá z hierarchie uzlů zvaných znodes, organizovaných do stromové struktury. Každý uzel může ukládat data a má sadu oprávnění, která řídí přístup k uzlu. Znody jsou organizovány v hierarchickém jmenném prostoru, podobném systému souborů. V kořenu hierarchie je kořenový uzel a všechny ostatní uzly jsou potomky kořenového uzlu. Hierarchie je podobná hierarchii souborového systému, kde každý uzel může mít děti a vnoučata a tak dále.
Důležité komponenty v Zookeeper

Služby ZooKeeper
- Vůdce a následovník
- Vyžádejte si procesor – Aktivní v Leader Node a je zodpovědný za zpracování požadavků na zápis. Po zpracování odešle změny do sledovacích uzlů
- Atomové vysílání – Přítomno v uzlu vodícího i sledovacího uzlu. Je odpovědný za odesílání změn do jiných uzlů.
- Databáze v paměti (Replikované databáze) – Zodpovídá za ukládání dat v zookeeperu. Každý uzel obsahuje své vlastní databáze. Data se také zapisují do souborového systému, který umožňuje obnovení v případě jakýchkoli problémů s clusterem.
Ostatní komponenty
- Klient – Jeden z uzlů v našem clusteru distribuovaných aplikací. Přístup k informacím ze serveru. Každý klient pošle na server zprávu, aby dal serveru vědět, že klient žije.
- Server – Poskytuje klientovi veškeré služby. Dává klientovi potvrzení.
- Soubor – Skupina serverů Zookeeper. Minimální počet uzlů, které jsou nutné k vytvoření souboru, jsou 3.
Datový model Zookeeper

Datový model ZooKeeper
V Zookeeper jsou data uložena v hierarchickém jmenném prostoru, podobném systému souborů. Každý uzel ve jmenném prostoru se nazývá Znode a může ukládat data a mít potomky. Znody jsou podobné souborům a adresářům v systému souborů. Zookeeper poskytuje jednoduché API pro vytváření, čtení, zápis a mazání Znodes. Poskytuje také mechanismy pro detekci změn dat uložených ve Znodech, jako jsou hodinky a spouštěče. Znody udržují strukturu statistik, která zahrnuje: číslo verze, ACL, časové razítko, délku dat
Typy Znodů :
- Vytrvalost : Živé, dokud nebudou explicitně smazány.
- Efemérní : Aktivní, dokud není připojení klienta aktivní.
- Sekvenční : Trvalé nebo pomíjivé.
Proč potřebujeme ZooKeeper v Hadoopu?
Zookeeper se používá ke správě a koordinaci uzlů v clusteru Hadoop, včetně NameNode, DataNode a ResourceManager. V clusteru Hadoop Zookeeper pomáhá:
- Udržovat konfigurační informace: Zookeeper ukládá konfigurační informace pro cluster Hadoop, včetně umístění NameNode, DataNode a ResourceManager.
- Správa stavu clusteru: Zookeeper sleduje stav uzlů v clusteru Hadoop a lze jej použít ke zjištění, kdy uzel selhal nebo se stal nedostupným.
- Koordinujte distribuované procesy: Zookeeper lze použít ke koordinaci distribuovaných procesů, jako je plánování úloh a alokace zdrojů, napříč uzly v clusteru Hadoop.
Zookeeper pomáhá zajistit dostupnost a spolehlivost clusteru Hadoop poskytováním centrální koordinační služby pro uzly v clusteru.
Jak ZooKeeper v Hadoop funguje?
ZooKeeper funguje jako distribuovaný systém souborů a odhaluje jednoduchou sadu rozhraní API, která klientům umožňují číst a zapisovat data do systému souborů. Svá data ukládá do stromové struktury zvané znode, kterou si lze představit jako soubor nebo adresář v tradičním souborovém systému. ZooKeeper používá konsenzuální algoritmus, aby zajistil, že všechny jeho servery budou mít konzistentní pohled na data uložená v Znodech. To znamená, že pokud klient zapíše data do uzlu, budou tato data replikována na všechny ostatní servery v souboru ZooKeeper.
Jednou z důležitých vlastností ZooKeeperu je jeho schopnost podporovat myšlenku hodinek. Hodinky umožňují klientovi zaregistrovat se pro upozornění, když se změní data uložená v uzlu. To může být užitečné pro sledování změn v datech uložených v ZooKeeper a reakci na tyto změny v distribuovaném systému.
V Hadoop se ZooKeeper používá pro různé účely, včetně:
- Ukládání konfiguračních informací: ZooKeeper se používá k ukládání konfiguračních informací, které sdílí více komponent Hadoop. Může být například použit k uložení umístění NameNodes v clusteru Hadoop nebo adres uzlů JobTracker.
- Poskytování distribuované synchronizace: ZooKeeper se používá ke koordinaci činností různých součástí Hadoop a zajišťuje, že spolupracují konzistentním způsobem. Může být například použit k zajištění toho, aby byl v clusteru Hadoop aktivní pouze jeden NameNode.
- Údržba pojmenování: ZooKeeper se používá k údržbě centralizované služby pojmenování pro komponenty Hadoop. To může být užitečné pro identifikaci a lokalizaci zdrojů v distribuovaném systému.
ZooKeeper je základní složkou Hadoop a hraje klíčovou roli při koordinaci činnosti jejích různých dílčích složek.
Čtení a psaní v Apache Zookeeper
ZooKeeper poskytuje jednoduché a spolehlivé rozhraní pro čtení a zápis dat. Data jsou uložena v hierarchickém jmenném prostoru, podobném systému souborů, s uzly nazývanými znodes. Každý uzel může ukládat data a mít podřízené uzly. Klienti ZooKeeper mohou číst a zapisovat data do těchto uzlů pomocí metod getData() a setData(). Zde je příklad čtení a zápisu dat pomocí ZooKeeper Java API:
Jáva
// Connect to the ZooKeeper ensemble> ZooKeeper zk =>new> ZooKeeper(>'localhost:2181'>,>3000>,>null>);> // Write data to the znode '/myZnode'> String path =>'/myZnode'>;> String data =>'hello world'>;> zk.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);> // Read data from the znode '/myZnode'> byte>[] bytes = zk.getData(path,>false>,>null>);> String readData =>new> String(bytes);> // Prints 'hello world'> System.out.println(readData);> // Closing the connection> // to the ZooKeeper ensemble> zk.close();> |
>
>
Python3
from> kazoo.client>import> KazooClient> # Connect to ZooKeeper> zk>=> KazooClient(hosts>=>'localhost:2181'>)> zk.start()> # Create a node with some data> zk.ensure_path(>'/gfg_node'>)> zk.>set>(>'/gfg_node'>, b>'some_data'>)> # Read the data from the node> data, stat>=> zk.get(>'/gfg_node'>)> print>(data)> # Stop the connection to ZooKeeper> zk.stop()> |
>
linuxový hostitel
>
Relace a hodinky
Zasedání
- Požadavky v relaci jsou prováděny v pořadí FIFO.
- Jakmile je relace navázána, pak ID relace je přiřazena klientovi.
- Klient odešle tlukot srdce aby relace zůstala platná
- časový limit relace je obvykle udáván v milisekundách
Hodinky
- Watches jsou mechanismy pro klienty, kteří dostávají upozornění o změnách v Zookeeper
- Klient může sledovat při čtení konkrétního uzlu.
- Změny uzlů jsou úpravy dat spojených s uzly nebo změny v potomcích uzlů.
- Hodinky se spustí pouze jednou.
- Pokud platnost relace vyprší, hodinky se také odstraní.