JavaRush /جاوا بلاگ /Random-SD /zookeeper يا هڪ zookeeper لاء زندگي ڪهڙي طرح آهي
Viacheslav
سطح

zookeeper يا هڪ zookeeper لاء زندگي ڪهڙي طرح آهي

گروپ ۾ شايع ٿيل
زوڪيپر يا چڑیا گھر جو ڪم ڪندڙ ڪيئن رهي ٿو - 1

تعارف

جاوا ايپليڪيشنون اڪثر ڪري مختلف ترتيبون هونديون آهن. مثال طور، پتو ۽ ڪنيڪشن پورٽ. مثال طور، اهو هن طرح نظر اچي سگهي ٿو جيڪڏهن اسان استعمال ڪيو پراپرٽيز ڪلاس :
public static void main(String []args) {
	Properties props = new Properties();
	props.setProperty("host", "www.tutorialspoint.com");
	System.out.println("Hello, " + props.getProperty("host"));
}
۽ اهو ڪافي لڳي ٿو، ڇاڪاڻ ته ... اسان فائل مان پراپرٽيز حاصل ڪري سگھون ٿا. ۽ هر شي اسان سان گڏ هڪ مشين تي گڏ ٿيڻ لڳي. پر تصور ڪريو ته اسان جو نظام مختلف نظامن تي مشتمل ٿيڻ شروع ٿئي ٿو جيڪي هڪ ٻئي کان الڳ آهن؟ اهڙي نظام کي ورهايل نظام پڻ سڏيو ويندو آهي. وڪيپيڊيا تي توھان ھيٺ ڏنل تعريف ڳولي سگھو ٿا: ورهايل سسٽم اھي سسٽم آھن جن جا حصا مختلف نيٽ ورڪ ڪمپيوٽرن تي واقع آھن جيڪي ھڪ ٻئي سان ڳالھائيندا آھن ۽ ھڪ ٻئي سان پيغامن جي مٽا سٽا ڪندي پنھنجي عمل کي همٿائيندا آھن. توھان ھيٺ ڏنل تصوير ڏسي سگھو ٿا:
زوڪيپر يا چڑیا گھر جو ڪم ڪندڙ ڪيئن رهي ٿو - 2
هن طريقي سان، هڪ واحد سسٽم حصن ۾ ورهايل آهي. ٺاھ جوڙ ھڪڙو الڳ عام جزو آھي. ٻئي اجزاء مان هر هڪ ڪلائنٽ طور ڪم ڪري ٿو ترتيب واري جزو لاءِ. هن صورت کي سڏيو ويندو آهي " تقسيم ترتيب ". ورهايل ٺاھ جوڙ جا ڪيترائي مختلف عمل آھن. ۽ اڄ جي نظرثاني ۾ آئون انهن مان هڪ سان واقف ٿيڻ جي تجويز پيش ڪريان ٿو، جنهن کي سڏيو ويندو آهي Zookeeper.
زوڪيپر يا چڑیا گھر جو ڪم ڪندڙ ڪيئن رهي ٿو - 3

زوڪير

Zookeeper کي ڄاڻڻ جو رستو انهن جي سرڪاري ويب سائيٽ سان شروع ٿئي ٿو: zookeeper.apache.org سرڪاري ويب سائيٽ تي توهان کي " ڊائون لوڊ " سيڪشن ڏانهن وڃڻ جي ضرورت آهي . هن حصي ۾، آرڪائيو کي .tar.gz فارميٽ ۾ ڊائون لوڊ ڪريو، مثال طور "zookeeper-3.4.13.tar.gz". tar هڪ آرڪائيو فارميٽ آهي روايتي يونٽ سسٽم لاءِ. gz - مطلب ته gzip آرڪائيو کي دٻائڻ لاءِ استعمال ڪيو ويندو آهي. جيڪڏهن اسان ونڊوز مشين تي ڪم ڪريون ٿا، ته اهو اسان کي پريشان نه ڪرڻ گهرجي. اڪثر جديد آرڪائيورز (مثال طور، 7-zip ) انهن سان مڪمل طور تي ونڊوز تي ڪم ڪري سگهن ٿا. اچو ته مواد کي ڪجهه ڊاريڪٽري ۾ ڪڍيون. ساڳئي وقت، اسان فرق ڏسندا سين - ڪڍيل رياست ۾ ڊسڪ تي اهو لڳ ڀڳ 60 ميگا بائيٽ تي قبضو ڪندو، ۽ اسان اٽڪل 35 ميگا بائيٽ سائيز جي آرڪائيو ڊائون لوڊ ڪيو. جئين توهان ڏسي سگهو ٿا، کمپريشن واقعي ڪم ڪري ٿو. ھاڻي توھان کي لانچ ڪرڻ جي ضرورت آھي Zookeeper. عام طور تي، Zookeeper هڪ قسم جو سرور آهي. Zookeeper ٻن طريقن مان ھڪڙي ۾ هلائي سگھجي ٿو: اسٽينڊل يا نقل ٿيل . اچو ته آسان ترين اختيار تي غور ڪريو، جيڪو پڻ پهريون اختيار طور سڃاتو وڃي ٿو - اسٽينڊل موڊ. Zookeper هلائڻ لاءِ، ان کي ضرورت آھي ھڪڙي ٺاھ جوڙ واري فائيل. تنهن ڪري، اچو ته ان کي هتي ٺاهيون: [КаталогРаспаковкиZookeeper]/conf/zoo.cfg. ونڊوز لاءِ، اسان ميڊيم مان سفارش استعمال ڪنداسين: “ ونڊوز تي اپاچي زو ڪيپر انسٽال ڪرڻ ”. ڪنفيگريشن فائل جو مواد ڪجھ ھن طرح ھوندو:
tickTime=2000
dataDir=C:/zookeeper-3.4.13/data
clientPort=2181
اچو ته شامل ڪريون ZOOKEEPER_HOME ماحوليات وارو متغير جنهن ۾ zookeeper روٽ ڊاريڪٽري جو رستو شامل ڪيو وڃي (جيئن ته وچولي تي ڏنل هدايتن ۾)، ۽ هيٺيون ٽڪرا پڻ شامل ڪريو PATH ماحوليات جي متغير ۾: ;%ZOOKEEPER_HOME%\bin; گڏوگڏ، dataDir ۾ بيان ڪيل ڊاريڪٽري موجود هجڻ گهرجي، ٻي صورت ۾ Zookeeper نه هوندو. سرور شروع ڪرڻ جي قابل. ھاڻي اسان محفوظ طور تي ڪمانڊ استعمال ڪندي سرور کي شروع ڪري سگھون ٿا: zkServer. انهي حقيقت جي مهرباني ته Zookeeper ڊاريڪٽري کي path Environment variable ۾ شامل ڪيو ويو آهي، اسان ڪنهن به هنڌ کان زوڪيپر ڪمانڊ ڪال ڪري سگهون ٿا، نه صرف بن ڊاريڪٽري مان.
زوڪيپر يا چڑیا گھر جو ڪم ڪندڙ ڪيئن رهي ٿو - 4

ZNode

جيئن بيان ڪيو ويو آهي " Zookeper Overview "، Zookeper ۾ ڊيٽا ZNodes (نوڊس) جي طور تي نمائندگي ڪئي وئي آهي جيڪي هڪ وڻ جي جوڙجڪ ۾ منظم ڪيا ويا آهن. اهو آهي، هر ZNode ڊيٽا تي مشتمل ٿي سگهي ٿو ۽ ٻار ZNodes آهن. توهان زوڪيپر دستاويزن ۾ ZNode تنظيم جي باري ۾ وڌيڪ پڙهي سگهو ٿا: “ ڊيٽا ماڊل ۽ درجه بندي جي نالي جي جاءِ ”. Zookeeper ۽ ZNode سان ڪم ڪرڻ لاءِ، اسان استعمال ڪنداسين Zookeeper CLI (ڪمانڊ لائن انٽرفيس). اڳي، اسان zkServer ڪمانڊ استعمال ڪندي سرور شروع ڪيو. ھاڻي، ڳنڍڻ لاءِ، اچو ته عمل ڪريون. zkCli.cmd -server 127.0.0.1:2181 جيڪڏھن ڪامياب ٿيو، ته زوڪيپر سان ڪنيڪشن سيشن ٺاھيو ويندو ۽ اسان تقريبن ھيٺيون ٻاھرون ڏسنداسين:
زوڪيپر يا چڑیا گھر جو ڪم ڪندڙ ڪيئن رهي ٿو - 5
دلچسپ ڳالهه اها آهي ته، انسٽاليشن کان پوء فوري طور تي، Zookeeper اڳ ۾ ئي ZNode آهي. اھو ھيٺ ڏنل رستو آھي:/zookeeper/quota
زوڪيپر يا چڑیا گھر جو ڪم ڪندڙ ڪيئن رهي ٿو - 6
اهي نام نهاد " ڪوٽا " آهن. جيئن بيان ڪيو ويو آهي " Apache ZooKeeper Essentials "، هر ZNode ان سان لاڳاپيل ڪوٽا رکي سگهي ٿو، ڊيٽا کي محدود ڪري ٿو جيڪو اهو ذخيرو ڪري سگهي ٿو. Znodes جي تعداد تي هڪ حد ۽ ذخيرو ٿيل ڊيٽا جي مقدار کي بيان ڪري سگهجي ٿو. ان کان علاوه، جيڪڏهن هن حد کان وڌي وئي آهي، پوء ZNode سان آپريشن منسوخ نه ڪيو ويو آهي، پر حد کان وڌڻ بابت هڪ ڊيڄاريندڙ ملي ويندي. ZNode بابت پڙهڻ جي صلاح ڏني وئي آهي " ZooKeeper Programmer's Guide: ZNodes " ۾. ڪجھ مثالن مان توھان ڪئين ڪم ڪري سگھوٿا ZNode سان:
زوڪيپر يا چڑیا گھر جو ڪم ڪندڙ ڪيئن رهي ٿو - 7
مان پڻ نوٽ ڪرڻ چاهيان ٿو ته ZNodes مختلف آهن. باقاعده ZNodes (جيستائين توهان اضافي جھنڊو نه ڏيو) قسم جا آهن " مسلسل ". اتي " Ephemeral Node " قسم جو ZNode آھي . اهڙا ZNodes صرف Zookeeper ڪنيڪشن سيشن جي مدت لاءِ موجود آهن جن ۾ اهي ٺاهيا ويا آهن. اتي " Sequence Node " قسم جو ZNode آھي . اهي ZNodes انفراديت کي يقيني بڻائڻ لاءِ ترتيب مان هڪ نمبر سان شامل ڪيا ويا آهن. تسلسل نوڊ يا ته مستقل يا عارضي ٿي سگهي ٿو. ZNode بابت ٿوري پس منظر جي معلومات پڻ هتي سفارش ڪئي وئي آهي: " Zookeeper ZNodes - خاصيتون ۽ مثال ".
زوڪيپر يا چڑیا گھر جو ڪم ڪندڙ ڪيئن رهي ٿو - 8

ZNode ڏسندڙ

مان به ڏسندڙن بابت ڳالهائڻ چاهيندس. انهن بابت تفصيل Zookeeper جي دستاويزن ۾ لکيل آهن: " ZooKeeper Watches ". مختصر ۾، هڪ ڏسندڙ هڪ وقت جو محرڪ آهي جيڪو ڪنهن واقعي جي ذريعي شروع ٿئي ٿو. getData(), getChildren() يا exists() عملن کي انجام ڏيڻ سان ڊيٽا حاصل ڪرڻ سان، اسان اضافي عمل جي طور تي هڪ ٽريگر ٺاهي سگهون ٿا. Zookeeper انهي ترتيب کي يقيني بڻائي ٿو جنهن ۾ واقعي تي عمل ڪيو ويندو آهي. ان کان علاوه، دستاويزن ۾ چيو ويو آهي ته ان کان اڳ اسان کي نئين ZNode قدر ڏسي سگهون ٿا، اسان هڪ واقعو ڏسنداسين ته پراڻي قدر کي نئين ۾ تبديل ڪرڻ بابت. توهان هتي ڏسندڙن بابت وڌيڪ پڙهي سگهو ٿا: “ ZooKeeper Watches – خاصيتون ۽ ضمانتون ”. هن کي ڪوشش ڪرڻ لاء، اچو ته 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

زوڪيپر ۽ جاوا

