Začíname s programami Java a Zookeeper

1. Prehľad

Apache ZooKeeper je distribuovaná koordinačná služba čo uľahčuje vývoj distribuovaných aplikácií. Používajú ho projekty ako Apache Hadoop, HBase a ďalšie na rôzne prípady použitia, ako sú voľby vedúcich, správa konfigurácie, koordinácia uzlov, správa prenájmu serverov atď.

Uzly v klastri ZooKeeper ukladajú svoje údaje do zdieľaného hierarchického menného priestoru ktorý je podobný štandardnému súborovému systému alebo stromovej dátovej štruktúre.

V tomto článku sa budeme venovať tomu, ako používať Java API Apache Zookeeper na ukladanie, aktualizáciu a mazanie informácií uložených v ZooKeeper.

2. Nastaviť

Najnovšiu verziu knižnice Java Apache ZooKeeper nájdete tu:

 org.apache.zookeeper zookeeper 3.4.11 

3. ZooKeeper Data Model - ZNode

ZooKeeper má hierarchický priestor názvov, podobne ako distribuovaný systém súborov, kde ukladá koordinačné údaje, ako sú stavové informácie, informácie o koordinácii, informácie o polohe atď. Tieto informácie sú uložené v rôznych uzloch.

Každý uzol v strome ZooKeeper sa označuje ako ZNode.

Každý ZNode zachováva čísla verzií a časové značky pre akékoľvek zmeny údajov alebo zoznamov ACL. To tiež umožňuje ZooKeeper overiť medzipamäť a koordinovať aktualizácie.

4. Inštalácia

4.1. Inštalácia

Najnovšie vydanie ZooKeeper si môžete stiahnuť tu. Pred tým sa musíme ubezpečiť, že spĺňame systémové požiadavky tu popísané.

4.2. Samostatný režim

V tomto článku budeme ZooKeeper používať v samostatnom režime, pretože vyžaduje minimálnu konfiguráciu. Postupujte podľa krokov popísaných v tejto dokumentácii.

Poznámka: V samostatnom režime neexistuje replikácia, takže ak zlyhá proces ZooKeeper, služba bude nefunkčná.

5. ZooKeeper CLI Príklady

Teraz budeme na interakciu so ZooKeeper používať rozhranie príkazového riadku ZooKeeper (CLI):

bin / zkCli.sh -server 127.0.0.1:2181

Príkaz vyššie spustí lokálne samostatnú inštanciu. Poďme sa teraz pozrieť na to, ako vytvoriť ZNode a ukladať informácie v rámci ZooKeeper:

[zk: localhost: 2181 (CONNECTED) 0] create / MyFirstZNode ZNodeVal Vytvorené / FirstZnode

Práve sme vytvorili ZNode „MyFirstZNode“ v koreňovom adresári hierarchického menného priestoru ZooKeeper a napísané „ZNodeVal“ k tomu.

Pretože sme neprešli žiadnym príznakom, vytvorený ZNode bude perzistentný.

Poďme teraz vydať a „Dostať“ príkaz na načítanie údajov aj metadát spojených s ZNode:

[zk: localhost: 2181 (CONNECTED) 1] get / FirstZnode „Myfirstzookeeper-app“ cZxid = 0x7f ctime = ne 18. februára 16:15:47 IST 2018 mZxid = 0x7f mtime = ne 18. februára 16:15:47 IST 2018 pZxid = 0x7f cversion = 0 dataVersion = 0 aclVersion = 0 dočasný vlastník = 0x0 dataLength = 22 numChildren = 0

Môžeme aktualizovať údaje o existujúcom ZNode pomocou nastaviť prevádzka.

Napríklad:

set / MyFirstZNode ZNodeValUpdated

Týmto sa aktualizujú údaje o MyFirstZNode od ZNodeVal do ZNodeValUpdated.

6. Príklad Java API ZooKeeper

Poďme sa teraz pozrieť na Zookeeper Java API a vytvorme uzol, aktualizujme uzol a získajme nejaké dáta.

6.1. Balíky Java

Väzby ZooKeeper Java sa skladajú hlavne z dvoch balíkov Java:

  1. org.apache.zookeeper: ktorá definuje hlavnú triedu klientskej knižnice ZooKeeper spolu s mnohými statickými definíciami typov a stavov udalostí ZooKeeper
  2. org.apache.zookeeper.data: ktorá definuje charakteristiky spojené so ZNódmi, ako sú napríklad zoznamy riadenia prístupu (ACL), identifikátory, štatistiky atď.

K dispozícii je tiež ZooKeeper Java API, ktoré sa používajú pri implementácii servera, ako napr org.apache.zookeeper.server, org.apache.zookeeper.server.kvóruma org.apache.zookeeper.server.upgrade.

Sú však nad rámec tohto článku.

6.2. Pripojenie k inštancii ZooKeeper

