Zookeeper-এ Watchers একটি অত্যন্ত গুরুত্বপূর্ণ ফিচার, যা ক্লায়েন্টদের ZNode এর পরিবর্তন বা অবস্থার প্রতি নজর রাখতে সক্ষম করে। Watchers ক্লায়েন্টকে জানিয়ে দেয় যখন কোনো ZNode-এর ডেটা বা তার অবস্থা পরিবর্তিত হয়। এটি ডিস্ট্রিবিউটেড সিস্টেমে সিঙ্ক্রোনাইজেশন এবং অবস্থা ট্র্যাকিংয়ের জন্য একটি শক্তিশালী মেকানিজম সরবরাহ করে।
Watcher কি?
Watcher হলো একটি মেকানিজম যা Zookeeper সার্ভারে নিবন্ধিত হয়, এবং যখন একটি নির্দিষ্ট ZNode এর ডেটা বা অবস্থা পরিবর্তিত হয়, তখন সেই ক্লায়েন্টকে নোটিফাই করে। এটি মূলত একটি ইভেন্ট লিসেনার হিসেবে কাজ করে যা নির্দিষ্ট ZNode-এ পরিবর্তন ঘটলে ক্লায়েন্টকে অবহিত করে।
Zookeeper-এ Watchers মূলত ৩ ধরনের ইভেন্টের জন্য ট্রিগার করা যায়:
- NodeCreated: যখন একটি নতুন ZNode তৈরি হয়।
- NodeDeleted: যখন একটি ZNode মুছে ফেলা হয়।
- NodeDataChanged: যখন একটি ZNode এর ডেটা পরিবর্তিত হয়।
- NodeChildrenChanged: যখন একটি ZNode-এর শিশু ZNode গুলির মধ্যে পরিবর্তন হয়।
Watcher তৈরি (Creating a Watcher)
Zookeeper-এ Watcher তৈরি করতে, প্রথমে একটি ক্লায়েন্ট শেলের মাধ্যমে অথবা প্রোগ্রাম্যাটিক্যালি ZNode এর জন্য একটি Watcher নিবন্ধিত করতে হয়। এই Watcher সেট করা হলে, ZNode-এর কোনো পরিবর্তন হলে তা ট্রিগার হবে এবং ক্লায়েন্টকে অবহিত করা হবে।
1. Watcher নিবন্ধিত করা:
Watcher সেট করার জন্য getData(), exists(), getChildren() ইত্যাদি কমান্ড ব্যবহার করা হয়। যখন এই কমান্ডগুলির মাধ্যমে কোনো ZNode পড়া হয়, তখন Watcher সেট করা হয়। উদাহরণস্বরূপ:
getData(): ZNode এর ডেটা পড়া এবং Watcher সেট করা।
getData /myZNode trueএই কমান্ডটি
/myZNodeএর ডেটা পড়ে এবং Watcher সেট করে, যাতে যদি ZNode-এর ডেটা পরিবর্তিত হয়, তাহলে তা ক্লায়েন্টকে জানানো হবে।exists(): ZNode অস্তিত্ব পরীক্ষা করা এবং Watcher সেট করা।
exists /myZNode trueএখানে যদি
/myZNodeউপস্থিত থাকে এবং কোনো পরিবর্তন ঘটে, তাহলে Watcher ট্রিগার হবে।
2. Watcher Trigger করা:
Watcher তখন ট্রিগার হয় যখন নির্দিষ্ট ZNode এর অবস্থা পরিবর্তিত হয়। উদাহরণস্বরূপ, যদি আপনি একটি Watcher সেট করেন এবং ZNode এর ডেটা পরিবর্তন হয়, তাহলে Zookeeper সার্ভার সেই ক্লায়েন্টকে জানিয়ে দিবে যে ZNode-এ পরিবর্তন হয়েছে।
Zookeeper-এ Watcher শুধুমাত্র একবারই ট্রিগার করা যায়। যদি আপনি পুনরায় ZNode-এ কোনো পরিবর্তন দেখতে চান, তাহলে আপনাকে আবার নতুন Watcher নিবন্ধিত করতে হবে।
Watcher-এর ইভেন্ট ট্রিগার (Triggering Watcher Events)
Zookeeper-এ Watcher ইভেন্ট ট্রিগার করার জন্য, সাধারণত ৪টি প্রাথমিক ইভেন্ট থাকে:
NodeCreated:
- যখন একটি নতুন ZNode তৈরি হয়, তখন এটি একটি
NodeCreatedইভেন্ট ট্রিগার করবে।
উদাহরণ:
create /myZNode "New Data"যখন
/myZNodeতৈরি হবে, Watcher ট্রিগার হবে এবং ক্লায়েন্টকে জানানো হবে।- যখন একটি নতুন ZNode তৈরি হয়, তখন এটি একটি
NodeDeleted:
- যখন একটি ZNode মুছে ফেলা হয়, তখন এটি একটি
NodeDeletedইভেন্ট ট্রিগার করবে।
উদাহরণ:
delete /myZNode/myZNodeমুছে যাওয়ার পর, যদি ZNode এর জন্য Watcher সেট করা থাকে, তবে এটি ট্রিগার হবে এবং ক্লায়েন্টকে অবহিত করবে।- যখন একটি ZNode মুছে ফেলা হয়, তখন এটি একটি
NodeDataChanged:
- যখন একটি ZNode-এর ডেটা পরিবর্তিত হয়, তখন এটি
NodeDataChangedইভেন্ট ট্রিগার করবে।
উদাহরণ:
set /myZNode "Updated Data"/myZNodeএর ডেটা পরিবর্তিত হলে, সেট করা Watcher ট্রিগার হবে।- যখন একটি ZNode-এর ডেটা পরিবর্তিত হয়, তখন এটি
NodeChildrenChanged:
- যখন একটি ZNode-এর শিশু ZNode গুলি পরিবর্তিত হয় (যেমন একটি শিশু ZNode যোগ করা বা মুছে ফেলা), তখন এটি
NodeChildrenChangedইভেন্ট ট্রিগার করবে।
উদাহরণ:
create /myZNode/child1 "Child Node"/myZNodeএর শিশু পরিবর্তন হলে, Watcher ট্রিগার হবে।- যখন একটি ZNode-এর শিশু ZNode গুলি পরিবর্তিত হয় (যেমন একটি শিশু ZNode যোগ করা বা মুছে ফেলা), তখন এটি
Watcher ইভেন্ট হ্যান্ডলিং (Handling Watcher Events)
Watcher ট্রিগার হওয়ার পর, আপনি ক্লায়েন্ট অ্যাপ্লিকেশনে ইভেন্ট হ্যান্ডলিং করার জন্য একটি callback ফাংশন বা মেথড ব্যবহার করতে পারেন। Java API এর মধ্যে, WatchEvent এবং Watcher ইন্টারফেসের মাধ্যমে আপনি Watcher এর ইভেন্টগুলি ট্র্যাক করতে পারেন।
উদাহরণ (Java):
import org.apache.zookeeper.*;
public class ZookeeperWatcher implements Watcher {
public void process(WatchedEvent event) {
System.out.println("Watcher triggered: " + event.getType());
}
public static void main(String[] args) throws Exception {
ZooKeeper zk = new ZooKeeper("localhost:2181", 2000, new ZookeeperWatcher());
zk.exists("/myZNode", true); // Set watcher on /myZNode
}
}
এখানে, যখন /myZNode তে কোনো পরিবর্তন ঘটবে, তখন process() মেথড ট্রিগার হবে এবং ইভেন্টের টাইপ (যেমন NodeCreated, NodeDeleted, ইত্যাদি) প্রিন্ট হবে।
সারাংশ
Zookeeper-এ Watcher তৈরি করা এবং ট্রিগার করা একটি গুরুত্বপূর্ণ ফিচার যা ডিস্ট্রিবিউটেড সিস্টেমের মধ্যে সিঙ্ক্রোনাইজেশন এবং অবস্থা ট্র্যাকিং সহজ করে তোলে। আপনি getData(), exists(), getChildren() ইত্যাদি কমান্ডের মাধ্যমে Watcher নিবন্ধিত করতে পারেন এবং ZNode এর ডেটা বা অবস্থা পরিবর্তিত হলে ট্রিগার হওয়া ইভেন্টগুলোর মাধ্যমে আপনার অ্যাপ্লিকেশনকে অবহিত করতে পারেন।
Read more