اسان کي ھاڻي ڪجھ بنيادي سمجھ آھي ته Zookeeper ڇا ڪري سگھي ٿو. اچو ته ھاڻي ان سان گڏ جاوا ذريعي ڪم ڪريون، ۽ CLI ذريعي نه. ۽ ان لاءِ اسان کي جاوا ايپليڪيشن جي ضرورت پوندي، جنهن ۾ اسين ڏسنداسين ته زوڪيپر سان ڪيئن ڪم ڪجي. ايپليڪيشن ٺاهڻ لاءِ، اسان استعمال ڪنداسين Gradle پروجيڪٽ بلڊ سسٽم . " Gradle Build Init پلگ ان " استعمال ڪندي اسان پروجيڪٽ ٺاهينداسين. هن کي ڪرڻ لاء، اچو ته حڪم هلون: gradle init --type java-application جيڪڏهن Gradle اسان کان سوالن کي واضح ڪرڻ لاء پڇي، پوء اسين ڊفالٽ قدر ڇڏي ڏينداسين (صرف Enter کي دٻايو). ھاڻي اچو ته بلڊ اسڪرپٽ کوليون، يعني. build.gradle فائل. ان ۾ وضاحت آهي ته اسان جو پروجيڪٽ ڪهڙي شيءِ مان ٺهيل آهي ۽ ڪهڙي نموني (لائبريري، فريم ورڪ) ان تي منحصر آهي. ڇاڪاڻ ته اسان Zookeeper استعمال ڪرڻ چاهيون ٿا، پوء اسان کي ان کي شامل ڪرڻ جي ضرورت آهي. تنهن ڪري، اچو ته زوڪيپر تي انحصار شامل ڪريون انحصار بلاڪ تي:
dependencies {
    implementation 'org.apache.zookeeper:zookeeper:3.4.13'
توهان جائزو ۾ Gradle بابت وڌيڪ پڙهي سگهو ٿا: " گريڊل جو مختصر تعارف ". تنهن ڪري، اسان وٽ جاوا پروجيڪٽ آهي، اسان ان سان Zookeeper لائبريري کي ڳنڍيو آهي. اچو ته هاڻي ڪجهه لکون. جيئن اسان کي ياد آهي، CLI استعمال ڪندي اسان ڪجهه هن طرح ڳنڍيو آهي: zkCli.cmd -server 127.0.0.1:2181 اچو ته "سرور" خاصيت کي ايپ ڪلاس ۾ مکيه طريقي سان بيان ڪريون:
String server = "127.0.0.1:2181";
ڪنيڪشن هڪ فوري عمل ناهي. اسان کي ڪنيڪشن ٿيڻ لاءِ پروگرام جي عمل جي مکيه سلسلي ۾ ڪنهن به طرح انتظار ڪرڻو پوندو. تنهن ڪري، اسان کي هڪ تالا جي ضرورت آهي. اچو ته ان کي هيٺ بيان ڪريون:
Object lock = new Object();
هاڻي اسان کي ڪنهن جي ضرورت آهي ته اهو ٻڌائي ته ڪنيڪشن قائم ٿي ويو آهي. جيئن اسان کي ياد آهي، جڏهن اسان اهو ڪيو CLI ذريعي، ڏسندڙ اسان لاء ڪم ڪيو. تنهن ڪري جاوا ڪوڊ ۾ سڀ ڪجهه بلڪل ساڳيو آهي. اسان جو ڏسندڙ ڪامياب مڪمل ٿيڻ بابت هڪ پيغام ڏيکاريندو ۽ هر ڪنهن کي اطلاع ڏيندو جيڪو ان جي انتظار ۾ هڪ تالا ذريعي. اچو ته هڪ نگران لکون:
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();
            }
		}
	}
};
هاڻي اچو ته ڪنيڪشن کي زو ڪيپر سرور سان شامل ڪريون:
int sessionTimeout = 2000;
ZooKeeper zooKeeper = null;
synchronized (lock) {
	zooKeeper = new ZooKeeper(server, sessionTimeout, connectionWatcher);
	lock.wait();
}
هتي سڀ ڪجھ سادو آهي. جڏهن پروگرام جي مکيه سلسلي ۾ مکيه طريقي تي عمل ڪندي، اسان تالا کي پڪڙيو ۽ زوڪيپر سان ڪنيڪشن جي درخواست ڪريون. ساڳئي وقت، اسان تالا کي ڇڏي ڏيو ۽ انتظار ڪريو جيستائين ڪو ٻيو تالا پڪڙي ۽ اسان کي اطلاع ڏئي ته اسان جاري رکون ٿا. جڏهن ڪنيڪشن قائم ٿيو، ڏسندڙ ڪم ڪندو. هو چيڪ ڪندو ته SyncConnected واقعو اچي ويو آهي (جيئن اسان کي ياد آهي، اهو ئي آهي جيڪو ڏسندڙ CLI ذريعي پڪڙيو)، ۽ پوءِ هڪ پيغام لکو. اڳيون، اسان تالا کي پڪڙيو (جيئن ته مکيه ٿريڊ اڳ ۾ جاري ڪيو ويو آهي) ۽ سڀني موضوعن کي اطلاع ڏيون ٿا جيڪي تالا جي انتظار ۾ آهن جيڪي اسان جاري ڪري سگهون ٿا. ايونٽ پروسيسنگ ٿريڊ هم وقت سازي واري بلاڪ مان نڪرندي آهي، ان ڪري تالا جاري ڪري ڇڏيندو آهي. مين ٿريڊ کي نوٽيفڪيشن ملي ويو ۽، لاڪ ٿيڻ جي انتظار کان پوءِ، عمل جاري آهي، ڇاڪاڻ ته جيستائين اهو تالا حاصل نه ڪندو، اهو هم وقت سازي واري بلاڪ مان نڪرڻ ۽ ڪم جاري رکڻ جي قابل نه هوندو. اهڙيء طرح، multithreading ۽ Zookeeper API استعمال ڪندي، اسان مختلف عملن کي انجام ڏئي سگھون ٿا. Zookeeper API ان کان وڌيڪ وسيع آهي جيڪا 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 ترتيب ڏئي سگهون ٿا. هي هڪ ٻيو اهم خصوصيت آهي. ACLs اجازتون آھن جيڪي ZNode سان عملن تي لاڳو ٿين ٿيون. اتي ڪيتريون ئي سيٽنگون آھن، تنھنڪري مان سفارش ڪريان ٿو ته توھان حوالو ڏيو سرڪاري دستاويز تفصيلن لاءِ: “ Zookeeper ACL Permissions ”.
زوڪيپر يا چڑیا گھر جو ڪم ڪندڙ ڪيئن رهي ٿو - 11

