লিডার ইলেকশন কী?

লিডার ইলেকশন (Leader Election) হলো একটি প্রক্রিয়া যার মাধ্যমে ডিস্ট্রিবিউটেড সিস্টেমের একাধিক নোডের মধ্যে থেকে একটি নোডকে লিডার (নেতা) হিসেবে নির্বাচিত করা হয়। বাকি নোডগুলো হয়ে যায় ফলোয়ার (অনুসারী)।

সহজ ভাষায়:
একটি দলে যখন সিদ্ধান্ত নেওয়ার দরকার হয়, তখন সবাই মিলে একজন ক্যাপ্টেন নির্বাচন করে। ক্যাপ্টেন ডাউন হলে আবার নতুন ক্যাপ্টেন নির্বাচন করা হয়।

        [ক্লায়েন্ট রিকোয়েস্ট]
                  ↓
        ┌─────────────────┐
        │   লিডার (নেতা)   │ ← সিদ্ধান্ত নেয়, লেখার কাজ করে
        │   নোড এ         │
        └────────┬────────┘
                 │ (কমান্ড/ডাটা রেপ্লিকেশন)
        ┌────────┼────────┬────────┐
        ↓        ↓        ↓        ↓
    [নোড বি] [নোড সি] [নোড ডি] [নোড ই]
    ফলোয়ার   ফলোয়ার   ফলোয়ার   ফলোয়ার

কেন লিডার ইলেকশন দরকার?

কারণ ব্যাখ্যা
সমন্বয় একাধিক নোডকে একসাথে কাজ করাতে একজন নেতা দরকার
কনসিসটেন্সি একাধিক নোড একই সাথে লিখলে কনফ্লিক্ট হয় → লিডার একা লেখে
সিদ্ধান্ত গ্রহণ কনসেনসাস অ্যালগরিদমে লিডার সিদ্ধান্ত নেয়
ফেইলওভার লিডার ডাউন হলে স্বয়ংক্রিয়ভাবে নতুন লিডার নির্বাচন
অর্ডারিং লিডার অপারেশনের ক্রম নির্ধারণ করে

কোথায় লিডার ইলেকশন ব্যবহার করা হয়?

সিস্টেম ব্যবহার
কাফকা পার্টিশনের লিডার (ব্রোকারদের মধ্যে)
মঙ্গোডিবি রেপ্লিকা সেটের প্রাইমারি নির্বাচন
জুকেepার জুকেepার ক্লাস্টারের লিডার
ইটিসিডি Raft অ্যালগরিদমে লিডার
রেডিস সেন্টিনেল মাস্টার নির্বাচন
কুবারনেটিস কন্ট্রোলার ম্যানেজারের লিডার

লিডার ইলেকশন অ্যালগরিদম

১. বুলি অ্যালগরিদম (Bully Algorithm)

গল্প: সবচেয়ে বড় আইডির নোড জিতবে।

কীভাবে কাজ করে:

  1. একটি নোড লিডার ডাউন টের পায়
  2. সে সব নোডকে চ্যালেঞ্জ করে (বড় আইডির থাকলে)
  3. বড় আইডির নোড ইলেকশনে জিতে যায়
নোড ১ (আইডি: ১০) → "আমি লিডার হতে চাই"
                    ↓
নোড ২ (আইডি: ২৫) → "আমি বড়, তুই বাদ"
                    ↓
নোড ২ (আইডি: ২৫) → "আমি লিডার" (সবার চেয়ে বড়)
সুবিধা অসুবিধা
সহজ বাস্তবায়ন নেটওয়ার্ক পার্টিশনে সমস্যা
দ্রুত সবচেয়ে বড় আইডির নোড সবসময় লিডার (লোড ব্যালান্সিং নেই)

২. রিং অ্যালগরিদম (Ring Algorithm)

গল্প: নোডগুলো লজিক্যাল রিংয়ে সাজানো, দায়িত্ব ঘুরিয়ে দেওয়া হয়।

     নোড ১ ←→ নোড ২
       ↺         ↻
     নোড ৪ ←→ নোড ৩
         
ইলেকশন মেসেজ ঘুরে ঘুরে সব নোডে পৌঁছায়
যে নোডের আইডি বড়, সে জিতে যায়
সুবিধা অসুবিধা
ডিটারমিনিস্টিক একাধিক রাউন্ড লাগতে পারে
নেটওয়ার্ক পার্টিশন হ্যান্ডেল করে ধীর

৩. কনসেনসাস-বেসড অ্যালগরিদম

এগুলো লিডার ইলেকশন + ডাটা কনসিসটেন্সি একসাথে দেয়।

Raft অ্যালগরিদম

Raft ডিস্ট্রিবিউটেড সিস্টেমে সবচেয়ে জনপ্রিয়।

টার্ম (Term)

টার্ম ১: লিডার এ → ডাউন
টার্ম ২: লিডার বি → ডাউন  
টার্ম ৩: লিডার সি → চলমান

নোডের অবস্থা তিনটি:

[ফলোয়ার] ←──→ [ক্যান্ডিডেট] ←──→ [লিডার]
    ↑             ↓                 ↓
    └─────────────┴─────────────────┘
        (টাইমআউট/ইলেকশন)

ইলেকশন প্রক্রিয়া:

  1. ফলোয়ার লিডার থেকে হৃদস্পন্দন পায় না → টাইমআউট
  2. ফলোয়ার ক্যান্ডিডেট হয় → নিজের জন্য ভোট চায়
  3. ক্যান্ডিডেট মেজরিটি ভোট পেলে লিডার হয়
[ফলোয়ার এ]    [ফলোয়ার বি]    [ফলোয়ার সি]
     │               │               │
     └───────╼ (কোনো হৃদস্পন্দন নেই) ╾───────┘
     
     ↓ টাইমআউট
     
[ক্যান্ডিডেট এ] → "আমাকে ভোট দাও" → [ফলোয়ার বি]
                → "আমাকে ভোট দাও" → [ফলোয়ার সি]
                
     ↓ (২ ভোট + নিজের ১ = ৩/৩)
     
[লিডার এ] → "আমি লিডার" (হৃদস্পন্দন পাঠাতে শুরু করে)

Raft-এর সময়সীমা:

  • ইলেকশন টাইমআউট: ১৫০-৩০০ ms (র্যান্ডম)
  • হার্টবিট ইন্টারভাল: ৫০ ms (লিডার থেকে)

Paxos অ্যালগরিদম

Paxos আরও জটিল কিন্তু খুব শক্তিশালী।

[প্রস্তাবক] → প্রস্তাব দেয়
[গ্রহণকারী] → প্রস্তাব গ্রহণ/রিজেক্ট করে  
[শিক্ষার্থী] → চূড়ান্ত সিদ্ধান্ত জানতে পারে

ফেজ ১: প্রস্তাব (Prepare Promise)
ফেজ ২: গ্রহণ (Accept Request)
অ্যালগরিদম জটিলতা গতি ব্যবহার
বুলি সহজ দ্রুত সাধারণ সিস্টেম
রিং মাঝারি মাঝারি পুরোনো সিস্টেম
Raft মাঝারি দ্রুত আধুনিক সিস্টেম (Kafka, etcd)
Paxos জটিল ধীর (কিন্তু নির্ভরযোগ্য) Google, Chubby

লিডার ইলেকশনের চ্যালেঞ্জ

চ্যালেঞ্জ ব্যাখ্যা সমাধান
স্প্লিট ব্রেন নেটওয়ার্ক পার্টিশনে দুই লিডার কোরাম (মেজরিটি) + ফেন্সিং টোকেন
লাইভলক একাধিক নোড বারবার ইলেকশন চেষ্টা র্যান্ডম টাইমআউট + ব্যাকঅফ
স্টেল লিডার পুরোনো লিডার এখনও চালু মনে করে এপেমেরাল নোড + লিজ (টাইম-বাউন্ড লিডারশিপ)
লিডার অভাব কেউ লিডার না হলে প্রগ্রেস হয় না টাইমআউট কম রাখা + মনিটরিং

ফেন্সিং (Fencing) কেন দরকার?

স্প্লিট ব্রেন যখন হয়, পুরোনো লিডার এখনও রিসোর্সে লিখতে পারে!

[পুরোনো লিডার] "আমি এখনো লিডার" → ডাটাবেসে লিখছে ⚠️
[নতুন লিডার]   "আমিই লিডার" → ডাটাবেসে লিখছে ⚠️

ফলাফল: ডাটা করাপ্ট!

ফেন্সিং টোকেন সমাধান:

লিডার ইলেকশন → টোকেন ৫ দেয়
পুরোনো লিডার → টোকেন ৪ নিয়ে আসে (ডাটাবেস রিজেক্ট করে)

ডাটাবেস চেক করে: টোকেন ৫ > ৪ → পুরোনো লিডারকে ব্লক!

কৌশল নির্বাচন গাইড

ব্যবহার ক্ষেত্র প্রস্তাবিত অ্যালগরিদম কেন?
ডাটাবেস রেপ্লিকা সেট (MongoDB) Raft ব্যালেন্স, বিশ্বাসযোগ্য
মেসেজ ব্রোকার (Kafka) Raft (KRaft) নতুন, ফাস্ট
কনফিগারেশন স্টোর (etcd) Raft বিল্ট-ইন
সহজ অ্যাপ্লিকেশন Redis + Set NX খুব সহজ বাস্তবায়ন
গুরুত্বপূর্ণ ফাইনান্সিয়াল Paxos সর্বোচ্চ নিরাপত্তা
জুকেepার প্রতিস্থাপন Raft সিম্পল, মডার্ন

লিডারশিপের দায়িত্ব

দায়িত্ব বিবরণ
রাইট প্রসেসিং লেখার কাজ শুধু লিডার
লগ রেপ্লিকেশন ফলোয়ারে লগ কপি করা
হার্টবিট পাঠানো সবার কাছে AppentEntries পাঠানো
স্ন্যাপশট লগ খুব বড় হলে স্ন্যাপশট তৈরি
ক্লায়েন্ট রেসপন্স ক্লায়েন্টকে ফাইনাল রেসপন্স দেওয়া

সারাংশ চিটশিট

যদি চান তাহলে বেছে নিন
সবচেয়ে সহজ দ্রুত সমাধান Redis + SET NX (কিন্তু স্প্লিট ব্রেন সম্ভব)
উৎপাদন-গ্রেড কনসিসটেন্সি Raft (etcd ব্যবহার করে)
গুগল লেভেল নির্ভরযোগ্যতা Paxos (জটিল বটে)
জাভা ইকোসিস্টেমে কাজকর্ম ZooKeeper
আধুনিক ক্লাউড নেটিভ Raft (etcd/Consul)

শিল্প উদাহরণ

কোম্পানি প্রযুক্তি লিডার ইলেকশন বিবরণ
Uber Ringpop স্বনির্মিত (SWIM প্রোটোকল) ডিস্ট্রিবিউটেড সার্কিট ব্রেকার
Netflix Cassandra Gossip + বুলি জুকেepার প্রতিস্থাপন
Kubernetes etcd Raft কন্ট্রোলার ম্যানেজার লিডার
GitHub MySQL + Orchestrator Raft ডাটাবেস ফেইলওভার
Share