JavaRush /Java Blog /Random-TK /Zookeeper ýa-da zookeeper üçin durmuş nähili
Viacheslav
Dereje

Zookeeper ýa-da zookeeper üçin durmuş nähili

Toparda çap edildi
Zookeeper ýa-da haýwanat bagynyň işgäri nähili ýaşaýar - 1

Giriş

Java programmalarynda köplenç dürli konfigurasiýalar bolýar. Mysal üçin, salgy we birikme porty. Mysal üçin, “Properties” synpyny ulansak, şeýle bolup biler :
public static void main(String []args) {
	Properties props = new Properties();
	props.setProperty("host", "www.tutorialspoint.com");
	System.out.println("Hello, " + props.getProperty("host"));
}
Bu ýeterlik ýaly bolup görünýär, sebäbi ... Sypatlary faýldan alyp bileris. Hemme zat bir enjamda biziň bilen oňuşýan ýaly. Emma ulgamymyzyň biri-birinden aýrylan dürli ulgamlardan ybarat bolup biljekdigini göz öňüne getiriň? Şeýle sistema paýlanan ulgamlar hem diýilýär. Wikipediýada aşakdaky kesgitlemäni tapyp bilersiňiz: Paýlanan ulgamlar, bölekleri biri-biri bilen aragatnaşyk saklaýan we biri-biri bilen habar alyşmak arkaly hereketlerini utgaşdyrýan dürli ulgam kompýuterlerinde ýerleşýän ulgamlardyr. Aşakdaky diagramma seredip bilersiňiz:
Zookeeper ýa-da haýwanat bagynyň işgäri nähili ýaşaýar - 2
Bu çemeleşme bilen ýekeje ulgam komponentlere bölünýär. Konfigurasiýa aýratyn umumy komponent. Beýleki komponentleriň her biri konfigurasiýa komponenti üçin müşderi hökmünde çykyş edýär. Bu hadysa " Paýlanan konfigurasiýa " diýilýär . Paýlanan konfigurasiýanyň dürli ýerine ýetirişleri bar. Şu günki synymda, Zookeeper diýilýän biri bilen tanyşmagy teklip edýärin.
Zookeeper ýa-da haýwanat bagynyň işgäri nähili ýaşaýar - 3

Zookeeper

Zookeeper bilen tanyşmagyň ýoly resmi web sahypasy bilen başlaýar: zookeeper.apache.org Resmi web sahypasynda " Downloadüklemek " bölümine girmeli . Bu bölümde arhiwi .tar.gz formatda göçürip alyň, mysal üçin “zookeeper-3.4.13.tar.gz”. tar, bölüm ulgamlary üçin adaty arhiw formatydyr. gz - gzipiň arhiwi gysmak üçin ulanylýandygyny aňladýar. Windows enjamynda işleýän bolsak, bu bizi biynjalyk etmeli däldir. Häzirki zaman arhiwleriniň köpüsi (mysal üçin, 7-zip ) olar bilen Windows-da ajaýyp işläp biler. Mazmuny käbir kataloglara çykalyň. Şol bir wagtyň özünde, tapawudyny göreris - çykarylan ýagdaýdaky diskde takmynan 60 megabaýt tutar we takmynan 35 megabaýtlyk arhiw göçürip aldyk. Görşüňiz ýaly gysyş hakykatdanam işleýär. Indi Zookeeper-i işe girizmeli. Umuman, Zookeeper serweriň bir görnüşidir. Zookeeper iki re ofimiň birinde işledilip bilner: Standalone ýa-da Replicated . Iň ýönekeý warianty gözden geçireliň, birinji wariant hökmünde hem tanalýar - özbaşdak re modeim. Zookeper-iň işlemegi üçin konfigurasiýa faýly gerek. Şonuň üçin geliň şu ýerde döredeliň : [КаталогРаспаковкиZookeeper]/conf/zoo.cfg. Windows üçin “Orta”: “ Windows-da Apache ZooKeeper gurmak ” atly maslahaty ulanarys . Sazlama faýlynyň mazmuny şuňa meňzeş bir zat bolar:
tickTime=2000
dataDir=C:/zookeeper-3.4.13/data
clientPort=2181
ZoOKeper kök katalogyna (orta görkezmelerdäki ýaly) ýoly öz içine alýan ZOOKEEPER_HOME gurşaw üýtgeýjisini goşalyň we PATH gurşaw üýtgeýjisine aşakdaky bölegi goşalyň: Şeýle hem ;%ZOOKEEPER_HOME%\bin; , DataDir-de görkezilen katalog bolmaly, ýogsam Zookeeper bolmaz serweri açyp bilýär. Indi zkServer buýrugyny ulanyp serweri arkaýyn başlap bileris. Zookeeper katalogynyň ýol gurşawynyň üýtgeýjisine goşulandygy sebäpli, Zookeper buýruklaryny diňe bin katalogyndan däl-de, islendik ýerden çagyryp bileris.
Zookeeper ýa-da haýwanat bagynyň işgäri nähili ýaşaýar - 4

