Distributed Locking এবং Synchronization

Database Tutorials - হ্যাজেলকাস্ট  (Hazelcast) - Distributed Computing with Hazelcast |

Distributed Locking এবং Synchronization হল ডিস্ট্রিবিউটেড সিস্টেমে একই সময়ে একাধিক থ্রেড বা নোডের মধ্যে সম্পদ বা ডেটার অ্যাক্সেস নিয়ন্ত্রণ করার জন্য ব্যবহৃত প্রযুক্তি। Hazelcast-এর মাধ্যমে এই প্রযুক্তিগুলি ব্যবহার করে ডিস্ট্রিবিউটেড সিস্টেমে ডেটা কনসিস্টেন্সি, সিঙ্ক্রোনাইজেশন এবং প্রতিযোগিতা নিয়ন্ত্রণ করা যায়।

এই টিউটোরিয়ালে, আমরা Hazelcast-এ Distributed Locking এবং Synchronization এর ধারণা এবং ব্যবহারের কৌশল আলোচনা করব।


Distributed Locking in Hazelcast

Hazelcast-এ Distributed Locking এর মাধ্যমে একটি নির্দিষ্ট সম্পদের উপর একাধিক নোড বা থ্রেডের অ্যাক্সেসকে সিঙ্ক্রোনাইজ করা হয়। এটি একটি ধরনের mutex বা semaphore, যা নিশ্চিত করে যে একই সম্পদ এক সময়ে শুধুমাত্র এক নোড বা থ্রেড দ্বারা অ্যাক্সেসযোগ্য হবে। এতে ডেটার মধ্যে প্রতিযোগিতা (race conditions) এবং ডেটার অনিয়মিত আপডেট সমস্যা থেকে মুক্তি পাওয়া যায়।

Distributed Locking ব্যবহার করার পদ্ধতি

Hazelcast-এ ILock ইন্টারফেসটি Distributed Lock তৈরি করতে ব্যবহৃত হয়।

  1. Lock অর্জন (Acquiring Lock)
    • lock() মেথড ব্যবহার করে একটি লক অর্জন করা হয়।
  2. Lock মুক্ত করা (Releasing Lock)
    • unlock() মেথড ব্যবহার করে লক মুক্ত করা হয়।

Distributed Lock উদাহরণ

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 ব্লক ব্যবহার করা উচিত, যাতে কোনও কারণে লক আটকে গেলে সেটি মুক্ত করা যায়।

Lock Timeout: আপনি লকটি একটি নির্দিষ্ট সময়ের জন্য অর্জন করতে পারেন, যদি সেটি অন্য নোড বা থ্রেড দ্বারা ব্যস্ত থাকে:

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 in Hazelcast

Synchronization হল একাধিক থ্রেড বা নোডের মধ্যে একই সময়ে একই কার্যাবলি (task) পরিচালনা করতে নিয়ন্ত্রণ রাখা। এটি নিশ্চিত করে যে একাধিক থ্রেড বা নোড একসাথে একই ডেটা পরিবর্তন বা অ্যাক্সেস করতে না পারে। Hazelcast-এ, ডিস্ট্রিবিউটেড সিঙ্ক্রোনাইজেশন সাধারণত লকিং মেকানিজম বা EntryProcessor ব্যবহার করে করা হয়।

Hazelcast-এ synchronization নিশ্চিত করার জন্য বিভিন্ন পদ্ধতি ব্যবহৃত হয়:

  1. Entry Processor: এটি একটি ফাংশন যা Hazelcast-এর ডিস্ট্রিবিউটেড ম্যাপের উপর কাজ করে এবং নির্দিষ্ট একটি ভ্যালু বা এন্ট্রির উপর একাধিক থ্রেডের পরিবর্তনগুলো সিঙ্ক্রোনাইজ করতে ব্যবহৃত হয়।
  2. Atomic Operations: Hazelcast-এ atomic operations দিয়ে সিঙ্ক্রোনাইজেশন নিশ্চিত করা যায়। এটি নিশ্চিত করে যে কোনো ভ্যালু একসাথে একাধিক থ্রেড বা নোড দ্বারা পরিবর্তন হবে না।

EntryProcessor উদাহরণ

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) প্রতিরোধ করা যায়।

Atomic Operations উদাহরণ

IAtomicLong atomicLong = hz.getAtomicLong("counter");
atomicLong.incrementAndGet(); // Increment atomically

Hazelcast এর IAtomicLong এবং IAtomicReference ক্লাসগুলি ব্যবহৃত হয় অ্যাটমিক অপারেশন (যেমন ইনক্রিমেন্ট বা ডিক্রিমেন্ট) করতে, যা থ্রেড বা নোডের মধ্যে সিঙ্ক্রোনাইজডভাবে কাজ করে।


Hazelcast Distributed Locking এবং Synchronization এর সুবিধা

  1. ডেটার সিঙ্ক্রোনাইজেশন: একাধিক থ্রেড বা নোডের মধ্যে ডেটা কনসিস্টেন্সি বজায় রাখতে সাহায্য করে। লকিং এবং সিঙ্ক্রোনাইজেশন পদ্ধতি নিশ্চিত করে যে একটি সম্পদ একসাথে একাধিক থ্রেড দ্বারা পরিবর্তিত হবে না।
  2. ফল্ট টলারেন্স: Hazelcast ডিস্ট্রিবিউটেড সিস্টেমে লকিং মেকানিজম কাজ করে এমনকি নোড ব্যর্থ হলেও, সিস্টেমের অপর নোডে লক পাওয়ার মাধ্যমে কার্যক্রম চলতে থাকে।
  3. পারফরম্যান্স উন্নতি: Distributed Locking এবং Synchronization সঠিকভাবে ব্যবহৃত হলে, ডেটার অপ্রত্যাশিত পরিবর্তন রোধ করে পারফরম্যান্স নিশ্চিত করা যায়।

সারাংশ

Hazelcast-এর Distributed Locking এবং Synchronization পদ্ধতিগুলি ডিস্ট্রিবিউটেড সিস্টেমে ডেটার কনসিস্টেন্সি, প্রতিযোগিতা নিয়ন্ত্রণ এবং সিঙ্ক্রোনাইজেশন নিশ্চিত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। ILock এবং EntryProcessor এর মাধ্যমে ডেটার উপর সিঙ্ক্রোনাইজড অপারেশন পরিচালনা করা যায়, যা ডিস্ট্রিবিউটেড অ্যাপ্লিকেশনের পারফরম্যান্স ও নিরাপত্তা বৃদ্ধি করতে সহায়ক।

Content added By
Promotion