Sidekiq রুবি ডেভেলপারদের ফাস্ট এবং রেসপন্সিভ ওয়েব অ্যাপ্লিকেশন মেইনটেইন করতে সাহায্য করে টাইম-কনসামিং টাস্কগুলো ব্যাকগ্রাউন্ডে সরিয়ে।
মাল্টিথ্রেডিং এর কোরে থাকায়, Sidekiq একসাথে অনেক জব প্রসেস করতে পারে। এটি Sidekiqকে রুবি বা রেলস অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ অংশ করে তোলে যেগুলো হেভি লোড হ্যান্ডেল করে বা ইমেইল পাঠানো বা ফাইল প্রসেসিং-এর মত টাস্ক করে। ব্যাকগ্রাউন্ড প্রসেসিং ছাড়া, লং-রানিং টাস্ক আপনার অ্যাপ্লিকেশনের মেইন থ্রেড ব্লক করবে, ফলস্বরূপ স্লো রেসপন্স টাইম এবং খারাপ ইউজার এক্সপেরিয়েন্স।
এই পোস্টে, আমরা Sidekiq কার্যকরভাবে ব্যবহার করে ব্যাকগ্রাউন্ড জব ম্যানেজ ও প্রসেস করার ওপর ফোকাস করব।
চলুন শুরু করি!
Sidekiq-এর বেসিকস
সারসংক্ষেপে, Sidekiq রুবির জন্য একটি ফুল-ফিচার্ড ব্যাকগ্রাউন্ড প্রসেসিং ফ্রেমওয়ার্ক। এটি আপনাকে ব্যাকগ্রাউন্ড টাস্ক কনকারেন্টলি রান করতে দেয়, যা রেসপন্সিভ এবং নির্ভরযোগ্য ওয়েব অ্যাপ্লিকেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ। চাহে ইমেইল পাঠানো হোক, ইমেজ রিসাইজ করা হোক, বা CSV ফাইল প্রসেস করা হোক—টাইম-কনসামিং টাস্ক Sidekiq ব্যবহার করে পশ্চাদপটে করা যায়।
Sidekiq-এর আর্কিটেকচারヘবিলি মাল্টিথ্রেডিং এবং "ওয়ার্কার্স" কনসেপ্টের ওপর নির্ভর করে। যেহেতু Sidekiq ৬.৩.০, Sidekiq::Worker মডিউল ডিপ্রিকেটেড হয়েছে Sidekiq::Job-এর পক্ষে কারণ "ওয়ার্কার" টার্ম কনফিউজিং হতে পারে:
আপনি কি একটি প্রসেসের কথা বলছেন? একটি থ্রেড? একটি জব টাইপ? আমি ডেভেলপারদের ওয়ার্কার টার্ম ব্যবহার বন্ধ করার জন্য উৎসাহিত করছি।
Redis, একটি লাইটনিং-ফাস্ট ইন-মেমরি ডাটাবেস, এখানে অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে, এই ব্যাকগ্রাউন্ড জবগুলো স্টোর করার কিউ সিস্টেম হিসেবে কাজ করে।
নোট: Sidekiq Redis-র ওপর নির্ভর করে স্টোরেজের জন্য, কিন্তু এই আর্টিকেলে আমরা Redis কনফিগারেশন এবং ব্যবহারের ডিটেইলসে যাব না।
রেলসের জন্য Sidekiq ইনস্টলেশন এবং সেটআপ
শুরুতে, আপনার রুবি ভার্সন ২.৫ বা তার পরে এবং Redis সার্ভার ভার্সন ৪ বা তার পরে থাকতে হবে।
এখন আপনি Sidekiq রুবি জেম ইনস্টল করতে প্রস্তুত।
আপনার অ্যাপ্লিকেশনের Gemfile-এ Sidekiq যোগ করুন:
এরপর, আপনার প্রজেক্টের ডিরেক্টরিতে ইনস্টল করুন:
এখন Sidekiq ইনস্টল হয়ে গেলে, আপনাকে এটাকে কনফিগার করতে হবে। একটি রেলস অ্যাপ্লিকেশনে, আপনি Sidekiq কনফিগার করেন আপনার ActiveJob অ্যাডাপ্টার হিসেবে। config/application.rb খুলুন এবং অ্যাপ্লিকেশন ক্লাস ডেফিনিশনের ভিতরে নিচের লাইনটি যোগ করুন:
আপনি আরও Sidekiq কনফিগার করতে পারেন একটি Sidekiq ইনিশিয়ালাইজার তৈরি করে যাতে একটি Redis ইনস্ট্যান্সে পয়েন্ট করে। এটি রেলসে একটি স্পেশাল স্ক্রিপ্ট যা আপনার অ্যাপ্লিকেশন স্টার্ট হলে রান করে।
config/initializers-এ, sidekiq.rb নামে একটি ফাইল তৈরি করুন। এই ফাইলের ভিতরে, আপনি বিভিন্ন Sidekiq কনফিগারেশন স্পেসিফাই করতে পারেন। উদাহরণস্বরূপ:
এই কনফিগারেশন Sidekiq-কে একটি লোকাল Redis সার্ভারে কানেক্ট করতে বলে। অবশ্য, প্রোডাকশন এনভায়রনমেন্টে, আপনি লোকাল URL-এর بجায় আপনার একচুয়াল Redis সার্ভারের URL দেবেন (এটি একটি এনভায়রনমেন্ট ভেরিয়েবলের জন্য একটি চমৎকার জায়গা)।
এটাই! Sidekiq ইনস্টল ও কনফিগার হয়ে গেলে, আপনি এখন আপনার রেলস অ্যাপ্লিকেশনের ব্যাকগ্রাউন্ডে জব তৈরি ও প্রসেস করা শুরু করতে পারেন।
একটি Sidekiq জব সেটআপ করা
এখানে একটি বেসিক Sidekiq জব সেটআপ ও ইনিশিয়ালাইজ করার পদ্ধতি:
আসলেই একটি জব কিউ করতে, আপনি জব ক্লাসে perform_async মেথড কল করুন, এইভাবে:
এই লাইন ডিফল্ট কিউতে একটি জব অ্যাড করে যা এক্সিকিউট হয় যতক্ষণ না একটি জব উপলব্ধ হয়। আর্গুমেন্টস 'some_name' এবং 42 perform মেথডে পাস হয় SomeNameForAJob এক্সিকিউশনের সময়।
এখান থেকে, Sidekiq ক্লায়েন্ট জবটি Redis-এ একটি কিউতে পুশ করে, এবং Sidekiq সার্ভার সেটা কিউ থেকে পুল করে নেয় যখন সেটা প্রসেস করার জন্য রেডি।
আপনার প্রথম Sidekiq জব তৈরি করা
Sidekiq-এ, জবগুলো জব ক্লাস দিয়ে রিপ্রেজেন্ট করা হয়, এবং সেগুলো যা টাস্ক করতে হবে সেটা perform মেথডে ডিফাইন করা থাকে। চলুন একটি বেসিক Sidekiq জব তৈরি করি:
এই কোড স্নিপেটে, আমরা HelloNameJob ক্লাস তৈরি করেছি। এটি দুটি আর্গুমেন্ট নেয়: name এবং times। পারফর্ম হলে, এটি কনসোলে একটি গ્રিটিং প্রিন্ট করে নির্দিষ্ট সংখ্যক বার। এটি অবশ্য একটি সিম্পল উদাহরণ। রিয়েল-ওয়ার্ল্ড অ্যাপ্লিকেশনে, perform মেথডে যেকোনো কোড থাকতে পারে যা আপনি ব্যাকগ্রাউন্ডে রান করতে চান।
এখন আপনার জব এক্সিকিউট করুন। সিম্পলি ক্লাসে perform_async মেথড কল করুন এবং আপনার perform মেথড যে আর্গুমেন্ট এক্সপেক্ট করে সেগুলো পাস করুন। এখানে কীভাবে আমরা খুব новfeito HelloNameJob শিডিউল করতে পারি:
এটি "Hello, Jeff!" প্রিন্ট করার জন্য পাঁচ বার একটি জব এনকিউ করবে।
আপনি যদি একটি জব নির্দিষ্ট সময়ে পারফর্ম করতে চান, তবে perform_in বা perform_at মেথড ব্যবহার করতে পারেন। উদাহরণস্বরূপ:
এই উদাহরণগুলোতে, 'Meredith' পাঁচ মিনিটে তিনবার তার গ্রিটিং পাবে, আর 'Jeff'-কে দুই দিন অপেক্ষা করতে হবে তার গ্রিটিং দুবার পাওয়ার জন্য।
অ্যাডভান্সড Sidekiq ব্যবহার
Sidekiq শুধু ব্যাকগ্রাউন্ডে কাজ ছেড়ে দেয় না। এটি অ্যাডভান্সড ফিচারও অফার করে যা আপনাকে আপনার জব কনফিগার করতে দেয়, যার মধ্যে জব রিট্রাই এবং জব প্রায়োরিটাইজেশন।
অটোমেটিক জব রিট্রাই
Sidekiq-এর সবচেয়ে পাওয়ারফুল ফিচারগুলোতে একটি হলো অটোমেটিক জব রিট্রাই। ডিফল্টভাবে, যদি একটি জব আনহ্যান্ডেলড এক্সেপশনের কারণে ফেইল হয়, Sidekiq এক্সপোনেনশিয়াল ব্যাকঅফ দিয়ে জবটি রিট্রাই করবে। আপনি আপনার ক্লাসে sidekiq_options স্পেসিফাই করে রিট্রাই সংখ্যা কাস্টোমাইজ করতে পারেন এইভাবে:
এই উদাহরণে, যদি একটি জব ফেইল হয়, Sidekiq দশবার রিট্রাই করবে তারপর গিব আপ করবে।
জব প্রায়োরিটাইজেশন (Job Prioritization)
জব প্রায়োরিটাইজেশন Sidekiq-দ্বারা প্রদান করা আরেকটি অ্যাডভান্সড ফিচার। আপনি আপনার জবগুলো বিভিন্ন কিউতে অ্যাসাইন করে এবং প্রতিটি কিউর প্রায়োরিটি সেট করে আপনার জবের প্রায়োরিটি কন্ট্রোল করতে পারেন। এখানে কীভাবে একটি জব ডিফাইন করার সময় একটি কিউ স্পেসিফাই করতে হয়:
এই উদাহরণে, ThisJob-এর জবগুলো ক্রিটিক্যাল কিউতে রাখা হবে। আপনার Sidekiq সার্ভার স্টার্ট করার সময়, আপনি তখন স্পেসিফাই করতে পারেন কিউগুলো কোন ক্রমে প্রসেস করা উচিত।
এই মাত্র কয়েকটি উদাহরণ কীভাবে Sidekiq-এর অ্যাডভান্সড ফিচারগুলো লিভারেজ করা যায় আপনার ব্যাকগ্রাউন্ড জব প্রসেসিং ফাইন-টিউন করার জন্য। Sidekiq-এ, আপনার কাছে টুলস আছে যাতে আপনার জবগুলো ইফিশিয়েন্টলি, নির্ভরযোগ্যভাবে, এবং আপনার অ্যাপ্লিকেশনের ニডস অনুযায়ী সেরাভাবে প্রসেস হয়।
Sidekiq-এর সাথে মনিটরিং এবং স্কেলিং
Sidekiq স্ট্যান্ডার্ড ফিচার দিয়ে আসে আপনার জব প্রসেসিং ক্যাপাবিলিটি মনিটর ও স্কেল করার জন্য। একটি ওয়েব-ভিত্তিক ড্যাশবোর্ড আপনার জব কিউয়ের রিয়েল-টাইম ভিউ দেয়। আপনি প্রসেসড এবং ফেইলড জবের সংখ্যা দেখতে পারেন, serta কারেন্ট এবং শিডিউলড জবের বিস্তারিত ইনফরমেশন।
Sidekiq ড্যাশবোর্ড ব্যবহার করতে, আপনার রেলস রাউটস ফাইলে এটাকে মাউন্ট করুন। config/routes.rb-এ, যোগ করুন:
এই লাইনগুলো যোগ করার পর, আপনি আপনার সার্ভারে '/sidekiq' নেভিগেট করে ড্যাশবোর্ড এক্সেস করতে পারেন।
AppSignal দিয়ে Sidekiq মনিটরিং
আরো কমপ্রিহেনসিভ মনিটরিং-এর জন্য, Sidekiq অ্যাপ্লিকেশন পারফরম্যান্স মনিটরিং টুলস যেন AppSignal-র সাথে ভালো ইন্টিগ্রেট হয়। AppSignal-এর Sidekiq ড্যাশবোর্ড আপনার Sidekiq জবের বিস্তারিত ইনসাইট দেয়, যার মধ্যে ফেইলড এবং রিট্রাইড জব, জব ডিউরেশন, এবং Redis মেমরি ইউসেজ।

এই টাইপের ইনফরমেশন আপনার অ্যাপ্লিকেশন স্কেল করার সময় বটলनेक আইডেন্টিফাই করার জন্য অমূল্য। এর বাইরে, AppSignal-এর অ্যালার্টস আপনাকে অ্যানোমালি যেন কিউ লেংথের ওপর নজর রাখতে সাহায্য করে, যাতে আপনি জানতে পারেন আপনার কিউগুলো কখন বড় হয়েছে।

রেলসের সাথে আপনার Sidekiq সেটআপে AppSignal ইন্টিগ্রেট করা সিম্পল। AppSignal-এর রুবি জেম Sidekiq সার্ভার মিডলওয়্যারে এক্সট্রা কনফিগারেশন ছাড়া ইনসার্ট হয়। এটি ActiveJob-ওও কাজ করে!
আপনি AppSignal ব্যবহার করতে পারেন এমন একটি Sidekiq অ্যাপ্লিকেশনেও যা রেলসে রান করে না, ডক্সে উল্লিখিত সেটআপ ব্যবহার করে।
একটি Sidekiq ইউজ কেস
Sidekiq-এর দুটি সবচেয়ে কমন ইউজ কেস হলো অ্যাসিঙ্ক্রোনাস ইমেইলিং এবং শিডিউলড রিপোর্ট জেনারেশন। আসুন এই উদাহরণগুলোর একটাকে ঘনিষ্ঠে দেখি।
ইমেইল, বিশেষ করে যেগুলোর বড় অ্যাট্যাচমেন্ট বা অনেক রেসিপিয়েন্ট থাকে, পাঠাতেobic কাজের জন্য সিগনিফিক্যান্ট টাইম নিতে পারে। ইমেইল পাঠানোর কাজ একটি ব্যাকগ্রাউন্ড জবে হ্যান্ডেল করলে, আপনার অ্যাপ্লিকেশন ইউজার রিকোয়েস্ট রেসপন্ড করতে পারবে যতক্ষণ না একটি ইমেইল প্রসেস হচ্ছে।
এখানে একটি রেলস অ্যাপ্লিকেশনে ইমেইল পাঠানোর জন্য একটি Sidekiq জবের সিম্পল উদাহরণ:
এই উদাহরণে, ResetPasswordJob UserMailer ক্লাস ব্যবহার করে একটি ইউজারের কাছে পাসওয়ার্ড রিসেট ইমেইল পাঠায়। একটি ইমেইল পাঠানোর জন্য এনকিউ করতে, আপনি আপনার অ্যাপ্লিকেশনের কোথাও থেকে ResetPasswordJob.perform_async(user_id) কল করবেন।
তবে, একটি টিপিক্যাল রেলস অ্যাপ্লিকেশনে, আপনি প্রায়শই ইমেইল পাঠাতে একটি আলাদা Sidekiq জব তৈরি করার প্রয়োজন নেই। রেলস Action Mailer ফ্রেমওয়ার্ক প্রদান করে, যা ইমেইল পাঠাতে ব্যবহৃত হয় এবং Active Job-এর সাথে ভালো ইন্টিগ্রেট হয় ব্যাকগ্রাউন্ড প্রসেসিং-এর জন্য।
এখানে একটি উদাহরণ কীভাবে Active Job এবং Action Mailer ব্যবহার করে একটি পাসওয়ার্ড রিসেট ইমেইল পাঠানো যায়:
এই উদাহরণে, মেইলারে deliver_later কল করলে ইমেইলটি অটোমেটিক্যালি ব্যাকগ্রাউন্ড জব হিসেবে পাঠাতে এনকিউ হয়। পশ্চাদপটে, Active Job Sidekiq ব্যবহার করে এই জবগুলো ম্যানেজ করে।
কিন্তু আপনি যদি আপনার জবের ওপর আরো কন্ট্রোল চান—যেন, আপনি রিট্রাই বিহেভিয়র বা কিউ প্রায়োরিটাইজেশন কাস্টোমাইজ করতে চান—অথবা আপনি যেসব টাস্ক দিয়ে ডিল করছেন সেগুলো Action Mailer-এর মত সহজে Active Job-এ ইন্টিগ্রেট হয় না, তবে আলাদা Sidekiq জব তৈরি করা উপযুক্ত।
এই ফ্লেক্সিবিলিটি, Sidekiq-এর পারফরম্যান্স এবং ইজ অফ ইউজ দিয়ে মিলে, এটাকে রেলস অ্যাপ্লিকেশনে বিভিন্ন ব্যাকগ্রাউন্ড টাস্ক হ্যান্ডেল করার জন্য একটি মূল্যবান টুল করে তোলে।
শেষ কথা
এই পোস্টে, আমরা Sidekiq-র একটি ইন্ট্রোডাকশন দিয়ে যাচ্ছি, এর বেসিক্স এক্সপ্লোর করছি, ইনস্টলেশন ও সেটআপে ডুব করছি, এবং উপযোগী জব তৈরি ও এক্সিকিউট করছি।
আমরা Sidekiq-এর আরও অ্যাডভান্সড ফিচারগুলোও স্পর্শ করেছি, রিয়েল-ওয়ার্ল্ড ইউজ কেস দেখেছি, এবং রুবি অ্যাপ্লিকেশনের পারফরম্যান্স ও স্কেলেবিলিটি উন্নত করার এর অত্যন্ত গুরুত্বপূর্ণ ভূমিকা আলোচনা করেছি।
এই ইন্ট্রোডাকশন থেকে জ্ঞান অর্জন করে, আপনি এখন আপনার নিজস্ব রেলস অ্যাপ্লিকেশনে Sidekiq আরও কার্যকরভাবে ব্যবহার করার জন্য সজ্জিত।
হ্যাপি কোডিং!
P.S. রুবি ম্যাজিক পোস্টগুলো প্রেস থেকে বের होते সাথে পেতে চাইলে আমাদের রুবি ম্যাজিক নিউজলেটার সাবস্ক্রাইব করুন এবং একটিও পোস্ট মিস করবেন না!