ZNode

" Zookeeper Syn " -da aýdylyşy ýaly , Zookeper-de maglumatlar agaç gurluşyna düzülen ZNodes (düwünler) hökmünde görkezilýär . .Agny, her ZNode maglumatlary öz içine alyp biler we çaga ZNodlary bolup biler. ZNode guramasy barada has giňişleýin Zookeeper resminamalarynda okap bilersiňiz: “ Maglumat modeli we iýerarhiki at giňişligi ”. Zookeeper we ZNode bilen işlemek üçin Zookeeper CLI (Command Line interfeýsi) ulanarys . Ozal zkServer buýrugyny ulanyp serwere başladyk. Indi birikmek üçin ýerine ýetireliň. zkCli.cmd -server 127.0.0.1:2181 Üstünlikli bolsa, Zookeeper bilen baglanyşyk sessiýasy dörediler we takmynan aşakdaky çykyşy göreris:
Zookeeper ýa-da haýwanat bagynyň işgäri nähili ýaşaýar - 5
Gyzykly tarapy, gurnandan soňam derrew Zookeeper-de ZNode bar. Onuň aşakdaky ýoly bar:/zookeeper/quota
Zookeeper ýa-da haýwanat bagynyň işgäri nähili ýaşaýar - 6
Bular " kwotalar " diýilýär . " Apache ZooKeeper Essentials " -da aýdylyşy ýaly , her ZNode-da saklap bilýän maglumatlary çäklendirip, onuň bilen baglanyşykly kwota bolup biler. Znodlaryň sany we saklanylýan maglumatlaryň mukdary çäklendirilip bilner. Mundan başga-da, bu çäkden geçse, ZNode bilen amal ýatyrylmaýar, ýöne çäkden geçmek barada duýduryş alynýar. ZNode hakda " ZooKeeper Programmer's Guide: ZNodes " -da okamak maslahat berilýär . ZNode bilen nädip işläp boljakdygyňyzdan birnäçe mysal:
Zookeeper ýa-da haýwanat bagynyň işgäri nähili ýaşaýar - 7
ZNodes-iň başgaçadygyny hem belläsim gelýär. Adaty ZNodes (goşmaça baýdaklary görkezmeseňiz) " dowamly " görnüşlidir . " Ephemeral düwün " görnüşiniň ZNode bar . Şeýle ZNodlar diňe döredilen Zookeeper birikme sessiýasynyň dowamlylygy üçin bar. " Yzygiderlilik düwmesi " görnüşli ZNode bar . Bu ZNodlar özboluşlylygy üpjün etmek üçin yzygiderlilikden san bilen goşulýar. Yzygiderlilik düwmesi dowamly ýa-da efemer bolup biler. ZNode hakda birneme maglumat bu ýerde maslahat berilýär: “ Zookeeper ZNodes - häsiýetler we mysal ”.
Zookeeper ýa-da haýwanat bagynyň işgäri nähili ýaşaýar - 8

ZNode synçy

Şeýle hem synçylar hakda gürleşmek isleýärin. Olar hakda jikme-jiklikler Zookeeper-iň resminamalarynda ýazylýar: " ZooKeeper sagatlary ". Gysgaça aýdylanda, synçy käbir hadysalar sebäpli ýüze çykýan bir gezeklik trigger. GetData (), getChildren () ýa-da bar () amallaryny ýerine ýetirip, maglumatlary almak bilen, goşmaça hereket hökmünde trigger döredip bileris. Zookeeper hadysanyň işleniş tertibini üpjün edýär. Mundan başga-da, resminamalarda täze ZNode bahasyny görmezden ozal köne bahany täzesine üýtgetmek barada bir waka görjekdigimiz aýdylýar. Gözegçiler hakda has giňişleýin maglumaty şu ýerden okap bilersiňiz: “ ZooKeeper sagatlary - aýratynlyklary we kepillikleri ”. Muny synap görmek üçin, CLI-ni ýene bir gezek ulanalyň : Geliň, käbir hyzmatlaryň ýagdaýyny saklaýan gymmaty bolan ZNode bar diýip pikir edeliň:
[zk: 127.0.0.1:2181(CONNECTED) 0] create /services/service1/status stopped
Created /services/service1/status
[zk: 127.0.0.1:2181(CONNECTED) 1] get /services/service1/status [watch]
stopped
Indi maglumatlar /services/service1/statusüýtgese, bir gezeklik triggerimiz ot alar:
Zookeeper ýa-da haýwanat bagynyň işgäri nähili ýaşaýar - 9
Zookeeper bilen birikdirilende, synçynyň nähili işleýändigini görýäris:
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
SyncConnected Zookeper bolup biljek wakalaryň biridir. Bu hakda has giňişleýin maglumatlary API düşündirişinde tapyp bilersiňiz.
Zookeeper ýa-da haýwanat bagynyň işgäri nähili ýaşaýar - 10

Zookeeper we Java

