JavaRush /Java blogi /Random-UZ /Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi uchun ha...
Viacheslav
Daraja

Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi uchun hayot qanday

Guruhda nashr etilgan
Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi qanday yashaydi - 1

Kirish

Java ilovalari ko'pincha turli xil konfiguratsiyalarga ega. Masalan, manzil va ulanish porti. Masalan, agar biz Properties sinfidan foydalansak, u shunday ko'rinishi mumkin :
public static void main(String []args) {
	Properties props = new Properties();
	props.setProperty("host", "www.tutorialspoint.com");
	System.out.println("Hello, " + props.getProperty("host"));
}
Va bu etarli bo'lib tuyuladi, chunki ... fayldan Xususiyatlar olishimiz mumkin. Va hamma narsa biz bilan bitta mashinada yaxshi ketayotganga o'xshaydi. Ammo tasavvur qiling-a, bizning tizimimiz bir-biridan ajratilgan turli xil tizimlardan iborat bo'la boshlaydi? Bunday tizim taqsimlangan tizimlar deb ham ataladi. Vikipediyada siz quyidagi taʼrifni topishingiz mumkin: Taqsimlangan tizimlar - komponentlari turli tarmoq kompyuterlarida joylashgan tizimlar boʻlib, ular bir-biri bilan aloqa oʻrnatadi va bir-biri bilan xabar almashish orqali oʻz harakatlarini muvofiqlashtiradi. Siz quyidagi diagrammani ko'rishingiz mumkin:
Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi qanday yashaydi - 2
Ushbu yondashuv bilan yagona tizim tarkibiy qismlarga bo'linadi. Konfiguratsiya alohida umumiy komponent hisoblanadi. Boshqa komponentlarning har biri konfiguratsiya komponenti uchun mijoz vazifasini bajaradi. Bu holat " Tarqatilgan konfiguratsiya " deb ataladi . Tarqalgan konfiguratsiyaning turli xil ilovalari mavjud. Va bugungi sharhda men ulardan biri Zookeeper bilan tanishishni taklif qilaman.
Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi qanday yashaydi - 3

Hayvonot bog'i xodimi

Zookeeper bilan tanishish yo'li ularning rasmiy veb-saytidan boshlanadi: zookeeper.apache.org Rasmiy veb-saytda siz " Yuklab olish " bo'limiga o'tishingiz kerak . Ushbu bo'limda arxivni .tar.gz formatida yuklab oling, masalan, "zookeeper-3.4.13.tar.gz". tar - birlik tizimlari uchun an'anaviy arxiv formati. gz - arxivni siqish uchun gzip dan foydalanilishini bildiradi. Agar biz Windows mashinasida ishlasak, bu bizni bezovta qilmasligi kerak. Ko'pgina zamonaviy arxivchilar (masalan, 7-zip ) ular bilan Windows-da mukammal ishlashi mumkin. Keling, tarkibni ba'zi bir katalogga chiqaramiz. Shu bilan birga, biz farqni ko'ramiz - chiqarilgan holatda diskda u taxminan 60 megabaytni egallaydi va biz taxminan 35 megabayt hajmdagi arxivni yuklab oldik. Ko'rib turganingizdek, siqish haqiqatan ham ishlaydi. Endi siz Zookeeper-ni ishga tushirishingiz kerak. Umuman olganda, Zookeeper o'ziga xos serverdir. Zookeeper ikkita rejimdan birida ishga tushirilishi mumkin: Mustaqil yoki Replikatsiya . Keling, birinchi variant sifatida ham tanilgan eng oddiy variantni ko'rib chiqaylik - Mustaqil rejim. Zookeper ishlashi uchun unga konfiguratsiya fayli kerak. Shuning uchun, keling, uni bu erda yarataylik: [КаталогРаспаковкиZookeeper]/conf/zoo.cfg. Windows uchun biz Medium tavsiyasidan foydalanamiz: " Windows-da Apache ZooKeeper-ni o'rnatish ". Konfiguratsiya faylining mazmuni quyidagicha bo'ladi:
tickTime=2000
dataDir=C:/zookeeper-3.4.13/data
clientPort=2181
Keling, zookeeper ildiz katalogiga yo'lni o'z ichiga olgan ZOOKEEPER_HOME muhit o'zgaruvchisini qo'shamiz (o'rtadagi ko'rsatmalardagi kabi), shuningdek, PATH muhit o'zgaruvchisiga quyidagi fragmentni qo'shamiz: Shuningdek ;%ZOOKEEPER_HOME%\bin; , dataDir da ko'rsatilgan katalog mavjud bo'lishi kerak, aks holda Zookeeper bo'lmaydi. serverni ishga tushirish mumkin. Endi biz zkServer buyrug'i yordamida serverni xavfsiz ishga tushirishimiz mumkin. Zookeeper katalogi yo'l muhiti o'zgaruvchisiga qo'shilganligi tufayli biz Zookeper buyruqlarini faqat bin katalogidan emas, istalgan joydan chaqira olamiz.
Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi qanday yashaydi - 4

ZNode

" Zookeper Overview " da taʼkidlanganidek , Zookeper-dagi maʼlumotlar daraxt tuzilmasida tashkil etilgan ZNodlar (tugunlar) shaklida taqdim etiladi . Ya'ni, har bir ZNode ma'lumotlarni o'z ichiga olishi va bolalar ZNodelariga ega bo'lishi mumkin. ZNode tashkiloti haqida qo'shimcha ma'lumotni Zookeeper hujjatlarida topishingiz mumkin: " Ma'lumotlar modeli va ierarxik nomlar maydoni ". Zookeeper va ZNode bilan ishlash uchun Zookeeper CLI (Buyruqlar qatori interfeysi) dan foydalanamiz . Ilgari biz serverni zkServer buyrug'i yordamida ishga tushirdik. Endi ulanish uchun keling, bajaramiz. zkCli.cmd -server 127.0.0.1:2181 Agar muvaffaqiyatli bo'lsa, Zookeeper-ga ulanish seansi yaratiladi va biz taxminan quyidagi natijani ko'ramiz:
Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi qanday yashaydi - 5
Qizig'i shundaki, o'rnatishdan keyin ham Zookeeper allaqachon ZNode-ga ega. U quyidagi yo'lga ega:/zookeeper/quota
Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi qanday yashaydi - 6
Bular " kvotalar " deb ataladi . " Apache ZooKeeper Essentials " da ta'kidlanganidek , har bir ZNode u bilan bog'langan kvotaga ega bo'lishi mumkin va u saqlashi mumkin bo'lgan ma'lumotlarni cheklaydi. Znodlar soni va saqlangan ma'lumotlar miqdori bo'yicha cheklov belgilanishi mumkin. Bundan tashqari, agar bu chegara oshib ketgan bo'lsa, ZNode bilan operatsiya bekor qilinmaydi, lekin chegaradan oshib ketganligi haqida ogohlantirish olinadi. ZNode haqida " ZooKeeper dasturchi qo'llanmasi: ZNodes " da o'qish tavsiya etiladi . ZNode bilan qanday ishlashingiz mumkinligi haqida bir nechta misollar:
Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi qanday yashaydi - 7
Shuni ham ta'kidlashni istardimki, ZNodes boshqacha. Oddiy ZNodelar (agar siz qo'shimcha bayroqlarni ko'rsatmasangiz) " doimiy " turdagi . " Efemer tugun " turidagi ZNode mavjud . Bunday ZNodelar faqat ular yaratilgan Zookeeper ulanish seansi davomida mavjud. " Sequence Node " turidagi ZNode mavjud . Ushbu ZNodlar noyoblikni ta'minlash uchun ketma-ketlikdagi raqam bilan qo'shiladi. Sequence Node doimiy yoki efemer bo'lishi mumkin. Bu yerda ZNode haqida qisqacha ma'lumot ham tavsiya etiladi: " Zookeeper ZNodes - Xarakteristikalar va Misol ".
Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi qanday yashaydi - 8

ZNode Watcher

Men ham kuzatuvchilar haqida gapirmoqchiman. Ular haqida batafsil ma'lumotlar Zookeeper hujjatlarida yozilgan: " ZooKeeper Watches ". Muxtasar qilib aytganda, kuzatuvchi - bu qandaydir hodisa tomonidan qo'zg'atiladigan bir martalik tetik. GetData(), getChildren() yoki exists() amallarini bajarish orqali maʼlumotlarni olish orqali biz qoʻshimcha harakat sifatida trigger yaratishimiz mumkin. Zookeeper hodisani qayta ishlash tartibini ta'minlaydi. Bundan tashqari, hujjatlarda aytilishicha, biz yangi ZNode qiymatini ko'rishimizdan oldin, biz eski qiymatni yangisiga o'zgartirish haqidagi voqeani ko'ramiz. Kuzatuvchilar haqida ko'proq ma'lumotni bu erda o'qishingiz mumkin: " ZooKeeper soatlari - xususiyatlar va kafolatlar ". Buni sinab ko'rish uchun keling, CLI dan yana foydalanamiz : Bizda ba'zi bir xizmat holatini saqlaydigan qiymatga ega ZNode mavjud deb faraz qilaylik:
[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
Endi, agar ma'lumotlar /services/service1/statuso'zgarsa, bizning bir martalik triggerimiz ishga tushadi:
Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi qanday yashaydi - 9
Qizig'i shundaki, Zookeeper-ga ulanishda biz kuzatuvchi qanday ishlashini ham ko'ramiz:
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
SyncConnected - Zookeperning mumkin bo'lgan voqealaridan biri. Bu haqda batafsil ma'lumotni API tavsifida topish mumkin.
Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi qanday yashaydi - 10

Zookeeper va Java

Endi biz Zookeeper nima qilishi mumkinligi haqida asosiy tushunchaga egamiz. Keling, u bilan CLI orqali emas, balki Java orqali ishlaylik. Buning uchun bizga Java ilovasi kerak bo'ladi, unda Zookeeper bilan qanday ishlashni ko'rib chiqamiz. Ilovani yaratish uchun biz Gradle loyiha qurish tizimidan foydalanamiz . " Gradle Build Init plaginidan " foydalanib, biz loyihani yaratamiz. Buni amalga oshirish uchun keling, buyruqni bajaramiz: gradle init --type java-application Agar Gradle bizdan aniqlik kiritish uchun savollarni so'rasa, biz standart qiymatlarni qoldiramiz (Enter tugmasini bosing). Endi qurilish skriptini ochamiz, ya'ni. build.gradle fayli. Unda bizning loyihamiz nimadan yaratilganligi va u qanday artefaktlarga (kutubxonalar, ramkalar) bog'liqligi tavsifini o'z ichiga oladi. Chunki biz Zookeeper-dan foydalanmoqchimiz, keyin uni qo'shishimiz kerak. Shuning uchun, bog'liqliklar blokiga Zookeeper-ga qaramlikni qo'shamiz:
dependencies {
    implementation 'org.apache.zookeeper:zookeeper:3.4.13'
Gradle haqida ko'proq sharhda o'qishingiz mumkin: " Gradle haqida qisqacha kirish ". Shunday qilib, bizda Java loyihasi bor, biz unga Zookeeper kutubxonasini uladik. Endi nimadir yozamiz. Esda tutganimizdek, CLI-dan foydalanib, biz shunga o'xshash narsani bog'ladik: zkCli.cmd -server 127.0.0.1:2181 Asosiy usulda App sinfidagi "server" atributini e'lon qilaylik:
String server = "127.0.0.1:2181";
Ulanish bir zumda amalga oshiriladigan harakat emas. Ulanishni qandaydir tarzda dastur bajarilishining asosiy qismida kutishimiz kerak bo'ladi. Shuning uchun bizga qulf kerak. Keling, buni quyida e'lon qilaylik:
Object lock = new Object();
Endi aloqa o'rnatildi, deyishi kerak. Esda tutganimizdek, biz buni CLI orqali qilganimizda, kuzatuvchi biz uchun ishlagan. Shunday qilib, Java kodida hamma narsa bir xil. Bizning kuzatuvchimiz muvaffaqiyatli yakunlanganligi haqida xabarni ko'rsatadi va bu haqda kutayotgan barchani qulf orqali xabardor qiladi. Keling, kuzatuvchi yozamiz:
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();
            }
		}
	}
};
Endi zooKeeper serveriga ulanishni qo'shamiz:
int sessionTimeout = 2000;
ZooKeeper zooKeeper = null;
synchronized (lock) {
	zooKeeper = new ZooKeeper(server, sessionTimeout, connectionWatcher);
	lock.wait();
}
Bu erda hamma narsa oddiy. Dasturning asosiy yo'nalishida asosiy usulni bajarayotganda biz qulfni ushlaymiz va hayvonot bog'i xodimiga ulanishni so'raymiz. Shu bilan birga, biz qulfni bo'shatamiz va kimdir qulfni ushlab, davom etishimiz mumkinligi haqida bizga xabar berguncha kutamiz. Ulanish o'rnatilganda, kuzatuvchi ishlaydi. U SyncConnected hodisasi kelganligini tekshiradi (biz eslaganimizdek, kuzatuvchi buni CLI orqali ushlagan) va keyin xabar yozadi. Keyinchalik, biz qulfni ushlaymiz (asosiy ip uni ilgari chiqarganligi sababli) va qulfni kutayotgan barcha mavzularga davom etishimiz mumkinligi haqida xabar beramiz. Hodisalarni qayta ishlash ipi sinxronlashtirilgan blokdan chiqadi va shu bilan qulfni bo'shatadi. Asosiy mavzu bildirishnoma oldi va qulfning chiqarilishini kutgandan so'ng, bajarishni davom ettiradi, chunki qulfni qabul qilmaguncha, u sinxronlangan blokdan chiqa olmaydi va ishlashni davom ettira olmaydi. Shunday qilib, multithreading va Zookeeper API-dan foydalanib, biz turli xil amallarni bajarishimiz mumkin. Zookeeper API CLI ruxsat berganidan ancha kengroqdir. Masalan:
// 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"));
Ko'rib turganingizdek, tugunni yaratishda biz ACL ni sozlashimiz mumkin. Bu yana bir muhim xususiyatdir. ACLlar ZNode bilan harakatlarga tegishli ruxsatlardir. Sozlamalar juda ko'p, shuning uchun batafsil ma'lumot uchun rasmiy hujjatlarga murojaat qilishingizni tavsiya qilaman: " Zookeeper ACL ruxsatnomalari ".
Hayvonot bog'i xodimi yoki hayvonot bog'i xodimi qanday yashaydi - 11

Xulosa

Nega biz buni o'qidik? Chunki Zookeeper boshqa mashhur texnologiyalarda qo'llaniladi. Misol uchun, Apache Kafka Zookeeper dasturini talab qiladi, bu haqda " Kafka Tez boshlash qo'llanmasi " da o'qishingiz mumkin . U NOSQL HBase ma'lumotlar bazasida ham qo'llaniladi, bu haqda siz " HBase Quickstart Guide " da o'qishingiz mumkin. Aslida, boshqa ko'plab loyihalar Zookeeper-dan foydalanadi. Ulardan ba'zilari " Haqiqiy dunyoda zookeeperdan foydalanish " ro'yxatida keltirilgan. Umid qilamanki, men "nima uchun" degan savolga javob berdim. Endi eng muhim savol: "Keyingi nima?" Birinchidan, Apache Zookeeper mavzusidagi quyidagi kitoblarni o'qishingiz mumkin: Ikkinchidan, Zookeeper haqida ajoyib video hisobotlar mavjud. Tavsiya etilgan tomosha: Uchinchidan, dunyo rasmini to'ldiradigan bir nechta foydali maqolalar mavjud: Bu juda qisqa sharh, lekin kirish so'zi sifatida foydali bo'ladi deb umid qilaman. #Viacheslav
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION