Az első lépések a Java és a Zookeeper használatával

1. Áttekintés

Apache ZooKeeper elosztott koordinációs szolgáltatás ami megkönnyíti az elosztott alkalmazások fejlesztését. Olyan projektek használják, mint az Apache Hadoop, a HBase és mások különböző felhasználási esetekre, például a vezető megválasztására, a konfiguráció kezelésére, a csomópontok koordinálására, a szerver bérletének kezelésére stb.

A ZooKeeper-fürtön belüli csomópontok adataikat megosztott hierarchikus névtérben tárolják amely hasonló egy szokásos fájlrendszerhez vagy egy fa adatszerkezethez.

Ebben a cikkben azt vizsgáljuk, hogyan lehet az Apache Zookeeper Java API-ját használni a ZooKeeper alkalmazásban tárolt információk tárolásához, frissítéséhez és törléséhez.

2. Beállít

Az Apache ZooKeeper Java könyvtár legújabb verziója itt található:

 org.apache.zookeeper zookeeper 3.4.11 

3. ZooKeeper adatmodell - ZNode

A ZooKeeper hierarchikus névtérrel rendelkezik, hasonlóan egy elosztott fájlrendszerhez, ahol koordinációs adatokat tárol, például állapotinformációkat, koordinációs információkat, helyinformációkat stb. Ezeket az információkat különböző csomópontokon tárolják.

A ZooKeeper fa minden csomópontját ZNode-nak nevezzük.

Minden ZNode fenntartja a verziószámokat és az időbélyegeket az adatok vagy az ACL-módosítások számára. Ez lehetővé teszi a ZooKeeper számára a gyorsítótár ellenőrzését és a frissítések összehangolását.

4. Telepítés

4.1. Telepítés

A ZooKeeper legújabb kiadása innen tölthető le. Ezt megelőzően meg kell győződnünk arról, hogy megfelelünk az itt leírt rendszerkövetelményeknek.

4.2. Önálló mód

Ebben a cikkben a ZooKeeper-t önálló módban fogjuk futtatni, mivel minimális konfigurációt igényel. Kövesse az itt található dokumentációban leírt lépéseket.

Megjegyzés: Önálló módban nincs replikáció, így ha a ZooKeeper folyamat meghiúsul, a szolgáltatás leáll.

5. ZooKeeper CLI példák

Most a ZooKeeper parancssori felületét (CLI) fogjuk használni a ZooKeeperrel való interakcióhoz:

bin / zkCli.sh-kiszolgáló 127.0.0.1:2181

A fenti parancs egy önálló példányt indít helyben. Most nézzük meg, hogyan hozhatunk létre ZNode-ot és tárolhatunk információkat a ZooKeeper-en belül:

[zk: localhost: 2181 (CSATLAKOZVA) 0] create / MyFirstZNode ZNodeVal létrehozva / FirstZnode

Most létrehoztunk egy ZNode-ot ‘MyFirstZNode’ a ZooKeeper hierarchikus névtér gyökerénél és írva ‘ZNodeVal’ hozzá.

Mivel még egyetlen jelzőt sem teltünk át, a létrehozott ZNode állandó marad.

Most adjuk ki a 'kap' parancs a ZNode-hoz társított adatok és metaadatok lekérésére:

[zk: localhost: 2181 (CSATLAKOZOTT) 1] get / FirstZnode “Myfirstzookeeper-app” cZxid = 0x7f ctime = Február 18. Vas 16:15:47 IST 2018 mZxid = 0x7f mtime = Február 18. Vas 16:15:47 IST 2018 pZxid = 0x7f cversion = 0 dataVersion = 0 aclVersion = 0 efemerTulajdonos = 0x0 dataLength = 22 számGyermek = 0

Frissíthetjük egy meglévő adatait ZNode használni a készlet művelet.

Például:

set / MyFirstZNode ZNodeValUpdated

Ez frissíti az adatokat itt: MyFirstZNode tól től ZNodeVal nak nek ZNodeValUpdated.

6. ZooKeeper Java API példa

Most nézzük meg a Zookeeper Java API-t, és hozzunk létre egy csomópontot, frissítsük a csomópontot és szerezzünk be néhány adatot.

6.1. Java csomagok

A ZooKeeper Java kötések főleg két Java csomagból állnak:

  1. org.apache.zookeeper: amely meghatározza a ZooKeeper ügyfélkönyvtár fő osztályát, valamint a ZooKeeper eseménytípusok és állapotok sok statikus meghatározását
  2. org.apache.zookeeper.data: ez határozza meg a ZNodes-hez kapcsolódó jellemzőket, például hozzáférés-ellenőrzési listákat (ACL), azonosítókat, statisztikákat és így tovább

A ZooKeeper Java API-kat is használják a szerver megvalósításában, például org.apache.zookeeper.server, org.apache.zookeeper.server.quorum, és org.apache.zookeeper.server.upgrade.