Indi Zookeeper-iň edip biljek zatlaryna esasy düşünýäris. Geliň indi onuň bilen CLI däl-de, Java arkaly işläliň. Munuň üçin Zookeeper bilen nähili işlemelidigimizi görkezýän Java programmasy gerek bolar. Programmany döretmek üçin “Gradle” taslama gurmak ulgamyny ulanarys . " Gradle Build Init plugin " -i ulanyp, taslama dörederis. Munuň üçin buýrugy işledeliň: gradle init --type java-application Gradle soraglary aýdyňlaşdyrmagy sorasa, deslapky bahalary goýarys (Enter basyň). Indi gurmak skriptini açalyň, ýagny build.gradle faýly. Taslamamyzyň nämeden ýasalandygyny we haýsy artefaktlara (kitaphanalara, çarçuwalara) baglydygyny öz içine alýar. Sebäbi Zookeeper-den peýdalanmak isleýäris, soňam goşmaly. Şonuň üçin, Zookeeper-e baglylyk blokyna garaşlylyk goşalyň:
dependencies {
    implementation 'org.apache.zookeeper:zookeeper:3.4.13'
Gradle hakda has giňişleýin okap bilersiňiz: " Gradle barada gysgaça giriş ". Şeýlelikde, Java taslamamyz bar, Zookeeper kitaphanasyny oňa birikdirdik. Geliň indi bir zat ýazalyň. Iadymyzda bolsa, CLI ulanyp, şuňa meňzeş bir zady bagladyk: zkCli.cmd -server 127.0.0.1:2181 Geliň, “Serwer” atributyny “App” synpynda esasy usulda yglan edeliň:
String server = "127.0.0.1:2181";
Baglanyşyk gyssagly hereket däl. Baglanyşygyň bolmagy üçin nämüçindir programmanyň ýerine ýetirilişinde garaşmaly bolarys. Şonuň üçin bize gulp gerek. Aşakda yglan edeliň:
Object lock = new Object();
Indi baglanyşyk guruldy diýýän biri gerek. .Adyma düşýär, muny CLI arkaly edenimizde, synçy biziň üçin işledi. Şonuň üçin Java kodunda hemme zat birmeňzeş. Gözegçimiz üstünlikli gutarmak barada habar görkezer we gulp bilen garaşýanlaryň hemmesine habar berer. Gözegçi ýazalyň:
Watcher connectionWatcher = new Watcher() {
	public void process(WatchedEvent we) {
		if (we.getState() == Event.KeeperState.SyncConnected) {
			System.out.println("Connected to Zookeeper in " + Thread.currentThread().getName());
			synchronized (lock) {
            	lock.notifyAll();
            }
		}
	}
};
Indi zooKeeper serwerine birikmäni goşalyň:
int sessionTimeout = 2000;
ZooKeeper zooKeeper = null;
synchronized (lock) {
	zooKeeper = new ZooKeeper(server, sessionTimeout, connectionWatcher);
	lock.wait();
}
Bu ýerde hemme zat ýönekeý. Programmanyň esasy sapagynda esasy usuly ýerine ýetirenimizde, gulpy tutýarys we zookeeper-e birikmegi haýyş edýäris. Şol bir wagtyň özünde, gulpy boşadýarys we başga biri gulpy tutup, dowam edip biljekdigimizi habar berýänçä garaşýarys. Baglanyşyk gurlanda synçy işlär. SyncConnected hadysasynyň gelendigini barlar (ýadymyzda bolsa, synçynyň CLI-den tutan zady şu) we soňra habar ýazar. Soň bolsa, gulpy tutýarys (esasy sapak öňem goýberilipdi) we gulpy dowam etdirip biljekdigimize garaşýan ähli sapaklary habar berýäris. Wakany gaýtadan işlemek sapagy sinhron blokdan çykýar we şeýlelik bilen gulpy boşadýar. Esasy sapak habarnamany aldy we gulpuň çykmagyna garaşandan soň ýerine ýetirilmegini dowam etdirýär, sebäbi gulpy alýança, sinhron blokdan çykyp, işlemegini dowam etdirip bilmez. Şeýlelik bilen, köp okamak we Zookeeper API ulanyp, dürli hereketleri edip bileris. Zookeeper API, CLI-iň rugsat berýäninden has giňdir. Mysal üçin:
// Creation нового узла
String znodePath = "/zookeepernode2";
List<ACL> acls = ZooDefs.Ids.OPEN_ACL_UNSAFE;
if (zooKeeper.exists(znodePath, false) == null) {
	zooKeeper.create(znodePath, "data".getBytes(), acls, CreateMode.PERSISTENT);
}

// Получение данных из узла
byte[] data = zooKeeper.getData(znodePath, null, null);
System.out.println("Result: " + new String(data, "UTF-8"));
Görşüňiz ýaly, düwün döredilende ACL sazlap bileris. Bu başga bir möhüm aýratynlyk. ACL-ler ZNode bilen hereketlere degişlidir. Sazlamalar kän, şonuň üçin jikme-jiklikler üçin resmi resminamalara ýüz tutmagyňyzy maslahat berýärin: “ Zookeeper ACL rugsatlary ”.
Zookeeper ýa-da haýwanat bagynyň işgäri nähili ýaşaýar - 11

Netije

Näme üçin muny okadyk? Sebäbi Zookeeper beýleki meşhur tehnologiýalarda ulanylýar. Mysal üçin, Apache Kafka " Kafka çalt başlangyç gollanmasynda " okap boljak Zookeeper-i talap edýär . Şeýle hem, " HBase Quickstart Guide " -da has giňişleýin okap boljak NOSQL maglumatlar bazasy HBase-de ulanylýar . Aslynda, başga-da köp taslamada Zookeeper ulanylýar. Olaryň käbiri " Hakyky dünýäde Zookeeper ulanmak " sanawynda . "Näme üçin" diýen soraga jogap berdim diýip umyt edýärin. Indi iň möhüm sorag: "Indiki näme?" Ilki bilen Apache Zookeeper mowzugynda aşakdaky kitaplary okap bilersiňiz: Ikinjiden, Zookeeper hakda ajaýyp wideo habarlary bar. Maslahat berilýän görnüş: Üçünjiden, dünýäniň keşbini doldurjak birnäçe peýdaly makalalar bar: Bu gaty gysga syn, ýöne giriş sözi hökmünde peýdaly bolar diýip umyt edýärin. # Wiaçeslaw
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION