JavaRush /جاوا بلاگ /Random-UR /چڑیا گھر یا چڑیا گھر کی زندگی کیسی ہے۔
Viacheslav
سطح

چڑیا گھر یا چڑیا گھر کی زندگی کیسی ہے۔

گروپ میں شائع ہوا۔
چڑیا گھر یا چڑیا گھر کا کارکن کیسے رہتا ہے - 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
اس نقطہ نظر کے ساتھ، ایک واحد نظام اجزاء میں تقسیم کیا جاتا ہے. کنفیگریشن ایک الگ مشترکہ جزو ہے۔ دوسرے اجزاء میں سے ہر ایک کنفیگریشن جزو کے کلائنٹ کے طور پر کام کرتا ہے۔ اس کیس کو " تقسیم کنفیگریشن " کہا جاتا ہے۔ تقسیم شدہ ترتیب کے بہت سے مختلف نفاذ ہیں۔ اور آج کے جائزے میں میں ان میں سے ایک سے واقف ہونے کی تجویز کرتا ہوں، جسے زوکیپر کہتے ہیں۔
چڑیا گھر یا چڑیا گھر کا کارکن کیسے رہتا ہے - 3

چڑیا گھر

زوکیپر کو جاننے کا راستہ ان کی آفیشل ویب سائٹ سے شروع ہوتا ہے: zookeeper.apache.org آفیشل ویب سائٹ پر آپ کو " ڈاؤن لوڈ " سیکشن میں جانے کی ضرورت ہے ۔ اس سیکشن میں، آرکائیو کو .tar.gz فارمیٹ میں ڈاؤن لوڈ کریں، مثال کے طور پر "zookeeper-3.4.13.tar.gz"۔ tar ایک آرکائیو فارمیٹ ہے جو یونٹ سسٹمز کے لیے روایتی ہے۔ gz - کا مطلب ہے کہ gzip آرکائیو کو کمپریس کرنے کے لیے استعمال کیا جاتا ہے۔ اگر ہم ونڈوز مشین پر کام کرتے ہیں، تو اس سے ہمیں پریشان نہیں ہونا چاہیے۔ زیادہ تر جدید آرکائیورز (مثال کے طور پر، 7-zip ) ان کے ساتھ ونڈوز پر بالکل کام کر سکتے ہیں۔ آئیے مواد کو کسی ڈائریکٹری میں نکالتے ہیں۔ ایک ہی وقت میں، ہم فرق دیکھیں گے - نکالی ہوئی حالت میں ڈسک پر یہ تقریباً 60 میگا بائٹس پر قابض ہو جائے گا، اور ہم نے تقریباً 35 میگا بائٹس کا ایک آرکائیو ڈاؤن لوڈ کیا ہے۔ جیسا کہ آپ دیکھ سکتے ہیں، کمپریشن واقعی کام کرتا ہے. اب آپ کو زوکیپر لانچ کرنے کی ضرورت ہے۔ عام طور پر زوکیپر ایک قسم کا سرور ہے۔ زوکیپر کو دو طریقوں میں سے ایک میں چلایا جا سکتا ہے: اسٹینڈ لون یا نقل شدہ ۔ آئیے سب سے آسان آپشن پر غور کریں، جسے پہلے آپشن کے نام سے بھی جانا جاتا ہے - اسٹینڈ لون موڈ۔ زوکیپر کو چلانے کے لیے، اسے کنفیگریشن فائل کی ضرورت ہے۔ لہذا، آئیے اسے یہاں بنائیں: [КаталогРаспаковкиZookeeper]/conf/zoo.cfg. ونڈوز کے لیے، ہم میڈیم سے تجویز استعمال کریں گے: " ونڈوز پر اپاچی زو کیپر انسٹال کرنا "۔ کنفیگریشن فائل کے مندرجات کچھ اس طرح ہوں گے:
tickTime=2000
dataDir=C:/zookeeper-3.4.13/data
clientPort=2181
آئیے ZOOKEEPER_HOME ماحولیاتی متغیر کو شامل کریں جس میں zookeper روٹ ڈائرکٹری کا راستہ ہے (جیسا کہ میڈیم پر دی گئی ہدایات میں ہے)، اور PATH ماحولیاتی متغیر میں درج ذیل ٹکڑا بھی شامل کریں: ;%ZOOKEEPER_HOME%\bin; اس کے علاوہ، dataDir میں بتائی گئی ڈائرکٹری موجود ہونی چاہیے، ورنہ Zookeeper نہیں رہے گا۔ سرور شروع کرنے کے قابل۔ اب ہم کمانڈ کا استعمال کرتے ہوئے سرور کو محفوظ طریقے سے شروع کر سکتے ہیں: zkServer۔ اس حقیقت کی بدولت کہ زوکیپر ڈائرکٹری کو پاتھ انوائرمنٹ ویری ایبل میں شامل کر دیا گیا ہے، ہم کہیں سے بھی زوکیپر کمانڈز کو کال کر سکتے ہیں، نہ کہ صرف بن ڈائرکٹری سے۔
چڑیا گھر یا چڑیا گھر کا کارکن کیسے رہتا ہے - 4

ZNode

جیسا کہ " Zookeeper Overview " میں بتایا گیا ہے، Zookeper میں ڈیٹا کو ZNodes (nodes) کے طور پر دکھایا جاتا ہے جو درخت کے ڈھانچے میں منظم ہوتے ہیں۔ یعنی، ہر ZNode ڈیٹا پر مشتمل ہو سکتا ہے اور اس میں چائلڈ ZNodes ہو سکتے ہیں۔ آپ زوکیپر دستاویزات میں ZNode تنظیم کے بارے میں مزید پڑھ سکتے ہیں: " ڈیٹا ماڈل اور درجہ بندی کے نام کی جگہ "۔ Zookeeper اور ZNode کے ساتھ کام کرنے کے لیے، ہم Zookeeper CLI (کمانڈ لائن انٹرفیس) استعمال کریں گے۔ پہلے، ہم نے zkServer کمانڈ کا استعمال کرتے ہوئے سرور شروع کیا تھا۔ اب، جڑنے کے لیے، چلو عمل کرتے ہیں۔ zkCli.cmd -server 127.0.0.1:2181 اگر کامیاب ہو جاتا ہے، تو Zookeeper سے ایک کنکشن سیشن بنایا جائے گا اور ہم تقریباً درج ذیل آؤٹ پٹ دیکھیں گے۔
چڑیا گھر یا چڑیا گھر کا کارکن کیسے رہتا ہے - 5
دلچسپ بات یہ ہے کہ انسٹالیشن کے فوراً بعد بھی زوکیپر کے پاس 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() آپریشنز انجام دے کر ڈیٹا بازیافت کرکے، ہم ایک اضافی کارروائی کے طور پر ایک ٹرگر بنا سکتے ہیں۔ زوکیپر اس ترتیب کو یقینی بناتا ہے جس میں ایونٹ پر کارروائی ہوتی ہے۔ اس کے علاوہ، دستاویزات میں کہا گیا ہے کہ اس سے پہلے کہ ہم نئی 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
یہ دلچسپ بات ہے کہ زوکیپر سے جڑتے وقت، ہم یہ بھی دیکھتے ہیں کہ واچر کیسے کام کرتا ہے:
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
SyncConnected Zookeper کے ممکنہ واقعات میں سے ایک ہے۔ اس کے بارے میں مزید تفصیلات API کی تفصیل میں مل سکتی ہیں۔
چڑیا گھر یا چڑیا گھر کا کارکن کیسے رہتا ہے - 10

زوکیپر اور جاوا

اب ہمیں کچھ بنیادی سمجھ ہے کہ Zookeeper کیا کر سکتا ہے۔ آئیے اب اس کے ساتھ جاوا کے ذریعے کام کریں، نہ کہ CLI کے ذریعے۔ اور اس کے لیے ہمیں جاوا ایپلی کیشن کی ضرورت ہوگی، جس میں ہم دیکھیں گے کہ Zookeeper کے ساتھ کیسے کام کرنا ہے۔ ایپلیکیشن بنانے کے لیے، ہم گریڈل پروجیکٹ بلڈ سسٹم استعمال کریں گے ۔ " Gradle Build Init پلگ ان " کا استعمال کرتے ہوئے ہم پروجیکٹ بنائیں گے۔ ایسا کرنے کے لیے، آئیے کمانڈ چلائیں: gradle init --type java-application اگر گریڈل ہم سے سوالات کی وضاحت کے لیے پوچھتا ہے، تو ہم پہلے سے طے شدہ اقدار کو چھوڑ دیں گے (صرف Enter دبائیں)۔ اب آئیے بلڈ اسکرپٹ کھولتے ہیں، یعنی build.gradle فائل۔ اس میں اس بات کی تفصیل ہے کہ ہمارا پروجیکٹ کس چیز سے بنا ہے اور اس کا انحصار کن نمونوں (لائبریریز، فریم ورک) پر ہے۔ کیونکہ ہم زوکیپر استعمال کرنا چاہتے ہیں، پھر ہمیں اسے شامل کرنے کی ضرورت ہے۔ لہذا، آئیے انحصار بلاک میں زوکیپر پر انحصار شامل کریں:
dependencies {
    implementation 'org.apache.zookeeper:zookeeper:3.4.13'
آپ جائزہ میں گریڈل کے بارے میں مزید پڑھ سکتے ہیں: " گریڈل کا مختصر تعارف "۔ لہذا، ہمارے پاس جاوا پروجیکٹ ہے، ہم نے زوکیپر لائبریری کو اس سے منسلک کیا۔ چلو اب کچھ لکھتے ہیں۔ جیسا کہ ہمیں یاد ہے، 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();
            }
		}
	}
};
اب zooKeeper سرور سے کنکشن جوڑتے ہیں:
int sessionTimeout = 2000;
ZooKeeper zooKeeper = null;
synchronized (lock) {
	zooKeeper = new ZooKeeper(server, sessionTimeout, connectionWatcher);
	lock.wait();
}
یہاں سب کچھ آسان ہے۔ پروگرام کے مرکزی دھاگے میں مرکزی طریقہ پر عمل کرتے وقت، ہم تالے کو پکڑتے ہیں اور چڑیا گھر سے کنکشن کی درخواست کرتے ہیں۔ ایک ہی وقت میں، ہم تالے کو جاری کرتے ہیں اور انتظار کرتے ہیں جب تک کہ کوئی دوسرا تالا پکڑ کر ہمیں مطلع نہ کر دے کہ ہم جاری رکھ سکتے ہیں۔ جب کنکشن قائم ہو جائے گا، دیکھنے والا کام کرے گا۔ وہ چیک کرے گا کہ SyncConnected ایونٹ آ گیا ہے (جیسا کہ ہمیں یاد ہے، یہ وہی ہے جو دیکھنے والے نے CLI کے ذریعے پکڑا تھا)، اور پھر ایک پیغام لکھیں۔ اگلا، ہم تالے کو پکڑتے ہیں (چونکہ مرکزی دھاگے نے اسے پہلے جاری کیا تھا) اور تالے کے انتظار میں تمام تھریڈز کو مطلع کرتے ہیں کہ ہم جاری رکھ سکتے ہیں۔ ایونٹ پروسیسنگ تھریڈ مطابقت پذیر بلاک سے باہر نکلتا ہے، اس طرح تالا جاری ہوتا ہے۔ مرکزی دھاگے کو ایک اطلاع موصول ہوئی ہے اور تالے کے جاری ہونے کا انتظار کرنے کے بعد، عملدرآمد جاری ہے، کیونکہ جب تک اسے تالا نہیں مل جاتا، یہ مطابقت پذیر بلاک سے باہر نکلنے اور کام جاری رکھنے کے قابل نہیں ہوگا۔ اس طرح، ملٹی تھریڈنگ اور زوکیپر API کا استعمال کرتے ہوئے، ہم مختلف اعمال انجام دے سکتے ہیں۔ زوکیپر 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

نتیجہ

ہم نے یہ کیوں پڑھا؟ کیونکہ زوکیپر دیگر مشہور ٹیکنالوجیز میں استعمال ہوتا ہے۔ مثال کے طور پر، اپاچی کافکا کو زوکیپر کی ضرورت ہوتی ہے، جس کے بارے میں آپ " کافکا کوئیک اسٹارٹ گائیڈ " میں پڑھ سکتے ہیں ۔ یہ NOSQL ڈیٹا بیس HBase میں بھی استعمال ہوتا ہے، جس کے بارے میں آپ ان کی " HBase Quickstart Guide " میں مزید پڑھ سکتے ہیں۔ درحقیقت، بہت سے دوسرے پروجیکٹ زوکیپر استعمال کرتے ہیں۔ ان میں سے کچھ " حقیقی دنیا میں زوکیپر کا استعمال " میں درج ہیں۔ مجھے امید ہے کہ میں نے "کیوں" کے سوال کا جواب دیا ہے۔ اب سب سے اہم سوال یہ ہے: "آگے کیا ہے؟" سب سے پہلے، آپ Apache Zookeeper کے موضوع پر درج ذیل کتابیں پڑھ سکتے ہیں: دوم، زوکیپر کے بارے میں بہترین ویڈیو رپورٹس موجود ہیں۔ تجویز کردہ دیکھنے: سوم، بہت سے مفید مضامین ہیں جو دنیا کی تصویر کو مکمل کریں گے: یہ ایک بہت مختصر جائزہ ہے، لیکن ایک تعارفی لفظ کے طور پر، مجھے امید ہے کہ یہ مفید ثابت ہوگا۔ #ویاچسلاو
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION