বর্তমানে পরীক্ষা চলছে: সম্পূর্ণ হলে GitHub কোড উন্মুক্ত করা হবে।

প্রোটোকল — সার্ভার ↔ সার্ভার (ক্লাস্টার)

শুধুমাত্র ক্লাস্টার মোডে ব্যবহৃত পিয়ার RPC প্রোটোকল। নোডগুলো Raft ঐকমত্যের মাধ্যমে একটি একক লক-স্টেট শেয়ার করে — প্রতিটি লক-স্টেট পরিবর্তন (অর্জন, মুক্তি, মেয়াদ শেষ) শুধুমাত্র লিডারের প্রস্তাব → সংখ্যাগরিষ্ঠ প্রতিলিপি → কমিট হওয়ার পরই প্রয়োগ হয়, তাই বিভাজন বা ফেইলওভারের সময়ও পারস্পরিক বর্জন (mutual exclusion) বজায় থাকে। ধারণাগত ব্যাখ্যার জন্য দেখুন কার্যপ্রণালী

প্রবাহ — একটি অর্জন কমিট হওয়া পর্যন্ত

ক্লায়েন্ট
লিডার
ফলোয়ার ১
ফলোয়ার ২
A · অর্জন (key)
AppendEntries (Grant)
AppendEntries (Grant)
OK
সংখ্যাগরিষ্ঠতা পৌঁছালে → কমিট, সব নোডে প্রয়োগ
A · অর্জিত (token)
অনুরোধপ্রতিক্রিয়াকনসেনসাস RPC (Raft)

লিডার লক কমান্ডকে একটি প্রতিলিপিকৃত কমান্ডে রূপান্তরিত করে, একটি AppendEntries RPC-তে বহন করে পাঠায়, এবং নিজেসহ সংখ্যাগরিষ্ঠ নোড রেকর্ড করলেই কমিট করে (৩টি নোডে লিডার + ফলোয়ার ১-ই যথেষ্ট — বাকিদের সাড়ার জন্য অপেক্ষা করে না)। ক্লায়েন্ট সাড়া কমিটের পরই বেরোয়, তাই সাড়া পেয়ে গেলে সেই লক সংখ্যাগরিষ্ঠতায় লেখা হয়ে গেছে বুঝতে হবে।

পোর্ট ও ঠিকানার নিয়ম

  • পিয়ার RPC একটি নিবেদিত Raft পোর্ট = ক্লায়েন্ট পোর্ট + ১০০০ ব্যবহার করে (যেমন 52256225)। এটি কোনো আলাদা কনফিগ কী ছাড়াই স্বয়ংক্রিয়ভাবে নির্ধারিত হয়, এবং শুধু ক্লাস্টার মোডেই শোনে। ফায়ারওয়ালে দুটো পোর্টই খুলতে হবে।
  • কনফিগারেশনে (cluster_self/cluster_peers) সবসময় ক্লায়েন্ট ঠিকানা থাকে। শুধু পিয়ারকে ডায়াল করার সময়ই পোর্টে +১০০০ যোগ হয় — ক্লায়েন্টকে দেওয়া M (স্থানান্তরিত) রিডাইরেক্ট ঠিকানা সবসময় সাদামাটা ক্লায়েন্ট ঠিকানাই থাকে।
  • ভূমিকা শুধু পোর্ট দিয়েই নির্ধারিত হয় — ক্লায়েন্ট আর পিয়ার আলাদা করার কোনো প্রোটোকল-অভ্যন্তরীণ ধাপ নেই। সংযোগের ক্রম আর প্রমাণীকরণ/TLS নিয়মের জন্য দেখুন সংযোগ ও প্রমাণীকরণ

সূচিপত্র

আরও দেখুন