Poďme teraz vytvárať ZK Pripojenie trieda, ktorá sa použije na pripojenie a odpojenie od už spusteného ZooKeeper:

public class ZKConnection {private ZooKeeper zoo; CountDownLatch connectionLatch = nový CountDownLatch (1); // ... verejné pripojenie ZooKeeper (hostiteľ reťazca) vyvolá IOException, InterruptedException {zoo = new ZooKeeper (host, 2000, new Watcher () {public void process (WatchedEvent we) {if (we.getState () == KeeperState. SyncConnected) {connectionLatch.countDown ();}}}); connectionLatch.await (); návratová zoo; } public void close () hodí InterruptedException {zoo.close (); }}

Ak chcete použiť službu ZooKeeper, musí aplikácia najskôr vytvoriť inštanciu objektu Ošetrovateľ v zoo triedy, ktorá je hlavnou triedou klientskej knižnice ZooKeeper.

V spojiť metódou, vytvárame inštanciu inštancie Ošetrovateľ v zoo trieda. Zaregistrovali sme tiež metódu spätného volania na spracovanie WatchedEvent od ZooKeeper na prijatie spojenia a podľa toho dokončiť spojiť metóda pomocou odpočítavanie metóda CountDownLatch.

Po nadviazaní spojenia so serverom sa klientovi priradí ID relácie. Aby bola relácia platná, mal by klient pravidelne odosielať na server signály srdca.

Klientská aplikácia môže volať ZooKeeper API, pokiaľ jej ID relácie zostane v platnosti.

6.3. Klientske operácie

Teraz vytvoríme ZKManager rozhranie, ktoré sprístupňuje rôzne operácie, ako je vytváranie ZNode a ukladanie niektorých údajov, načítanie a aktualizácia údajov ZNode:

verejné rozhranie ZKManager {public void create (cesta reťazca, dáta v bajtoch []) vyvolá KeeperException, InterruptedException; public Object getZNodeData (reťazcová cesta, logická hodnota watchFlag); aktualizácia public void (cesta reťazca, dáta bajtov []) vyvolá KeeperException, InterruptedException; }

Pozrime sa teraz na implementáciu vyššie uvedeného rozhrania:

verejná trieda ZKManagerImpl implementuje ZKManager {súkromný statický ZooKeeper zkeeper; privátna statická ZKConnection zkConnection; public ZKManagerImpl () {initialize (); } private void initialize () {zkConnection = new ZKConnection (); zkeeper = zkConnection.connect ("localhost"); } public void closeConnection () {zkConnection.close (); } public void create (cesta reťazca, dáta v bajtoch []) vyvolá KeeperException, InterruptedException {zkeeper.create (cesta, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } public Object getZNodeData (reťazcová cesta, boolean watchFlag) vyvolá KeeperException, InterruptedException {byte [] b = null; b = zkeeper.getData (cesta, null, null); vrátiť nový reťazec (b, "UTF-8"); } aktualizácia public void (cesta reťazca, dáta v bajtoch []) vyvolá výnimku KeeperException, InterruptedException {int version = zkeeper.exists (path, true) .getVersion (); zkeeper.setData (cesta, dáta, verzia); }}

Vo vyššie uvedenom kóde spojiť a odpojiť hovory sa delegujú na skôr vytvorené ZK Pripojenie trieda. Náš vytvoriť metóda sa používa na vytvorenie ZNode na danej ceste z údajov bajtového poľa. Iba na demonštračné účely sme ponechali zoznam ACL úplne otvorený.

Po vytvorení je ZNode perzistentný a pri odpojení klienta sa nevymaže.

Logika načítania údajov ZNode zo ZooKeeper v našom getZNodeData metóda je celkom jednoduchá. Nakoniec s aktualizovať metóda, kontrolujeme prítomnosť ZNode na danej ceste a načítame ju, ak existuje.

Okrem toho pri aktualizácii údajov najskôr skontrolujeme existenciu ZNode a získame aktuálnu verziu. Potom vyvoláme setData metóda s cestou ZNode, dát a aktuálnej verzie ako parametrov. ZooKeeper aktualizuje údaje, iba ak sa odovzdaná verzia zhoduje s najnovšou verziou.

7. Záver

Pri vývoji distribuovaných aplikácií hrá Apache ZooKeeper rozhodujúcu úlohu ako distribuovaná koordinačná služba. Konkrétne pre prípady použitia, ako je ukladanie zdieľanej konfigurácie, výber hlavného uzla atď.

ZooKeeper tiež poskytuje elegantné rozhrania API založené na jazyku Java, ktoré sa majú použiť v aplikačnom kóde na strane klienta na bezproblémovú komunikáciu so ZooKeeper ZNodes.

A ako vždy, všetky zdroje tohto tutoriálu nájdete na Githube.


$config[zx-auto] not found$config[zx-overlay] not found