Ezek azonban túl vannak a cikk keretein.

6.2. Csatlakozás egy ZooKeeper példányhoz

Most alkossunk ZKConnection osztály, amelyet a már futó ZooKeeper csatlakoztatásához és leválasztásához használnak:

nyilvános osztályú ZKConnection {privát ZooKeeper állatkert; CountDownLatch connectionLatch = új CountDownLatch (1); // ... public ZooKeeper connect (String host) dobja az IOException, InterruptedException {zoo = new ZooKeeper (host, 2000, new Watcher () {public void process (WatchedEvent we) {if (we.getState () == KeeperState. SyncConnected) {connectionLatch.countDown ();}}}); connectionLatch.await (); visszatérő állatkert; } public void close () dob InterruptedException {zoo.close (); }}

A ZooKeeper szolgáltatás használatához egy alkalmazásnak előbb példányosítania kell egy objektumot Állatgondozó osztály, amely a ZooKeeper kliens könyvtár fő osztálya.

Ban ben csatlakozzon módszerrel példát mutatunk be Állatgondozó osztály. Emellett regisztráltunk egy visszahívási módszert a WatchedEvent a ZooKeeper-től a kapcsolat elfogadásához, és ennek megfelelően fejezze be a csatlakozzon módszer segítségével visszaszámlálás a metódusa CountDownLatch.

Miután létrejött a kapcsolat a szerverrel, egy munkamenet-azonosítót rendelnek az ügyfélhez. A munkamenet érvényességének megőrzése érdekében az ügyfélnek rendszeresen szívveréseket kell küldenie a kiszolgálónak.

Az ügyfélalkalmazás addig hívhatja a ZooKeeper API-kat, amíg a munkamenet-azonosító érvényben marad.

6.3. Ügyfélműveletek

Most létrehozunk egy ZKManager felület, amely különböző műveleteket tár fel, például egy ZNode létrehozását és néhány adat mentését, a ZNode adatok beolvasását és frissítését:

nyilvános felület ZKManager {public void create (String path, byte [] data) dobja a KeeperException, InterruptedException; public Object getZNodeData (Karakterlánc útvonala, logikai watchFlag); public void update (String path, byte [] data) dobja a KeeperException, InterruptedException; }

Most nézzük meg a fenti felület megvalósítását:

public class ZKManagerImpl megvalósítja a ZKManager {private static ZooKeeper zkeeper; privát statikus ZKConnection zkConnection; public ZKManagerImpl () {inicializálás (); } private void inicializálás () {zkConnection = új ZKConnection (); zkeeper = zkConnection.connect ("localhost"); } public void closeConnection () {zkConnection.close (); } public void create (String path, byte [] data) dobja a KeeperException, InterruptedException {zkeeper.create (elérési út, adatok, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } public objektum getZNodeData (karakterlánc útvonala, logikai watchFlag) dobja a KeeperException, InterruptedException {byte [] b = null; b = zkeeper.getData (elérési út, null, null); return új karakterlánc (b, "UTF-8"); } public void update (String path, byte [] data) dobja a KeeperException, InterruptedException {int version = zkeeper.exists (elérési út, true) .getVersion (); zkeeper.setData (elérési út, adatok, verzió); }}

A fenti kódban csatlakozzon és bontani a hívások a korábban létrehozottra vannak delegálva ZKConnection osztály. A mi teremt metódust használnak egy ZNode létrehozására az adott útvonalon a bájt tömb adatokból. Kizárólag demonstrációs céllal az ACL-t teljesen nyitva tartottuk.

Miután létrehozta, a ZNode állandó és nem törlődik, amikor az ügyfél megszakad.

A logika a ZNode adatok lekérésére a ZooKeeper-től a getZNodeData módszer meglehetősen egyszerű. Végül a frissítés módszerrel ellenőrizzük a ZNode jelenlétét az adott útvonalon, és ha van ilyen, akkor beolvasjuk.

Ezen túl az adatok frissítéséhez először ellenőrizzük a ZNode létezését, és megkapjuk az aktuális verziót. Ezután meghívjuk a setData módszer a ZNode elérési útjával, az adatokkal és az aktuális verzióval paraméterként. A ZooKeeper csak akkor frissíti az adatokat, ha az átadott verzió megegyezik a legújabb verzióval.

7. Következtetés

Az elosztott alkalmazások fejlesztésekor az Apache ZooKeeper kritikus szerepet játszik elosztott koordinációs szolgáltatásként. Kifejezetten olyan felhasználási esetekre, mint a megosztott konfiguráció tárolása, a fő csomópont megválasztása stb.

A ZooKeeper emellett elegáns Java-alapú API-kat is kínál, amelyek az ügyféloldali alkalmazáskódban használhatók a ZooKeeper ZNodes zökkenőmentes kommunikációjához.

És mint mindig, az oktatóanyag összes forrása megtalálható a Githubon.


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