ফ্রেম স্ট্রাকচার
Raft RPC বহনকারী দৈর্ঘ্য-প্রিফিক্সড বাইনারি ফ্রেমিং। ক্লায়েন্ট প্রোটোকলের \n-সমাপ্ত ফ্রেমের থেকে ভিন্ন, এখানে আগে দৈর্ঘ্য পাঠানো হয় এবং তারপর ঠিক ততটা বাইট পড়া হয়। একটি সংযোগে অনুরোধ-সাড়া জোড়া ক্রমানুসারে আদান-প্রদান হয়, আর ডায়াল করা পক্ষই সবসময় অনুরোধকারী।
অনুরোধ (ডায়ালার → গ্রহণকারী)
গঠনrefresh
সাড়া (গ্রহণকারী → ডায়ালার)
গঠনrefresh
| ফিল্ড | আকার | বিষয়বস্তু |
|---|---|---|
tag | u8 | RPC-এর ধরন — দেখুন RPC ধরন (শুধু অনুরোধে থাকে) |
len | u32, বিগ-এন্ডিয়ান | পরবর্তী payload-এর বাইট-দৈর্ঘ্য |
payload | len বাইট | postcard ফরম্যাটে সিরিয়ালাইজড openraft টাইপ |
সংযোগ-ব্যবস্থাপনার নিয়ম
len-এর সীমা ৬৪ MiB (গ্রহণের সময় যাচাই করা হয়)। সীমা পার হওয়া বা বিকৃত ফ্রেম, অজানাtag, বা Raft প্রক্রিয়াকরণে ত্রুটি — সবই সংযোগ বন্ধ করে সামলানো হয় — ডায়াল করা পক্ষ (openraft) পুনঃসংযোগ করে আবার চেষ্টা করে।- ডায়াল করা পক্ষ প্রতি লক্ষ্য নোডে একটি সংযোগ পুনর্ব্যবহার করে। I/O ত্রুটি হলে, বা রাউন্ড-ট্রিপ মাঝপথে বাতিল হলে, সেই সংযোগ বাতিল করে পরের কলে নতুন করে সংযোগ করা হয় — অর্ধেক-পড়া স্ট্রিম ভুলভাবে সাজানো অবস্থায় পুনর্ব্যবহার হয় না।
পরিভাষা
- দৈর্ঘ্য-প্রিফিক্স (length-prefix) — প্রথমে বডির দৈর্ঘ্য পাঠিয়ে তারপর ঠিক ততটা বাইট পড়ার ফ্রেমিং।
\n-এর মতো কোনো ডিলিমিটারের দরকার নেই, তাই যেকোনো বাইনারি ডেটা হুবহু বহন করা যায়। - সিরিয়ালাইজেশন (serialization) — মেমরির একটি স্ট্রাক্টকে ট্রান্সপোর্ট-উপযোগী বাইট ক্রমে রূপান্তর করা।
- RPC (remote procedure call) — নেটওয়ার্কের ওপার থেকে অন্য সার্ভারের একটি ফাংশন যেন স্থানীয়ভাবেই কল করা হচ্ছে এমনভাবে ডাকা একটি অনুরোধ-সাড়া জোড়া।