Zookeeper একটি ডিস্ট্রিবিউটেড কোঅর্ডিনেশন সার্ভিস যা ডিস্ট্রিবিউটেড সিস্টেমে সিঙ্ক্রোনাইজেশন, কনফিগারেশন ম্যানেজমেন্ট এবং নামস্পেস প্রদান করে। Zookeeper তার distributed locking মেকানিজম এবং barriers ব্যবস্থার মাধ্যমে ডিস্ট্রিবিউটেড সিস্টেমের মধ্যে সমন্বয় এবং সমবায় নিশ্চিত করে। এই দুটি প্রযুক্তি মূলত একাধিক ক্লায়েন্ট বা নোডের মধ্যে সংস্থান ব্যবহারের সময় নিরাপদ সমন্বয় এবং সিঙ্ক্রোনাইজেশন করার জন্য ব্যবহৃত হয়।
Distributed Locking Mechanism
ডিস্ট্রিবিউটেড লকিং এমন একটি পদ্ধতি যা একাধিক ক্লায়েন্ট বা সার্ভারের মধ্যে সিঙ্ক্রোনাইজেশন নিশ্চিত করে যাতে তারা একই সময়ে একটি সংস্থান বা রিসোর্স অ্যাক্সেস করতে না পারে। Zookeeper এর distributed locking mechanism-এর মাধ্যমে, একাধিক ক্লায়েন্ট একে অপরের সাথে সমন্বয় করে এবং যখন একটি ক্লায়েন্ট বা সার্ভার একটি রিসোর্স ব্যবহার করছে, তখন অন্য ক্লায়েন্টরা সেই রিসোর্স ব্যবহার করতে পারে না, যতক্ষণ না প্রথম ক্লায়েন্ট তার কাজ শেষ না করে।
Zookeeper-এ Distributed Locking Mechanism
Zookeeper-এ ডিস্ট্রিবিউটেড লকিং এর জন্য Ephemeral Sequential ZNodes ব্যবহৃত হয়। এটি একটি ZNode তৈরি করে, যা একাধিক ক্লায়েন্টের মধ্যে লক পরিচালনা করতে সাহায্য করে। এক ক্লায়েন্ট যখন ZNode তৈরি করে, তখন অন্য ক্লায়েন্টরা সেই ZNode এর উপর এক্সেস করতে পারে না, যতক্ষণ না এটি মুছে ফেলা হয়। এটি একটি "first-come, first-served" ভিত্তিতে কাজ করে।
উদাহরণ:
- ZNode তৈরি: একটি ক্লায়েন্ট একটি
lock/নামের ZNode তৈরি করবে। অন্যান্য ক্লায়েন্টরা এই ZNode-এর অধীনে একে একেlock-0000000001,lock-0000000002ইত্যাদি নামে ZNode তৈরি করবে। - লক অর্জন: ক্লায়েন্টরা তার নিজের ZNode তৈরি করার পরে, এটি চেক করবে যে, এর পূর্বের ZNode (যেমন,
lock-0000000001) আছে কিনা। যদি পূর্বের ZNode থাকে, ক্লায়েন্টটিকে অপেক্ষা করতে হবে। - লক মুক্তি: একবার ক্লায়েন্ট তার কাজ শেষ করে, এটি তার ZNode মুছে ফেলবে, এবং অন্য ক্লায়েন্টটিকে লকটি নেওয়ার সুযোগ দিবে।
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
public class DistributedLock {
private ZooKeeper zk;
private String lockPath = "/lock";
public DistributedLock(ZooKeeper zk) {
this.zk = zk;
}
public void acquireLock() throws Exception {
String lockNode = zk.create(lockPath + "/lock-", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
System.out.println("Lock node created: " + lockNode);
// Watcher functionality to monitor previous lock node
// The process would check the nodes sequentially and acquire lock if it is the first in sequence
}
public void releaseLock(String lockNode) throws Exception {
zk.delete(lockNode, -1);
System.out.println("Lock released: " + lockNode);
}
}
ব্যাখ্যা:
- Ephemeral Sequential ZNode ব্যবহার করা হয়েছে যাতে ZNode গুলি ক্লায়েন্টের সেশন শেষ হলে স্বয়ংক্রিয়ভাবে মুছে যায়, এবং পরবর্তী ক্লায়েন্টকে লক দেওয়া হয়।
Zookeeper Barriers
Barriers একটি ডিস্ট্রিবিউটেড সিঙ্ক্রোনাইজেশন প্যাটার্ন যা একাধিক ক্লায়েন্ট বা নোডকে একই সময়ে একটি নির্দিষ্ট অবস্থানে পৌঁছানোর জন্য বাধ্য করে। যখন একটি ক্লায়েন্ট একটি barrier পেরিয়ে যেতে চায়, এটি একটি ZNode তৈরি করবে এবং তার পরে সমস্ত ক্লায়েন্ট সেই ZNode-এ পৌঁছানোর পরই পরবর্তী ধাপ শুরু করতে পারবে।
Zookeeper-এ Barrier এর কাজ:
Zookeeper এর মধ্যে, barrier সাধারণত ZNode-এর মাধ্যমে পরিচালিত হয়। প্রতিটি ক্লায়েন্ট একটি নির্দিষ্ট ZNode তৈরি করে এবং পরবর্তী ধাপে যাওয়ার আগে অন্য ক্লায়েন্টদের অপেক্ষা করতে বাধ্য করে। একবার সমস্ত ক্লায়েন্ট সেই ZNode-এ পৌঁছালে, তারা পরবর্তী ধাপে যেতে পারে।
উদাহরণ:
ধরা যাক, আমরা একটি barrier তৈরি করতে চাই যেখানে পাঁচটি ক্লায়েন্ট একটি নির্দিষ্ট ZNode-এ পৌঁছানোর পর পরবর্তী কাজ শুরু করবে।
- Barrier তৈরি: প্রতিটি ক্লায়েন্ট তার নিজস্ব ZNode তৈরি করবে, যেমন
barrier/00001,barrier/00002ইত্যাদি। তারা একটি shared ZNode (যেমনbarrier/final) পর্যন্ত অপেক্ষা করবে। - Barrier পেরিয়ে যাওয়া: একবার সব ক্লায়েন্ট সেই
barrier/finalZNode-এ পৌঁছালে, তাদের পরবর্তী ধাপ শুরু হবে।
import org.apache.zookeeper.*;
public class BarrierExample {
private ZooKeeper zk;
private String barrierPath = "/barrier/final";
private int totalClients = 5;
public BarrierExample(ZooKeeper zk) {
this.zk = zk;
}
public void awaitBarrier() throws Exception {
String clientBarrierNode = zk.create(barrierPath + "/client-", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
System.out.println("Client reached the barrier: " + clientBarrierNode);
// Logic to check if all clients reached barrier
// Once all clients reach the barrier, proceed with the next steps
}
}
ব্যাখ্যা:
create()পদ্ধতির মাধ্যমে প্রতিটি ক্লায়েন্ট একটি ZNode তৈরি করবে, এবংephemeralZNode হওয়ায় তা ক্লায়েন্টের সেশন শেষে স্বয়ংক্রিয়ভাবে মুছে যাবে।- Barrier এর মাধ্যমে সমস্ত ক্লায়েন্টকে একটি নির্দিষ্ট অবস্থানে পৌঁছানোর জন্য বাধ্য করা হয়।
সারাংশ
Zookeeper-এর Distributed Locking মেকানিজম এবং Barriers ডিস্ট্রিবিউটেড সিস্টেমে সিঙ্ক্রোনাইজেশন এবং সমন্বয় নিশ্চিত করার জন্য শক্তিশালী টুল। Distributed Locking মেকানিজম ক্লায়েন্টদের মধ্যে নিরাপদভাবে রিসোর্স ব্যবহারের জন্য লক তৈরি করতে সাহায্য করে, এবং Barriers একাধিক ক্লায়েন্টকে একটি নির্দিষ্ট অবস্থানে পৌঁছানোর পর একসাথে পরবর্তী ধাপে যাওয়ার সুযোগ প্রদান করে। Zookeeper এই প্রক্রিয়াগুলির মাধ্যমে ডিস্ট্রিবিউটেড সিস্টেমগুলিতে কার্যকরী সমন্বয় ও সিঙ্ক্রোনাইজেশন বজায় রাখতে সাহায্য করে।
Read more