প্রকল্প সম্পর্কে

ফিলা একটি মেসেজ ব্রোকার যা বর্তমানে ডিজাইন পর্যায়ে রয়েছে (এখনও কার্যকর কোড নয়)। এটি ঐতিহ্যবাহী FIFO ব্রোকারের একটি সাধারণ সমস্যার সমাধান করে: যখন একাধিক টেন্যান্ট বা ওয়ার্কলোড ধরন একটি কিউ শেয়ার করে, তখন একটি শোরগোলকারী প্রোডিউসার বাকি সবাইকে ক্ষুধার্ত করতে পারে, এবং রেট লিমিটিং সাধারণত কনজিউমারের কাছে ঠেলে দেওয়া হয়, যা কাজ নষ্ট করে এবং লেটেন্সি বাড়ায়। ফিলা শিডিউলিং সিদ্ধান্তগুলি ব্রোকারের ভিতরে নিয়ে আসে। মূল বৈশিষ্ট্যগুলির মধ্যে রয়েছে: - **ডেফিসিট রাউন্ড রবিন (DRR) ফেয়ার শিডিউলিং**: প্রতিটি ফেয়ারনেস কী ওজনের ভিত্তিতে ডেলিভারি ব্যান্ডউইথের আনুপাতিক অংশ পায়, যা টেন্যান্ট ক্ষুধা প্রতিরোধ করে। - **কনজিউমার-ঘোষিত থ্রটলিং**: কনজিউমাররা সাবস্ক্রাইব করার সময় নামযুক্ত রেট লিমিট (যেমন প্রতি-সার্ভিস বা প্রতি-গ্রাহক) ঘোষণা করে। ব্রোকার বার্তাগুলি ধরে রাখে যতক্ষণ না ডেলিভারি সমস্ত ঘোষিত সীমার মধ্যে থাকে, তাই কনজিউমাররা শুধুমাত্র সেই বার্তাগুলি পায় যা তারা আসলে প্রক্রিয়া করতে পারে। - **Lua নিয়ম ইঞ্জিন**: ঐচ্ছিক `on_enqueue` এবং `on_failure` হুক ব্যবহারকারীদের কাস্টম শিডিউলিং নীতি নির্ধারণ করতে দেয়, যেমন পেলোড থেকে ফেয়ারনেস কী বের করা বা রিট্রাই বনাম ডেড-লেটার আচরণ নির্ধারণ করা। - **ডিডুপ্লিকেশন এবং অর্ডারিং**: উভয়ই ডিফল্টভাবে বন্ধ, যথাক্রমে আইডেম্পোটেন্সি কী এবং অর্ডারিং কী এর মাধ্যমে কনফিগারযোগ্য। - **রিট্রাই এবং ডেড-লেটার কিউ**: ব্যর্থ প্রচেষ্টাগুলি কনফিগারযোগ্য রিট্রাই নীতি ট্রিগার করে (ডিফল্ট 3টি প্রচেষ্টা এক্সপোনেনশিয়াল ব্যাকঅফ সহ), নিঃশেষিত বার্তাগুলি প্রতি-কিউ DLQ-তে চলে যায় যা রিড্রাইভ সমর্থন করে। - **লিজ**: ডেলিভার করা বার্তাগুলি ভিজিবিলিটি টাইমআউট সহ লিজ দেওয়া হয়; মেয়াদোত্তীর্ণ লিজ ব্যর্থ প্রচেষ্টা হিসাবে গণনা করা হয়। - **রানটাইম কনফিগারেশন**: একটি লাইভ কী-ভ্যালু স্টোর যা Lua হুক থেকে পাঠযোগ্য, রিস্টার্ট ছাড়াই নীতি পরিবর্তনের অনুমতি দেয়। ক্লায়েন্ট SDK রাস্টে রয়েছে এবং একটি ক্যাপাবিলিটি-ভিত্তিক পারমিশন মডেল ব্যবহার করে যেখানে তিনটি হ্যান্ডেল (প্রোডিউসার, কনজিউমার, অ্যাডমিন) রয়েছে যা ACL পারমিশনগুলিকে প্রতিফলিত করে। ওয়্যার প্রোটোকল একটি হ্যান্ড-রোলড বাইনারি প্রোটোকল (gRPC নয়), ব্যাচ-নেটিভ এবং একটি একক সংযোগের উপর মাল্টিপ্লেক্সড। ক্লায়েন্ট একটি sans-io আর্কিটেকচার অনুসরণ করে, একটি বিশুদ্ধ স্টেট-মেশিন কোরকে একটি ভাষা-নির্দিষ্ট I/O শেল থেকে আলাদা করে ভবিষ্যতের বহু-ভাষা SDK সক্ষম করে। CLI (`fila`) একই SDK-এর উপর একটি পাতলা ক্লায়েন্ট যার কোনো বিশেষাধিকারপ্রাপ্ত অ্যাক্সেস নেই, যা কিউ ম্যানেজমেন্ট, ক্লাস্টার অপারেশন (ড্রেন, মুভ, রিব্যালেন্স), রানটাইম কনফিগ, রিড্রাইভ, এবং auth/ACL প্রশাসন কভার করে। স্টোরেজ একটি অ্যাপেন্ড-অনলি লগ এবং ইন-মেমরি ইনডেক্স দিয়ে শুরু হয়, একটি স্টোরেজ ট্রেইট চুক্তি সহ যা স্বীকৃতির আগে স্থায়িত্ব, পারমাণবিক মিউটেশন গ্রুপ, এবং ক্রমানুসারে রেঞ্জ স্ক্যানের উপর জোর দেয়। ক্লাস্টারিং সমন্বয়ের জন্য একটি মেটা গ্রুপ সহ প্রতি কিউ Raft গ্রুপ ব্যবহার করে। AGPLv3 এর অধীনে লাইসেন্সপ্রাপ্ত।