Leader election: distributed সিস্টেম কীভাবে একজন নেতা বাছে
অনেক সিস্টেমে ঠিক একটি node দায়িত্বে থাকতে হয়। নির্বাচন কীভাবে চলে, সংখ্যাগরিষ্ঠতা কেন জরুরি এবং একসাথে দুই leader কীভাবে ঠেকাবেন, জানুন।

কিছু কাজ একসময়ে একটি node-কেই করতে হয়: primary database-এ write নেওয়া, নির্ধারিত job চালানো, partition বণ্টন। দুটি node নিজেকে দায়িত্বে ভাবলে কাজ দ্বিগুণ বা data নষ্ট হয় (split brain)। Leader election একজন leader বাছে এবং সে ব্যর্থ হলে বদলায়।
মূল ধারণা
Message দেরি হলে বা node ভাঙলেও কে নেতৃত্ব দেবে তাতে node-দের একমত হতে হবে। প্রচলিত উত্তর সংখ্যাগরিষ্ঠতা (quorum)। আধার বেশি node ভোট দিলে তবেই candidate leader হয়। দুটি সংখ্যাগরিষ্ঠতা সবসময় মেলে, তাই একই সময়কালে দুজন leader নির্বাচিত হতে পারে না। এ কারণেই cluster-এ ৩ বা ৫-এর মতো বিজোড় node রাখা হয়।
সংক্ষেপে Raft
Raft বহুল ব্যবহৃত consensus algorithm (etcd ও Consul ব্যবহার করে)।
- Node-রা follower। Leader নিয়মিত heartbeat পাঠায়।
- Follower random timeout পর্যন্ত heartbeat না পেলে candidate হয়, নিজের term (নির্বাচনের নম্বর) বাড়ায় এবং ভোট চায়।
- প্রতিটি node প্রতি term-এ একবার ভোট দেয়। সংখ্যাগরিষ্ঠতা পাওয়া candidate leader হয়।
- Random timeout-এর কারণে দুই candidate বারবার ভোট ভাগ করার সম্ভাবনা কম।
বেশি term দেখলে node নেমে যায়। পুরোনো leader তাই সরে যায়।
বাইরের coordinator ব্যবহার
Consensus নিজে না বানিয়ে অ্যাপ প্রায়ই etcd, ZooKeeper বা Consul ব্যবহার করে। প্রতিটি candidate lease (সময়সীমা) সহ একটি key বা lock বানাতে চেষ্টা করে। যে পারে সে leader, আর তাকে lease নবায়ন করতে হয়। সে মরলে lease শেষ হয় এবং অন্যরা প্রতিযোগিতা করে।
বিপজ্জনক ক্ষেত্র: পুরোনো leader
Leader থেমে যেতে পারে (যেমন লম্বা garbage collection), lease হারাতে পারে, তারপর জেগে নিজেকে এখনও leader ভাবতে পারে। এর বিরুদ্ধে fencing token ব্যবহার করুন: প্রতিটি নেতৃত্বের term-এ বাড়তে থাকা একটি সংখ্যা। Storage সর্বশেষ দেখা token-এর চেয়ে পুরোনো token-যুক্ত write প্রত্যাখ্যান করে।
ব্যবহারিক পরামর্শ
- নিজে লেখার চেয়ে managed বা প্রমাণিত সিস্টেম নিন।
- Lease ও timeout স্বাভাবিক network jitter-এর চেয়ে বড় রাখুন।
- Leader-এর কাজ idempotent রাখুন, যাতে বিরল overlap ক্ষতি না করে।
মূল কথা: সংখ্যাগরিষ্ঠ ভোটে leader বাছুন, term ট্র্যাক করুন, আর পুরোনো leader যেন ক্ষতি না করে সেজন্য fencing token ব্যবহার করুন।
System Design সিরিজ, পর্ব ২ (building block): 9 নম্বর (মোট 14)। আগের লেখা: Bloom filter: অল্প memory-তে সদস্যপদ যাচাই.


