Distributed Locking এবং Synchronization হল ডিস্ট্রিবিউটেড সিস্টেমে একই সময়ে একাধিক থ্রেড বা নোডের মধ্যে সম্পদ বা ডেটার অ্যাক্সেস নিয়ন্ত্রণ করার জন্য ব্যবহৃত প্রযুক্তি। Hazelcast-এর মাধ্যমে এই প্রযুক্তিগুলি ব্যবহার করে ডিস্ট্রিবিউটেড সিস্টেমে ডেটা কনসিস্টেন্সি, সিঙ্ক্রোনাইজেশন এবং প্রতিযোগিতা নিয়ন্ত্রণ করা যায়।
এই টিউটোরিয়ালে, আমরা Hazelcast-এ Distributed Locking এবং Synchronization এর ধারণা এবং ব্যবহারের কৌশল আলোচনা করব।
Hazelcast-এ Distributed Locking এর মাধ্যমে একটি নির্দিষ্ট সম্পদের উপর একাধিক নোড বা থ্রেডের অ্যাক্সেসকে সিঙ্ক্রোনাইজ করা হয়। এটি একটি ধরনের mutex বা semaphore, যা নিশ্চিত করে যে একই সম্পদ এক সময়ে শুধুমাত্র এক নোড বা থ্রেড দ্বারা অ্যাক্সেসযোগ্য হবে। এতে ডেটার মধ্যে প্রতিযোগিতা (race conditions) এবং ডেটার অনিয়মিত আপডেট সমস্যা থেকে মুক্তি পাওয়া যায়।
Hazelcast-এ ILock
ইন্টারফেসটি Distributed Lock তৈরি করতে ব্যবহৃত হয়।
lock()
মেথড ব্যবহার করে একটি লক অর্জন করা হয়।unlock()
মেথড ব্যবহার করে লক মুক্ত করা হয়।HazelcastInstance hz = Hazelcast.newHazelcastInstance();
ILock lock = hz.getLock("myLock");
lock.lock(); // Lock acquired
try {
// Critical section code
System.out.println("Lock acquired, performing critical operation.");
} finally {
lock.unlock(); // Lock released
System.out.println("Lock released.");
}
getLock("myLock")
একটি নির্দিষ্ট লক তৈরি করে, এবং lock()
মেথড লক অর্জন করে। কাজ শেষ হলে unlock()
মেথড ব্যবহার করে লক মুক্ত করা হয়।finally
ব্লক ব্যবহার করা উচিত, যাতে কোনও কারণে লক আটকে গেলে সেটি মুক্ত করা যায়।boolean acquired = lock.tryLock(5, TimeUnit.SECONDS);
if (acquired) {
try {
// Critical section code
} finally {
lock.unlock();
}
} else {
System.out.println("Could not acquire lock.");
}
এখানে tryLock()
৫ সেকেন্ডের জন্য লকটি অর্জন করার চেষ্টা করবে এবং যদি সেকেন্ডের মধ্যে লক না পাওয়া যায়, তাহলে এটি false
রিটার্ন করবে।
Synchronization হল একাধিক থ্রেড বা নোডের মধ্যে একই সময়ে একই কার্যাবলি (task) পরিচালনা করতে নিয়ন্ত্রণ রাখা। এটি নিশ্চিত করে যে একাধিক থ্রেড বা নোড একসাথে একই ডেটা পরিবর্তন বা অ্যাক্সেস করতে না পারে। Hazelcast-এ, ডিস্ট্রিবিউটেড সিঙ্ক্রোনাইজেশন সাধারণত লকিং মেকানিজম বা EntryProcessor
ব্যবহার করে করা হয়।
Hazelcast-এ synchronization নিশ্চিত করার জন্য বিভিন্ন পদ্ধতি ব্যবহৃত হয়:
IMap map = hz.getMap("myMap");
map.put(1, 0);
EntryProcessor processor = new EntryProcessor() {
@Override
public Object process(Map.Entry entry) {
entry.setValue(entry.getValue() + 1);
return null;
}
};
map.executeOnKey(1, processor); // Executes the processor on key 1
এখানে, EntryProcessor
ব্যবহার করে আমরা একটি নির্দিষ্ট IMap
এর কীগুলোর উপর সিঙ্ক্রোনাইজড পরিবর্তন করতে পারি। এতে প্রতিযোগিতা (race conditions) প্রতিরোধ করা যায়।
IAtomicLong atomicLong = hz.getAtomicLong("counter");
atomicLong.incrementAndGet(); // Increment atomically
Hazelcast এর IAtomicLong
এবং IAtomicReference
ক্লাসগুলি ব্যবহৃত হয় অ্যাটমিক অপারেশন (যেমন ইনক্রিমেন্ট বা ডিক্রিমেন্ট) করতে, যা থ্রেড বা নোডের মধ্যে সিঙ্ক্রোনাইজডভাবে কাজ করে।
Hazelcast-এর Distributed Locking এবং Synchronization পদ্ধতিগুলি ডিস্ট্রিবিউটেড সিস্টেমে ডেটার কনসিস্টেন্সি, প্রতিযোগিতা নিয়ন্ত্রণ এবং সিঙ্ক্রোনাইজেশন নিশ্চিত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। ILock
এবং EntryProcessor
এর মাধ্যমে ডেটার উপর সিঙ্ক্রোনাইজড অপারেশন পরিচালনা করা যায়, যা ডিস্ট্রিবিউটেড অ্যাপ্লিকেশনের পারফরম্যান্স ও নিরাপত্তা বৃদ্ধি করতে সহায়ক।
আরও দেখুন...