نتيجو

اسان اهو ڇو پڙهيو؟ ڇو ته Zookeeper ٻين مشهور ٽيڪنالاجي ۾ استعمال ڪيو ويندو آهي. مثال طور، Apache Kafka کي Zookeeper جي ضرورت آهي، جنهن جي باري ۾ توهان پڙهي سگهو ٿا ” ڪافڪا ڪوئڪ اسٽارٽ گائيڊ “. اهو پڻ استعمال ڪيو ويو آهي NOSQL ڊيٽابيس HBase، جنهن بابت توهان وڌيڪ پڙهي سگهو ٿا انهن جي " HBase Quickstart Guide " ۾. حقيقت ۾، ٻيا ڪيترائي منصوبا استعمال ڪن ٿا Zookeeper. انهن مان ڪجهه درج ٿيل آهن " حقيقي دنيا ۾ زوڪپر استعمال ڪندي " ۾. مون کي اميد آهي ته مون سوال جو جواب ڏنو "ڇو". هاڻي سڀ کان اهم سوال آهي: "اڳتي ڇا آهي؟" پهرين، توهان Apache Zookeeper جي موضوع تي هيٺيان ڪتاب پڙهي سگهو ٿا: ٻيو، زوڪيپر بابت بهترين وڊيو رپورٽون آهن. سفارش ٿيل ڏسڻ: ٽيون، اهڙا ڪيترائي مفيد مضمون آهن جيڪي دنيا جي تصوير کي پورو ڪن ٿا: هي هڪ تمام مختصر جائزو آهي، پر هڪ تعارفي لفظ جي طور تي، مون کي اميد آهي ته اهو مفيد ثابت ٿيندو. #وياچسلاو
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION