JavaRush /Блоги Java /Random-TG /Боғи зоотехникӣ ё зиндагӣ барои зоотехник чӣ гуна аст
Viacheslav
Сатҳи

Боғи зоотехникӣ ё зиндагӣ барои зоотехник чӣ гуна аст

Дар гурӯҳ нашр шудааст
Боғи ҳайвонот ва ё чӣ гуна як корманди боғи ҳайвонот - 1

Муқаддима

Барномаҳои Java аксар вақт конфигуратсияҳои гуногун доранд. Масалан, суроға ва порти пайвастшавӣ. Масалан, агар мо синфи Properties -ро истифода барем, он метавонад чунин бошад :
public static void main(String []args) {
	Properties props = new Properties();
	props.setProperty("host", "www.tutorialspoint.com");
	System.out.println("Hello, " + props.getProperty("host"));
}
Ва ин ба назар мерасад кифоя аст, зеро... мо метавонем аз файл Хусусиятҳоро гирем. Ва ба назар чунин мерасад, ки ҳама чиз бо мо дар як мошин хуб аст. Аммо тасаввур кунед, ки системаи мо аз системаҳои гуногун, ки аз ҳамдигар ҷудо шудаанд, иборат аст? Чунин системаро системаҳои тақсимшуда низ меноманд. Дар Википедиа шумо метавонед таърифи зеринро пайдо кунед: Системаҳои тақсимшуда системаҳое мебошанд, ки ҷузъҳои онҳо дар компютерҳои гуногуни шабакавӣ ҷойгиранд, ки бо ҳамдигар муошират мекунанд ва амалҳои худро тавассути мубодилаи паёмҳо бо ҳамдигар ҳамоҳанг мекунанд. Шумо метавонед ба диаграммаи зерин нигаред:
Боғи ҳайвонот ва ё чӣ гуна як корманди боғи ҳайвонот - 2
Бо ин равиш, як системаи ягона ба ҷузъҳо тақсим карда мешавад. Конфигуратсия як ҷузъи алоҳидаи умумӣ мебошад. Ҳар яке аз ҷузъҳои дигар ҳамчун муштарӣ барои ҷузъи конфигуратсия амал мекунанд. Ин ҳолат " Конфигуратсияи тақсимшуда " номида мешавад . Амалҳои зиёди конфигуратсияи тақсимшуда мавҷуданд. Ва дар баррасии имрӯза ман пешниҳод мекунам, ки бо яке аз онҳо, ки зоотехник ном дорад, шинос шавам.
Боғи ҳайвонот ва ё чӣ гуна як корманди боғи ҳайвонот - 3

зоотехник

Роҳи шиносоӣ бо Zookeeper аз вебсайти расмии онҳо оғоз мешавад: zookeeper.apache.org Дар вебсайти расмӣ шумо бояд ба бахши " Зеркашӣ " гузаред . Дар ин бахш бойгониро дар формати .tar.gz зеркашӣ кунед, масалан “zookeeper-3.4.13.tar.gz”. tar формати бойгонии анъанавӣ барои системаҳои воҳид мебошад. gz - маънои онро дорад, ки gzip барои фишурдани бойгонӣ истифода мешавад. Агар мо дар як мошини Windows кор кунем, пас ин набояд моро ташвиш диҳад. Аксари бойгониҳои муосир (масалан, 7-zip ) метавонанд бо онҳо дар Windows комилан кор кунанд. Биёед мундариҷаро ба баъзе директория барорем. Дар айни замон, мо фарқиятро мебинем - дар диск дар ҳолати истихроҷшуда он тақрибан 60 мегаbyteро ишғол мекунад ва мо бойгонии тақрибан 35 мегаbyteро зеркашӣ кардем. Тавре ки шумо мебинед, фишурдасозӣ воқеан кор мекунад. Акнун шумо бояд Zookeeper-ро оғоз кунед. Умуман, Zookeeper як навъ server аст. Zookeeper-ро дар яке аз ду шеваҳо иҷро кардан мумкин аст: мустақил ё такрорӣ . Биёед варианти соддатаринро баррасӣ кунем, ки ҳамчун варианти аввал маълум аст - Ҳолати мустақил. Барои Zookeper кор кардан ба он файли конфигуратсия лозим аст. Бинобар ин, биёед онро дар ин ҷо эҷод кунем: [КаталогРаспаковкиZookeeper]/conf/zoo.cfg. Барои Windows, мо тавсияи Миёнаро истифода хоҳем кард: " Насб кардани Apache ZooKeeper дар Windows ". Мундариҷаи файли конфигуратсия чунин хоҳад буд:
tickTime=2000
dataDir=C:/zookeeper-3.4.13/data
clientPort=2181
Биёед тағирёбандаи муҳити ZOOKEEPER_HOME-ро илова кунем, ки дорои роҳ ба феҳристи решаи zookeper аст (чунон ки дар дастурҳо дар миёнарав) ва инчунин фрагменти зеринро ба тағирёбандаи муҳити PATH илова кунед: ;%ZOOKEEPER_HOME%\bin; Инчунин, директорияи дар dataDir нишондодашуда бояд мавҷуд бошад, вагарна Zookeeper нахоҳад буд. метавонад serverро оғоз кунад. Акнун мо метавонем бо истифода аз фармони: zkServer serverро бехатар оғоз кунем. Бо шарофати он, ки директорияи Zookeeper ба тағирёбандаи муҳити роҳ илова карда шудааст, мо метавонем фармонҳои Zookeper-ро на танҳо аз директорияи бин, аз ҳама ҷо даъват кунем.
Боғи ҳайвонот ва ё чӣ гуна як корманди боғи ҳайвонот - 4

ZNode

Тавре ки дар " Баррасии Zookeeper " гуфта шудааст, маълумот дар Zookeper дар шакли ZNodes (гиреҳҳо) муаррифӣ карда мешавад, ки дар сохтори дарахт ташкил карда шудаанд. Яъне, ҳар як ZNode метавонад дорои маълумот бошад ва ZNodes кӯдак дошта бошад. Маълумоти бештарро дар бораи ташкилоти ZNode дар ҳуҷҷатҳои Zookeeper пайдо кардан мумкин аст: " Модели маълумот ва фазои иерархикӣ ". Барои кор бо Zookeeper ва ZNode мо Zookeeper CLI (интерфейси хати фармон) -ро истифода мебарем . Пештар, мо serverро бо истифода аз фармони zkServer оғоз кардем. Акнун, барои пайваст шудан, биёед иҷро кунем. zkCli.cmd -server 127.0.0.1:2181 Агар муваффақ шавад, сеанси пайвастшавӣ ба Zookeeper эҷод карда мешавад ва мо тақрибан натиҷаи зеринро мебинем:
Боғи ҳайвонот ва ё чӣ гуна як корманди боғи ҳайвонот - 5
Ҷолиб он аст, ки ҳатто фавран пас аз насб, Zookeeper аллакай ZNode дорад. Он дорои роҳи зерин аст:/zookeeper/quota
Боғи ҳайвонот ва ё чӣ гуна як корманди боғи ҳайвонот - 6
Инҳо ба истилоҳ " квотаҳо " мебошанд. Тавре ки дар " Apache ZooKeeper Essentials " гуфта шудааст, ҳар як ZNode метавонад квотаеро дошта бошад, ки бо он маълумотро нигоҳ дошта метавонад. Маҳдудияти шумораи znodes ва ҳаҷми маълумоти захирашуда метавонад муайян карда шавад. Ғайр аз он, агар ин маҳдудият зиёд бошад, пас амалиёт бо ZNode бекор карда намешавад, аммо дар бораи аз ҳад зиёд гузаштан огоҳӣ гирифта мешавад. Тавсия дода мешавад, ки дар бораи ZNode дар " Дастури барномасози ZooKeeper: ZNodes " хонед. Якчанд мисол аз он ҷо, ки чӣ тавр шумо метавонед бо ZNode кор кунед:
Боғи ҳайвонот ва ё чӣ гуна як корманди боғи ҳайвонот - 7
Ман инчунин мехоҳам қайд намоям, ки ZNodes гуногунанд. ZNodeҳои муқаррарӣ (агар шумо парчамҳои иловагӣ нишон надиҳед) аз намуди " доимӣ " мебошанд. ZNode аз навъи " Гиреҳи эфемерӣ " мавҷуд аст. Чунин ZNodeҳо танҳо дар давоми сеанси пайвасти Zookeeper, ки дар доираи он офарида шудаанд, вуҷуд доранд. Як ZNode навъи " Sequence Node " мавҷуд аст. Ин ZNodeҳо бо рақами пайдарпай замима карда мешаванд, то беназириро таъмин кунанд. Гиреҳи пайдарпай метавонад доимӣ ё эфемерӣ бошад. Маълумоти каме дар бораи ZNode низ дар ин ҷо тавсия дода мешавад: “ Zookeeper ZNodes – Характеристикаҳо ва Мисол ”.
Боғи ҳайвонот ё чӣ гуна як корманди боғи ҳайвонот - 8

ZNode Watcher

Мехостам дар бораи тамошобинон низ сухан ронам. Тафсилот дар бораи онҳо дар ҳуҷҷатҳои Zookeeper навишта шудааст: " Watches ZooKeeper ". Хулоса, нозир як триггери якдафъаинаест, ки тавассути ягон ҳодиса ба вуҷуд меояд. Бо дарёфти маълумот тавассути иҷрои амалҳои getData(), getChildren() ё exists() мо метавонем триггерро ҳамчун амали иловагӣ эҷод кунем. Zookeeper тартиби коркарди ҳодисаро таъмин мекунад. Илова бар ин, ҳуҷҷатҳо мегӯянд, ки пеш аз он ки мо арзиши нави ZNode-ро бубинем, мо воқеаеро дар бораи тағир додани арзиши кӯҳна ба арзиши нав мебинем. Шумо метавонед бештар дар бораи Watchers дар ин ҷо бихонед: " Watches ZooKeeper - Хусусиятҳо ва Кафолатҳо ". Барои санҷидани ин, биёед дубора CLI-ро истифода барем : Фарз мекунем, ки мо ягон ZNode дорем, ки дорои арзише ҳастем, ки дар он ҳолати баъзе хидматҳо нигоҳ дошта мешавад:
[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
Ҳоло, агар маълумот /services/service1/statusтағир ёбад, триггери якдафъаинаи мо оташ мегирад:
Боги хайвонот ё чй тавр зиндагонии коргари боги хайвонот — 9
Ҷолиб он аст, ки ҳангоми пайваст шудан ба Zookeeper, мо инчунин мебинем, ки нозир чӣ гуна кор мекунад:
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
SyncConnected яке аз рӯйдодҳои эҳтимолии Zookeper мебошад. Тафсилоти бештар дар бораи он метавонад дар тавсифи API пайдо шавад.
Боги хайвонот ё чй тавр зиндагонии коргари боги хайвонот — 10

Зоопарк ва Java

Ҳоло мо фаҳмиши асосӣ дорем, ки Zookeeper чӣ кор карда метавонад. Биёед ҳоло бо он тавассути Java кор кунем, на тавассути CLI. Ва барои ин ба мо як барномаи Java лозим аст, ки дар он мо мебинем, ки чӣ тавр бо Zookeeper кор кардан мумкин аст. Барои сохтани барнома, мо системаи сохтани лоиҳаи Gradle -ро истифода мебарем . Бо истифода аз плагини " Gradle Build Init " мо лоиҳаро эҷод мекунем. Барои ин, биёед фармонро иҷро кунем: gradle init --type java-application Агар Gradle аз мо саволҳои мушаххасро талаб кунад, мо арзишҳои пешфарзро тарк мекунем (танҳо Enter-ро пахш кунед). Акнун биёед скрипти сохтмонро кушоем, яъне. файли build.gradle. Он дорои тавсифи он аст, ки лоиҳаи мо аз чӣ сохта шудааст ва аз кадом артефактҳо (китобхонаҳо, чаҳорчӯбаҳо) вобаста аст. Зеро мо мехоҳем Zookeeper-ро истифода барем, пас мо бояд онро илова кунем. Аз ин рӯ, биёед ба блоки вобастагӣ вобастагии Zookeeper илова кунем:
dependencies {
    implementation 'org.apache.zookeeper:zookeeper:3.4.13'
Шумо метавонед бештар дар бораи Gradle дар барраси бихонед: " Муқаддимаи мухтасар ба Gradle ". Ҳамин тавр, мо як лоиҳаи Java дорем, мо китобхонаи Zookeeper-ро ба он пайваст кардем. Биёед ҳоло чизе нависем. Тавре ки мо дар хотир дорем, бо истифода аз CLI мо чизеро пайваст кардем: zkCli.cmd -server 127.0.0.1:2181 Биёед атрибути "server" -ро дар синфи App дар усули асосӣ эълон кунем:
String server = "127.0.0.1:2181";
Пайвастшавӣ амали фаврӣ нест. Мо бояд бо кадом роҳе дар риштаи асосии иҷрои барнома интизор шавем, то пайвастшавӣ ба амал ояд. Аз ин рӯ, ба мо қуфл лозим аст. Биёед онро дар зер эълон кунем:
Object lock = new Object();
Акнун ба мо лозим аст, ки касе бигӯяд, ки робита барқарор шудааст. Тавре ки мо дар хотир дорем, вақте ки мо ин корро тавассути CLI анҷом додем, нозир барои мо кор мекард. Ҳамин тавр, дар codeи Java ҳама чиз комилан якхела аст. Нозири мо дар бораи анҷоми бомуваффақият паём нишон медиҳад ва ба ҳама интизори он тавассути қулф хабар медиҳад. Биёед як тамошобин нависем:
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();
            }
		}
	}
};
Акнун биёед пайвастро ба serverи zooKeeper илова кунем:
int sessionTimeout = 2000;
ZooKeeper zooKeeper = null;
synchronized (lock) {
	zooKeeper = new ZooKeeper(server, sessionTimeout, connectionWatcher);
	lock.wait();
}
Дар ин ҷо ҳама чиз оддӣ аст. Ҳангоми иҷрои усули асосӣ дар риштаи асосии барнома, мо қулфро гирифта, пайвастшавӣ ба зоопаркро дархост мекунем. Дар айни замон, мо қулфро озод мекунем ва мунтазир мешавем, ки касе қулфро гирифта, моро огоҳ мекунад, ки мо метавонем идома диҳем. Вақте ки пайвастшавӣ муқаррар карда мешавад, нозир кор мекунад. Вай тафтиш мекунад, ки ҳодисаи SyncConnected фаро расидааст (чунон ки мо дар хотир дорем, ин чизест, ки нозир тавассути CLI гирифта буд) ва сипас паём нависед. Баъдан, мо қулфро мегирем (зеро риштаи асосӣ қаблан онро бароварда буд) ва ба ҳамаи риштаҳое, ки интизори қулф ҳастанд, хабар медиҳем, ки мо метавонем идома диҳем. Риштаи коркарди ҳодиса аз блоки ҳамоҳангшуда берун мешавад ва ба ин васила қулфро озод мекунад. Риштаи асосӣ огоҳинома гирифт ва пас аз интизории озод шудани қулф, иҷроишро идома медиҳад, зеро то он даме, ки қулфро қабул накунад, вай наметавонад аз блоки ҳамоҳангшуда баромада, корро идома диҳад. Ҳамин тариқ, бо истифода аз multithreading ва Zookeeper API, мо метавонем амалҳои гуногунро иҷро кунем. API Zookeeper назар ба он чизе ки CLI иҷозат медиҳад, хеле васеътар аст. Барои намуна:
// 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"));
Тавре ки шумо мебинед, ҳангоми сохтани гиреҳ мо метавонем ACL-ро танзим кунем. Ин боз як хусусияти муҳим аст. ACLҳо иҷозатҳое мебошанд, ки ба амалҳо бо ZNode дахл доранд. Танзимоти зиёде вуҷуд доранд, бинобар ин ман тавсия медиҳам, ки ба ҳуҷҷатҳои расмӣ барои тафсилот муроҷиат кунед: “ Иҷозатҳои Zookeeper ACL ”.
Боги хайвонот ё чй тавр зиндагонии коргари боги хайвонот — 11

Хулоса

Чаро мо инро хондаем? Зеро Zookeeper дар дигар технологияҳои маъмул истифода мешавад. Масалан, Apache Kafka Zookeeper-ро талаб мекунад, ки шумо метавонед дар бораи он дар " Дастури зуди оғози Кафка " хонед. Он инчунин дар пойгоҳи додаи NOSQL HBase истифода мешавад, ки шумо метавонед дар бораи он маълумоти бештарро дар " Дастури Quickstart HBase " хонед. Дар асл, бисёр лоиҳаҳои дигар Zookeeper-ро истифода мебаранд. Баъзе аз онҳо дар " Истифодаи Zookeeper дар ҷаҳони воқеӣ " номбар шудаанд . Ман умедворам, ки ман ба саволи "чаро" ҷавоб додам. Муҳимтарин савол ҳоло ин аст: "Оянда чӣ мешавад?" Аввалан, шумо метавонед китобҳои зеринро дар мавзӯи Zookeeper Apache хонед: Дуюм, гузоришҳои видеоии аъло дар бораи Zookeeper мавҷуданд. Тамошои тавсияшаванда: Сеюм, якчанд мақолаҳои муфид мавҷуданд, ки тасвири ҷаҳонро пурра мекунанд: Ин баррасии хеле кӯтоҳ аст, аммо ҳамчун калимаи муқаддимавӣ, ман умедворам, ки он муфид хоҳад буд. #Вячеслав
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION