Ruby on Rails-এ Background Jobs একটি অত্যন্ত গুরুত্বপূর্ণ ফিচার, যা সময়সাপেক্ষ কাজগুলো অ্যাসিঙ্ক্রোনাসভাবে (অর্থাৎ ব্যাকগ্রাউন্ডে) চালানোর জন্য ব্যবহৃত হয়। এটি বিশেষ করে সেই কাজগুলোর জন্য দরকারি, যা ইউজারের সাথে সরাসরি ইন্টারঅ্যাক্ট না করে, তবে সিস্টেমে কিছু সময় নিবে। উদাহরণস্বরূপ, ইমেইল পাঠানো, ডেটা প্রসেসিং, ফাইল আপলোড, বা তৃতীয় পক্ষের API কল করা ইত্যাদি কাজ।
Active Job হল Rails এর একটি অ্যাবস্ট্রাকশন লেয়ার যা বিভিন্ন ব্যাকগ্রাউন্ড জব প্রসেসিং সিস্টেমের সাথে ইন্টিগ্রেট করার জন্য ব্যবহৃত হয়। এটি একটি সাধারণ API প্রদান করে, যাতে আপনি যেকোনো ব্যাকগ্রাউন্ড জব প্রসেসর ব্যবহার করতে পারেন যেমন Sidekiq, Resque, Delayed Job ইত্যাদি।
Background Jobs কী?
Background Jobs হল সেই কাজগুলো যা ইউজার ইন্টারফেসের বাইরে, ব্যাকগ্রাউন্ডে চলে, যাতে প্রধান অ্যাপ্লিকেশন বা ইউজার ইন্টারফেসে কোনো বিলম্ব না হয়। যেমন:
- ইমেইল পাঠানো
- রিপোর্ট জেনারেট করা
- ডেটাবেসের বড় কাজ
- ফাইল প্রসেসিং
এই ধরনের কাজগুলো সাধারণত Time-consuming হয় এবং এগুলো ইউজারের অভিজ্ঞতা ক্ষুন্ন না করেই ব্যাকগ্রাউন্ডে সম্পন্ন করা উচিত।
Active Job: Rails এর ব্যাকগ্রাউন্ড জব হ্যান্ডলিং
Active Job হল Rails এর একটি ফিচার যা ব্যাকগ্রাউন্ড জব প্রসেসিংয়ের জন্য একটি সাধারণ API প্রদান করে। এটি আপনাকে বিভিন্ন ব্যাকগ্রাউন্ড জব প্রসেসিং সিস্টেম যেমন Sidekiq, Resque, Delayed Job ইত্যাদি ব্যবহার করার সুবিধা দেয়। Active Job সহজেই ব্যাকগ্রাউন্ড টাস্ক এবং তাদের রিটার্ন ভ্যালু হ্যান্ডল করতে সাহায্য করে।
Active Job এর ব্যবহার
Active Job Class তৈরি করা
প্রথমে, আপনাকে একটি Active Job ক্লাস তৈরি করতে হবে যা নির্দিষ্ট কাজটি করবে। উদাহরণস্বরূপ, যদি আপনি একটি ইমেইল পাঠাতে চান, তাহলে আপনাকে একটি জব তৈরি করতে হবে।
rails generate job send_welcome_emailএটি
app/jobs/send_welcome_email_job.rbফাইল তৈরি করবে।Job Class এর কোড লেখা
এরপর, আপনি আপনার জব ক্লাসের মধ্যে যেই কাজটি করতে চান তা ডিফাইন করবেন। যেমন, ইমেইল পাঠানো:
# app/jobs/send_welcome_email_job.rb class SendWelcomeEmailJob < ApplicationJob queue_as :default def perform(user) # ইমেইল পাঠানোর কোড UserMailer.welcome_email(user).deliver_later end endএখানে,
performমেথডটি ইমেইল পাঠানোর কাজটি সম্পন্ন করবে।deliver_laterমেথডটি ইমেইল পাঠানোকে ব্যাকগ্রাউন্ডে পরিচালনা করে, যাতে ইউজার ইন্টারফেস ব্লক না হয়।Job Enqueue করা
এখন, আপনার যেকোনো অংশ থেকে এই জবটিকে enqueue করতে পারেন। উদাহরণস্বরূপ, যখন কোনো নতুন ইউজার সাইন আপ করবে তখন এই জবটি চলতে পারে:
# app/controllers/users_controller.rb def create @user = User.new(user_params) if @user.save SendWelcomeEmailJob.perform_later(@user) # এই লাইনটি ব্যাকগ্রাউন্ড জব enqueue করবে redirect_to @user, notice: 'User created successfully.' else render :new end endএখানে,
perform_laterমেথডটি ব্যাকগ্রাউন্ডে জবটি রান করতে নির্দেশ দেয়। এটি সম্পন্ন হওয়ার পর ইউজারের কাছে স্বাগত ইমেইল পাঠানো হবে, তবে এই কাজটি মূল থ্রেডে হয়ে যাবে না।
Background Job Queueing Systems
Active Job একাধিক ব্যাকগ্রাউন্ড জব প্রসেসিং সিস্টেমের সাথে কাজ করতে পারে। এই সিস্টেমগুলোকে Queueing Systems বলা হয়, এবং Rails-এ বেশ কিছু জনপ্রিয় ব্যাকগ্রাউন্ড জব প্রসেসিং সিস্টেম রয়েছে:
Sidekiq
- Sidekiq হল একটি উচ্চ-পারফর্মেন্স ব্যাকগ্রাউন্ড জব প্রসেসর যা Redis ব্যবহার করে। এটি বহুবিধ জব সমান্তরালভাবে (concurrently) সম্পন্ন করতে সক্ষম।
ইনস্টল করতে:
gem 'sidekiq'পরে, আপনি
config/application.rbফাইলে Sidekiq কে ডিফাইন করতে পারেন:config.active_job.queue_adapter = :sidekiqResque
- Resque একটি ব্যাকগ্রাউন্ড জব প্রসেসর যা Redis ব্যবহার করে। এটি ক্লাস্টার ম্যানেজমেন্ট এবং পুনরায় চেষ্টা করার (retry) সুবিধা প্রদান করে।
ইনস্টল করতে:
gem 'resque'তারপর, Active Job এর ডিফল্ট অ্যাডাপ্টার হিসেবে এটি ব্যবহার করতে:
config.active_job.queue_adapter = :resqueDelayed Job
- Delayed Job হল একটি পুরোনো কিন্তু শক্তিশালী ব্যাকগ্রাউন্ড জব প্রসেসর যা ডাটাবেসে কাজের কিউ তৈরি করে।
ইনস্টল করতে:
gem 'delayed_job_active_record'এবং কনফিগার করতে:
config.active_job.queue_adapter = :delayed_job
Job Queues এবং Priorities
একটি ব্যাকগ্রাউন্ড জব সাধারণত queue-এ রাখা হয়, এবং বিভিন্ন জব একে অপরের সাথে সিঙ্ক্রোনাইজ হতে পারে। Rails এর Active Job ফিচারটি আপনাকে বিভিন্ন queues এবং priorities ব্যবহার করতে সাহায্য করে।
Queueing System Configuration
যতগুলি Queue আপনি ব্যবহার করতে চান তা কনফিগার করার জন্য, Active Job আপনাকে queue_as মেথড প্রদান করে।
class SendWelcomeEmailJob < ApplicationJob
queue_as :email_queue
def perform(user)
UserMailer.welcome_email(user).deliver_later
end
end
এটি email_queue নামক একটি Queue তৈরি করবে যেখানে শুধুমাত্র ইমেইল সম্পর্কিত জবগুলো থাকবে।
Multiple Queues Example
কিছু ব্যাকগ্রাউন্ড জব গুরুত্বপূর্ণ হতে পারে, এবং তাদেরকে দ্রুত প্রসেস করা উচিত। সেক্ষেত্রে আপনি জবগুলোকে বিভিন্ন কিউতে রাখতে পারেন।
class SendWelcomeEmailJob < ApplicationJob
queue_as :email
def perform(user)
UserMailer.welcome_email(user).deliver_later
end
end
class GenerateReportJob < ApplicationJob
queue_as :default
def perform(report)
Report.generate(report)
end
end
এখানে, SendWelcomeEmailJob ফাইলটি email কিউতে এবং GenerateReportJob ফাইলটি default কিউতে যাবে।
সারমর্ম
Active Job হল Rails এর একটি শক্তিশালী ফিচার যা ব্যাকগ্রাউন্ড জব প্রসেসিং সহজ করে তোলে। আপনি বিভিন্ন ব্যাকগ্রাউন্ড জব প্রসেসিং সিস্টেম (যেমন Sidekiq, Resque, Delayed Job) ব্যবহার করতে পারেন Active Job এর মাধ্যমে। এটি অ্যাসিঙ্ক্রোনাস কাজগুলো যেমন ইমেইল পাঠানো, ডেটা প্রসেসিং, ফাইল আপলোড ইত্যাদি সহজ এবং দ্রুতভাবে পরিচালনা করতে সাহায্য করে। Rails এর queueing system এবং priorities এর মাধ্যমে আপনি বিভিন্ন কিউ এবং জব এর মধ্যে পার্থক্য নির্ধারণ করতে পারেন।
এভাবে, Rails Active Job ব্যাকগ্রাউন্ড জব প্রসেসিং এবং কার্যক্রমের পারফরম্যান্স উন্নত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Background Jobs হল এমন একটি প্রযুক্তি যা আপনাকে সময়সাপেক্ষ এবং শক্তিশালী কাজগুলো ব্যাকগ্রাউন্ডে চালাতে দেয়, যাতে ইউজারের রিকোয়েস্ট প্রসেসিংয়ের সময় বিলম্ব না হয়। Ruby on Rails অ্যাপ্লিকেশনে, যখন কোনও কাজের জন্য দীর্ঘ সময় প্রয়োজন হয় (যেমন ইমেইল পাঠানো, ডেটা প্রসেসিং, ফাইল আপলোডিং বা ভিডিও কনভার্সন), তখন সেই কাজগুলো ব্যাকগ্রাউন্ডে প্রক্রিয়া করা হয়, যাতে ইউজার ইন্টারফেস দ্রুত প্রতিক্রিয়া প্রদান করতে পারে।
Background Jobs কী?
Background Jobs এমন কাজ যা ফ্রন্টএন্ডের সঙ্গে যুক্ত না হয়ে সরাসরি ব্যাকএন্ডে প্রক্রিয়া করা হয়। Rails অ্যাপ্লিকেশনে এগুলো সাধারণত সিস্টেমে আলাদা থ্রেড বা প্রসেসে চলে, এবং ইউজারকে কোনও বিলম্ব অনুভব না করিয়ে সেই কাজ সম্পন্ন হয়।
যখন কোনও ইউজার একটি অনুরোধ পাঠায়, এবং সেই অনুরোধের সাথে একাধিক সময়সাপেক্ষ কাজ যুক্ত থাকে (যেমন ইমেইল পাঠানো বা ডেটা প্রসেসিং), তখন Background Jobs ব্যবহার করা হয় যাতে সেগুলো সরাসরি রিকোয়েস্টের অংশ না হয়ে ব্যাকগ্রাউন্ডে সম্পন্ন হয় এবং ইউজারকে দ্রুত রেসপন্স দেওয়া হয়।
Background Jobs কেন প্রয়োজন?
Rails অ্যাপ্লিকেশনগুলিতে Background Jobs ব্যবহারের অনেক সুবিধা রয়েছে, বিশেষ করে যখন আপনার অ্যাপ্লিকেশনে এমন কিছু কাজ থাকে যেগুলোকে ইউজারের রিকোয়েস্টের অংশ হিসেবে রান করতে দেওয়া যায় না। নিচে কিছু কারণ দেওয়া হলো কেন Background Jobs প্রয়োজন:
১. দীর্ঘ সময়সাপেক্ষ কাজের জন্য
অনেক সময় আপনি এমন কাজ করতে চান যা খুব দীর্ঘ সময় নিতে পারে, যেমন:
- বড় ফাইল আপলোড বা ডাউনলোড
- ইমেইল বা নোটিফিকেশন পাঠানো
- ভিডিও বা ইমেজ প্রসেসিং
- তৃতীয় পক্ষের API কল
এই সমস্ত কাজগুলি ইউজারের রিকোয়েস্টের মধ্যে রাখা হলে, তা সার্ভারের উপর অতিরিক্ত চাপ ফেলতে পারে এবং ইউজারের জন্য বিলম্ব সৃষ্টি করতে পারে। Background Jobs এর মাধ্যমে এসব কাজ ব্যাকগ্রাউন্ডে চালানো যায়, যা ইউজারকে দ্রুত রেসপন্স প্রদান করে।
২. প্রদর্শনীয় পারফরম্যান্স বজায় রাখা
যখন ইউজার একটি রিকোয়েস্ট পাঠায়, তখন সেই রিকোয়েস্টের সাথে কোনো দীর্ঘ প্রক্রিয়া জড়িত না রেখে, সেগুলো ব্যাকগ্রাউন্ডে সরিয়ে দেওয়ার মাধ্যমে অ্যাপ্লিকেশনের পারফরম্যান্স আরও উন্নত করা যায়। এটি আপনার অ্যাপ্লিকেশনকে আরও দ্রুত প্রতিক্রিয়া দিতে সহায়তা করে।
৩. আনুগ্রহিক কাজ বা সাইকেল কাজগুলো
কিছু কাজ নিয়মিত বা আনুগ্রহিকভাবে সম্পন্ন করা প্রয়োজন, যেমন:
- দৈনিক রিপোর্ট জেনারেশন
- মেইলিং লিস্ট আপডেট
- ডেটাবেস পরিষ্কার করা বা পুরনো রেকর্ড মুছে ফেলা
এই সমস্ত কাজ Background Jobs ব্যবহার করে নির্দিষ্ট সময় অন্তর চালানো যেতে পারে, যা সার্ভারে অতিরিক্ত লোড সৃষ্টি না করে কার্যকরীভাবে পরিচালিত হয়।
৪. পূর্ণ সমান্তরাল প্রক্রিয়া (Parallel Processing)
অনেক সময় একাধিক কাজ একসঙ্গে সম্পন্ন করতে হয়। ব্যাকগ্রাউন্ড জবের মাধ্যমে একাধিক কাজকে সমান্তরালে চালানো যায়, ফলে সার্ভারের কাজে বিলম্ব হয় না এবং ইউজার দ্রুত ফলাফল পায়।
Rails-এ Background Jobs ব্যবহারের পদ্ধতি
Ruby on Rails-এ Background Jobs ব্যবহারের জন্য বেশ কিছু জনপ্রিয় লাইব্রেরি রয়েছে। এর মধ্যে সবচেয়ে বেশি ব্যবহৃত লাইব্রেরি হলো Sidekiq, Resque, এবং Delayed Job।
১. Sidekiq:
Sidekiq একটি জনপ্রিয় এবং উচ্চ-কার্যক্ষমতাসম্পন্ন Background Job queueing সিস্টেম। এটি Redis ব্যবহার করে কাজ করে এবং সমান্তরালভাবে কাজ সম্পন্ন করার জন্য খুবই উপযোগী। Sidekiq-এর মাধ্যমে আপনি বিভিন্ন ব্যাকগ্রাউন্ড কাজ যেমন ইমেইল পাঠানো, ডেটা প্রসেসিং, বা রিপোর্ট জেনারেশন সম্পন্ন করতে পারেন।
Sidekiq ইনস্টল এবং ব্যবহার করতে:
Gemfile-এ Sidekiq যোগ করুন:
gem 'sidekiq'Bundle ইনস্টল করুন:
bundle install- Redis ইনস্টল করুন (যেহেতু Sidekiq Redis ব্যবহার করে): Redis সার্ভার ইনস্টল এবং চালু করুন।
Sidekiq কনফিগার করুন:
# config/initializers/sidekiq.rb require 'sidekiq'ব্যাকগ্রাউন্ড জব তৈরি করুন:
rails generate sidekiq:worker MyWorkerকন্ট্রোলার বা অন্য কোথাও জব কল করুন:
MyWorker.perform_async(param1, param2)Sidekiq রান করতে:
bundle exec sidekiq
২. Resque:
Resque একটি আরেকটি জনপ্রিয় Background Job Queueing সিস্টেম। এটি Redis ব্যবহার করে এবং প্রক্রিয়া পারফরম্যান্স বজায় রাখতে সাহায্য করে।
Resque ব্যবহার করতে:
Gemfile-এ Resque যোগ করুন:
gem 'resque'Bundle ইনস্টল করুন:
bundle install- Resque ইনস্টল এবং কনফিগার করুন।
- একটি নতুন জব তৈরি করুন এবং অ্যাসিঙ্ক্রোনাসভাবে তা রান করুন।
৩. Delayed Job:
Delayed Job একটি সিম্পল এবং সহজ টুল যা Rails অ্যাপ্লিকেশনে ব্যাকগ্রাউন্ড কাজের জন্য ব্যবহৃত হয়। এটি ডাটাবেস ব্যাকিং ব্যবহার করে এবং ছোট অ্যাপ্লিকেশন বা খুব বড় জব গুলির জন্য উপযুক্ত।
সারমর্ম
Background Jobs Rails অ্যাপ্লিকেশনের পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। যখন আপনার অ্যাপ্লিকেশন এমন কাজ সম্পন্ন করতে চায় যা সময়সাপেক্ষ বা ভারী, তখন সেই কাজগুলো ব্যাকগ্রাউন্ডে রাখলে ইউজারের রিকোয়েস্ট দ্রুত প্রক্রিয়া হতে পারে এবং ইউজার ইন্টারফেস স্নিগ্ধ থাকবে। Rails-এ বিভিন্ন লাইব্রেরি যেমন Sidekiq, Resque, এবং Delayed Job ব্যবহার করে সহজেই Background Jobs বাস্তবায়ন করা যায়।
Ruby on Rails-এ Active Job একটি ফ্রেমওয়ার্ক যা ব্যাকগ্রাউন্ড জব (background jobs) পরিচালনা করতে ব্যবহৃত হয়। এটি অ্যাপ্লিকেশনকে ব্যাকগ্রাউন্ডে দীর্ঘ-running প্রক্রিয়া (যেমন ইমেইল পাঠানো, ফাইল আপলোড, ডেটা প্রসেসিং) সম্পাদন করতে সহায়তা করে, যাতে ব্যবহারকারীর অভিজ্ঞতা বাধাগ্রস্ত না হয় এবং সিস্টেমের পারফরম্যান্স উন্নত থাকে। Active Job ইন্টারফেস Rails-এর মাধ্যমে ব্যাকগ্রাউন্ড কাজ পরিচালনার জন্য একটি ইউনিফাইড এবং সমন্বিত পদ্ধতি প্রদান করে।
Active Job কী?
Active Job হলো Rails-এর একটি ফ্রেমওয়ার্ক যা ব্যাকগ্রাউন্ড জবগুলোকে সহজভাবে তৈরি, পরিচালনা এবং এক্সিকিউট করতে ব্যবহৃত হয়। এটি ব্যাকগ্রাউন্ড জবগুলো বিভিন্ন কিউ সিস্টেম (যেমন Sidekiq, Resque, Delayed Job ইত্যাদি) এর মাধ্যমে পরিচালনা করে। Active Job একটি সাধারণ ইন্টারফেস সরবরাহ করে যা অ্যাপ্লিকেশনটিকে বিভিন্ন কিউ সিস্টেমের সঙ্গে কাজ করার সুযোগ দেয়।
Active Job এর প্রধান বৈশিষ্ট্য
- ইন্টারফেস abstraction: Active Job আপনাকে একক ইন্টারফেসের মাধ্যমে বিভিন্ন কিউ সিস্টেমে কাজ করতে সাহায্য করে। অর্থাৎ, আপনি যদি একসময় Sidekiq ব্যবহার করতে চান এবং পরবর্তীতে Resque এ চলে যান, তবে Active Job-এর মাধ্যমে আপনার কোডে খুব বেশি পরিবর্তন করতে হবে না।
- Retrying jobs: Active Job আপনার ব্যাকগ্রাউন্ড কাজগুলো পুনরায় প্রয়োগ করতে সক্ষম, যদি কোনও কারণে তারা ব্যর্থ হয়।
- Asynchronous execution: ব্যাকগ্রাউন্ড জবগুলো অ্যাসিঙ্ক্রোনাসভাবে সম্পাদিত হয়, যাতে ব্যবহারকারী অ্যাপ্লিকেশনের অন্যান্য ফাংশনগুলো ব্যবহার করতে পারে।
Active Job কনফিগারেশন
Rails এ Active Job ব্যবহারের জন্য আপনাকে একটি কিউ সিস্টেম নির্বাচন করতে হবে, যেটি সাধারণত config/application.rb অথবা পরিবেশ কনফিগারেশনে (config/environments/production.rb, config/environments/development.rb) কনফিগার করা হয়।
উদাহরণস্বরূপ:
- Sidekiq ব্যবহার করার জন্য কনফিগারেশন:
config.active_job.queue_adapter = :sidekiq
- Resque ব্যবহার করার জন্য কনফিগারেশন:
config.active_job.queue_adapter = :resque
এটি নিশ্চিত করবে যে Active Job সিস্টেমটি Sidekiq বা Resque কিউ সিস্টেমের মাধ্যমে কাজ করবে।
Active Job এর মাধ্যমে ব্যাকগ্রাউন্ড জব তৈরি
1. Job তৈরি করা
প্রথমে আপনাকে একটি Job তৈরি করতে হবে, যা ব্যাকগ্রাউন্ডে এক্সিকিউট হবে। Rails-এ Job তৈরি করতে rails generate job কমান্ড ব্যবহার করা হয়।
rails generate job SendWelcomeEmail
এটি app/jobs/send_welcome_email_job.rb ফাইল তৈরি করবে, যেখানে আপনি ব্যাকগ্রাউন্ড কাজের লজিক রাখতে পারবেন।
send_welcome_email_job.rb ফাইলের একটি উদাহরণ:
class SendWelcomeEmailJob < ApplicationJob
queue_as :default
def perform(user)
# এখানে ব্যাকগ্রাউন্ডে ইমেইল পাঠানোর কোড থাকবে
UserMailer.welcome_email(user).deliver_later
end
end
এখানে, perform মেথডটি ব্যাকগ্রাউন্ডে চালানো হবে এবং এটি একটি user অবজেক্ট গ্রহণ করবে। এরপর এটি UserMailer ব্যবহার করে ইমেইল পাঠাবে।
2. Job কল করা
ব্যাকগ্রাউন্ড জবটি কল করতে, আপনি perform_later মেথড ব্যবহার করতে পারেন। উদাহরণস্বরূপ:
SendWelcomeEmailJob.perform_later(user)
এটি SendWelcomeEmailJob কে ব্যাকগ্রাউন্ডে এক্সিকিউট করার জন্য কিউয়ে রাখবে।
Queue এবং Priority
Rails-এ Active Job কিউ সিস্টেমে কাজ করে, এবং কিউয়ের মধ্যে কাজগুলি একটি নির্দিষ্ট অর্ডারে থাকে। আপনি প্রতিটি কাজের জন্য একটি কিউ সেট করতে পারেন, যাতে কাজগুলি নির্দিষ্ট অর্ডারে প্রসেস করা হয়। যদি না দেয়া থাকে, তবে ডিফল্ট কিউ ব্যবহৃত হবে।
উদাহরণ:
class SendWelcomeEmailJob < ApplicationJob
queue_as :high_priority
def perform(user)
UserMailer.welcome_email(user).deliver_later
end
end
এখানে queue_as :high_priority দ্বারা এই জবটি high_priority কিউতে রাখা হবে, যেটি অন্য কম গুরুত্বপূর্ণ কাজের চেয়ে আগে প্রক্রিয়া হবে।
Job Retry (পুনঃপ্রচেষ্টা)
Active Job স্বয়ংক্রিয়ভাবে ব্যাকগ্রাউন্ড জবগুলো পুনরায় প্রয়োগ (retry) করতে পারে যদি জবটি প্রথমে ব্যর্থ হয়। আপনি কিভাবে এবং কখন পুনরায় প্রয়োগ করতে চান তা কনফিগার করতে পারেন।
উদাহরণ:
class SendWelcomeEmailJob < ApplicationJob
retry_on SomeCustomError, wait: 5.seconds, attempts: 3
def perform(user)
# ব্যাকগ্রাউন্ড কাজের লজিক
end
end
এখানে retry_on মেথডটি নির্দেশ করে যে যদি SomeCustomError ঘটে, তবে ৫ সেকেন্ড পর পুনরায় চেষ্টা করবে এবং সর্বোচ্চ ৩টি চেষ্টা করবে।
Background Job-এর প্রকারভেদ
Rails-এ কিছু সাধারণ ব্যাকগ্রাউন্ড জব সিস্টেম রয়েছে:
- Sidekiq: একটি দ্রুত এবং শক্তিশালী কিউ সিস্টেম, যা Redis ব্যবহার করে। এটি উচ্চ পারফরম্যান্সের জন্য পরিচিত।
- Resque: Redis-ভিত্তিক একটি কিউ সিস্টেম, তবে Sidekiq-এর চেয়ে কিছুটা ধীরগতির হতে পারে।
- Delayed Job: একটি সিম্পল কিউ সিস্টেম, যেটি Active Record ব্যবহারের মাধ্যমে ব্যাকগ্রাউন্ড কাজ পরিচালনা করে।
- Que: একটি আরও উন্নত কিউ সিস্টেম, যা PostgreSQL এর সঙ্গে কাজ করে।
Testing Active Job
Active Job-এর টেস্টিং খুবই সহজ। Rails নিজেই একটি বিশেষ টুল সরবরাহ করে, যা দিয়ে আপনি ব্যাকগ্রাউন্ড জবগুলো টেস্ট করতে পারবেন। উদাহরণস্বরূপ, আপনি নিশ্চিত করতে পারেন যে একটি নির্দিষ্ট জব সঠিকভাবে কিউতে যুক্ত হয়েছে।
উদাহরণ:
require 'test_helper'
class SendWelcomeEmailJobTest < ActiveJob::TestCase
test "should enqueue job" do
assert_enqueued_with(job: SendWelcomeEmailJob) do
SendWelcomeEmailJob.perform_later(users(:one))
end
end
end
এই টেস্টটি নিশ্চিত করবে যে SendWelcomeEmailJob সঠিকভাবে কিউতে যুক্ত হচ্ছে।
সারমর্ম
Active Job একটি অত্যন্ত শক্তিশালী এবং সাধারণ ইন্টারফেস যা Rails অ্যাপ্লিকেশনের ব্যাকগ্রাউন্ড কাজগুলো পরিচালনা করতে সাহায্য করে। এটি বিভিন্ন কিউ সিস্টেমের মধ্যে অ্যাবস্ট্রাকশন সরবরাহ করে, যা ডেভেলপারদের কোডকে আরও সুসংগঠিত এবং মডুলার করে তোলে। Active Job দিয়ে আপনি ব্যাকগ্রাউন্ডে কাজ করতে পারেন, যেমন ইমেইল পাঠানো, ডেটা প্রসেসিং ইত্যাদি, যা অ্যাপ্লিকেশনটির পারফরম্যান্স উন্নত করে এবং ব্যবহারকারীর অভিজ্ঞতা বজায় রাখে।
Background Jobs হলো এমন কাজ যা প্রধান অ্যাপ্লিকেশনের রেসপন্স টাইমের সাথে সম্পর্কিত নয় এবং সেটি ব্যাকগ্রাউন্ডে সম্পন্ন করা হয়। এটি সাধারণত দীর্ঘ-running প্রসেস যেমন ইমেইল পাঠানো, ফাইল আপলোড করা, বা ডেটাবেসে ভারী হিসাব করার জন্য ব্যবহৃত হয়। Ruby on Rails-এ Sidekiq এবং Resque এর মাধ্যমে এই ধরনের কাজকে কার্যকরভাবে পরিচালনা করা যায়।
এখানে আমরা Sidekiq এবং Resque ব্যবহার করে Background Jobs ইমপ্লিমেন্ট করার পদ্ধতি নিয়ে আলোচনা করবো।
Sidekiq কী এবং কেন এটি ব্যবহার করবেন?
Sidekiq হলো একটি জনপ্রিয় background job processing টুল, যা Ruby এবং Rails অ্যাপ্লিকেশনগুলোর জন্য উচ্চ পারফরম্যান্স এবং স্কেলেবল সমাধান প্রদান করে। এটি Redis ব্যবহার করে এবং মাল্টি-থ্রেডিং সাপোর্ট দেয়, যার মাধ্যমে একাধিক কাজ খুব দ্রুত এবং দক্ষতার সাথে সম্পন্ন করা সম্ভব।
Sidekiq এর সুবিধা:
- পারফরম্যান্স: Sidekiq মাল্টি-থ্রেডিং প্রযুক্তি ব্যবহার করে, যা একাধিক জব প্যারালেলভাবে এক্সিকিউট করার সুযোগ দেয়।
- স্কেলেবিলিটি: Redis-এর মাধ্যমে জব কিউ ম্যানেজ করে এবং অ্যাপ্লিকেশন স্কেল করতে সহায়তা করে।
- রিচ ফিচারস: Sidekiq এর কাছে রয়েছে retry mechanisms, error handling, এবং web UI-র মতো অনেক ফিচার।
Sidekiq সেটআপ এবং ইনস্টলেশন
Step 1: sidekiq জেমটি ইনস্টল করা
প্রথমে আপনার Gemfile-এ sidekiq জেমটি যোগ করুন:
gem 'sidekiq'
তারপর bundle install কমান্ড চালান।
Step 2: Redis ইনস্টল করা
Sidekiq Redis ব্যবহার করে কাজ করে, তাই আপনাকে Redis ইনস্টল করতে হবে। Redis ইনস্টল করতে আপনার সিস্টেমে নিচের কমান্ড ব্যবহার করতে পারেন:
MacOS (Homebrew ব্যবহার করে):
brew install redisUbuntu:
sudo apt-get install redis-server
Step 3: Sidekiq Worker তৈরি করা
একটি নতুন Worker ক্লাস তৈরি করুন, যা ব্যাকগ্রাউন্ড জব প্রক্রিয়াকরণ করবে। ধরুন, আপনি ইমেইল পাঠানোর একটি ব্যাকগ্রাউন্ড কাজ করতে চান:
# app/workers/email_worker.rb
class EmailWorker
include Sidekiq::Worker
def perform(user_id)
user = User.find(user_id)
UserMailer.welcome_email(user).deliver_now
end
end
এখানে, perform মেথডে আপনার কার্যকর কাজটি থাকবে, যেমন ইমেইল পাঠানো।
Step 4: Worker রান করা
ব্যাকগ্রাউন্ডে জব রান করার জন্য, আপনি EmailWorker.perform_async(user.id) কল করতে পারেন:
EmailWorker.perform_async(user.id)
এটি ব্যাকগ্রাউন্ডে কাজ করবে, অর্থাৎ রিলিজ পেজ লোডের সময় ব্যবহারকারী ইমেইল পাঠানোর জন্য অপেক্ষা করবে না।
Step 5: Sidekiq সার্ভার চালানো
Sidekiq চালাতে, নিচের কমান্ডটি রান করুন:
bundle exec sidekiq
এটি Sidekiq এর সার্ভার চালু করবে এবং ব্যাকগ্রাউন্ড জবগুলো প্রক্রিয়া করা শুরু করবে।
Resque কী এবং কেন এটি ব্যবহার করবেন?
Resque হলো আরেকটি জনপ্রিয় background job processing লাইব্রেরি যা Ruby অ্যাপ্লিকেশনের জন্য তৈরি। Resque Redis ব্যবহার করে এবং এটি মূলত queued jobs এর মাধ্যমে কাজ করে।
Resque এর সুবিধা:
- Redis-backed: Resque Redis ব্যবহার করে কিউ ম্যানেজ করে।
- অল্প কমপ্লেক্সিটি: সোজা সাপ্টা কোডিং ইন্টারফেস এবং সহজ ইনস্টলেশন।
- প্লাগইন সাপোর্ট: Resque বিভিন্ন প্লাগইন সাপোর্ট করে, যেমন Resque Scheduler।
Resque সেটআপ এবং ইনস্টলেশন
Step 1: resque জেমটি ইনস্টল করা
প্রথমে Gemfile-এ resque জেমটি যোগ করুন:
gem 'resque'
তারপর bundle install চালান।
Step 2: Redis ইনস্টল করা
Resque Redis ব্যবহার করে কাজ করে, তাই Redis ইনস্টল করতে হবে, যেমন উপরে Sidekiq সেটআপে করা হয়েছে।
Step 3: Resque Worker তৈরি করা
Resque-তে একটি Worker ক্লাস তৈরি করতে হয়, যা ব্যাকগ্রাউন্ড জব পরিচালনা করবে। উদাহরণস্বরূপ, ইমেইল পাঠানোর জন্য:
# app/workers/email_worker.rb
class EmailWorker
@queue = :email_queue
def self.perform(user_id)
user = User.find(user_id)
UserMailer.welcome_email(user).deliver_now
end
end
এখানে, @queue ব্যবহার করে কিউ নির্ধারণ করা হচ্ছে এবং perform মেথডে কাজটি প্রক্রিয়া করা হচ্ছে।
Step 4: Worker রান করা
Resque তে ব্যাকগ্রাউন্ড কাজ করার জন্য, আপনি Resque.enqueue মেথড ব্যবহার করবেন:
Resque.enqueue(EmailWorker, user.id)
Step 5: Resque সার্ভার চালানো
Resque সার্ভার চালানোর জন্য, নিচের কমান্ডটি ব্যবহার করুন:
QUEUE=email_queue rake resque:work
এটি Resque সার্ভার চালু করবে এবং কিউতে থাকা জবগুলো প্রক্রিয়া করবে।
Sidekiq বনাম Resque
- পারফরম্যান্স: Sidekiq মাল্টি-থ্রেডিং ব্যবহার করে, তাই এটি Resque-এর তুলনায় দ্রুত এবং বেশি স্কেলেবল। তবে, Resque আরও সহজ এবং সরল।
- সাপোর্ট এবং কমিউনিটি: Sidekiq এর কমিউনিটি বেশি অ্যাকটিভ এবং এটির জন্য আরও উন্নত ফিচার রয়েছে। Resque তুলনায় কিছুটা পুরানো কিন্তু এখনও ব্যাপকভাবে ব্যবহৃত হয়।
- এডভান্সড ফিচারস: Sidekiq এর সাথে আপনি আরও অনেক ফিচার পাবেন, যেমন retry mechanism, cron jobs, etc., যা Resque-তে কিছুটা সীমিত।
সারমর্ম
Background Jobs হলো দীর্ঘ-running কাজ যেগুলো রেলস অ্যাপ্লিকেশনটির রেসপন্স টাইমে বাধা সৃষ্টি না করে ব্যাকগ্রাউন্ডে কার্যকর করা হয়। Sidekiq এবং Resque দুটি জনপ্রিয় টুল, যা এই ধরনের কাজ পরিচালনা করতে ব্যবহৃত হয়। Sidekiq উচ্চ পারফরম্যান্স এবং স্কেলেবিলিটি প্রদান করে, যেখানে Resque সহজ এবং সরল একটি সমাধান। উভয়ই Redis ব্যবহার করে এবং তাদের নিজস্ব কাজের জন্য বিশেষভাবে কার্যকর।
Cron Jobs এবং Task Scheduling হল সিস্টেমে নির্দিষ্ট সময় বা সময়ে নির্দিষ্ট কাজ চালানোর জন্য ব্যবহৃত পদ্ধতি। Rails অ্যাপ্লিকেশনগুলিতে নিয়মিত কাজ (যেমন ডেটাবেস ব্যাকআপ, ডেটা পরিষ্কারকরণ, ইমেইল পাঠানো ইত্যাদি) পরিচালনা করার জন্য ক্রন জব এবং টাস্ক স্কেজ্যুলিং ব্যবহৃত হয়। Ruby on Rails এ cron jobs এবং task scheduling ব্যবস্থাপনা করার জন্য কিছু জনপ্রিয় টুল এবং পদ্ধতি রয়েছে, যার মধ্যে Whenever gem এবং Active Job অন্যতম।
Cron Jobs: পরিচিতি
Cron একটি লিনাক্স/ইউনিক্স ভিত্তিক কমান্ড লাইন টুল যা নির্দিষ্ট সময়ে নির্দিষ্ট কাজ চালানোর জন্য ব্যবহৃত হয়। এটি সাধারণত সিস্টেম অ্যাডমিনিস্ট্রেটররা ব্যবহার করে থাকে, তবে Rails অ্যাপ্লিকেশনেও এটি ব্যবহার করা যায় স্বয়ংক্রিয়ভাবে কাজ পরিচালনার জন্য।
Cron Jobs সাধারণত রুট ফাইল /etc/crontab বা ইউজার লেভেলে crontab -e এর মাধ্যমে কনফিগার করা হয়। আপনি নির্দিষ্ট সময় এবং দিনের জন্য কাজগুলো সময় নির্ধারণ করতে পারেন।
Rails-এ Cron Jobs কনফিগারেশন
Rails এ Whenever gem ব্যবহার করে ক্রন জবের জন্য কনফিগারেশন করা হয়। Whenever gem আপনাকে কোডে ক্রন জবগুলি কনফিগার করতে দেয়, যা পরে crontab ফাইলে ম্যানুয়ালি যুক্ত করা হয়।
Whenever gem ইনস্টলেশন
১. প্রথমে Gemfile এ whenever যোগ করুন:
gem 'whenever', require: false
২. এরপর, bundle install রান করুন:
bundle install
Whenever কনফিগারেশন ফাইল তৈরি
Whenever gem একটি বিশেষ ফাইল schedule.rb তৈরি করে যেখানে আপনি আপনার ক্রন জব কনফিগার করবেন।
rails generate whenever:install
এটি config/schedule.rb ফাইল তৈরি করবে। এখানে আপনি নিয়মিত কাজগুলোর স্কেজ্যুল করতে পারেন।
Cron Job কনফিগারেশন
config/schedule.rb ফাইলে আপনার ক্রন জবগুলি কনফিগার করতে পারেন। উদাহরণস্বরূপ, যদি আপনি প্রতিদিন রাতে ১২টায় একটি রিসোর্স পরিষ্কার করতে চান:
every 1.day, at: '12:00 am' do
runner "Model.cleanup_old_data"
end
এখানে, every 1.day দ্বারা প্রতিদিন কাজটি চলবে এবং runner দিয়ে Rails মডেল বা মেথড চালানো হবে।
Cron Jobs এর প্রসারণ
আপনি আরও জটিল কাজের জন্য যেমন:
- ডেলিভারিবল ইমেইল পাঠানো
- ডেটা ব্যাকআপ করা
- ডেটাবেস পরিষ্কার করা
এই সকল কাজ schedule করতে পারেন।
every 1.week do
runner "Backup.perform_daily_backup"
end
Whenever এবং Cron Job রিফ্রেশ করা
ক্রন জবগুলি শিডিউল করার জন্য:
whenever --update-crontab
এটি আপনার schedule.rb ফাইলের কনফিগারেশন অনুযায়ী স্বয়ংক্রিয়ভাবে crontab আপডেট করে দিবে।
Active Job: Task Scheduling এবং ব্যাকগ্রাউন্ড টাস্ক
Active Job হল Rails এর একটি বিল্ট-ইন টুল, যা ব্যাকগ্রাউন্ড টাস্ক পরিচালনা এবং স্কেজ্যুলিংয়ের জন্য ব্যবহৃত হয়। Active Job বিভিন্ন ব্যাকগ্রাউন্ড টাস্ক প্রসেসর (যেমন Sidekiq, Resque, Delayed Job) এর সাথে কাজ করতে পারে।
Active Job সেটআপ
১. প্রথমে Gemfile এ সঠিক ব্যাকগ্রাউন্ড জব প্রসেসর যোগ করুন। যেমন Sidekiq:
gem 'sidekiq'
এবং তারপর bundle install রান করুন।
২. এর পর, Active Job ক্লাস তৈরি করুন:
rails generate job CleanupOldData
এটি app/jobs ফোল্ডারে একটি cleanup_old_data_job.rb ফাইল তৈরি করবে, যেখানে আপনি আপনার ব্যাকগ্রাউন্ড কাজের লজিক লিখবেন।
class CleanupOldDataJob < ApplicationJob
queue_as :default
def perform(*args)
# পুরনো ডেটা পরিষ্কার করার কাজ
Model.cleanup_old_data
end
end
Job শিডিউল করা
Active Job সাধারণত ম্যানুয়ালি কল করতে হয় অথবা আপনি একে কোনো ব্যাকগ্রাউন্ড প্রসেসর (যেমন Sidekiq) এর মাধ্যমে শিডিউল করতে পারেন। উদাহরণস্বরূপ:
CleanupOldDataJob.set(wait: 5.minutes).perform_later
এটি ৫ মিনিট পরে CleanupOldDataJob চালাবে।
Job এবং Cron Job একত্রিত করা
যদি আপনি Active Job এবং Cron Job একত্রে ব্যবহার করতে চান, তবে আপনি Whenever gem-এর মাধ্যমে Active Job কে Cron Job হিসেবে সেটআপ করতে পারেন।
every 1.day, at: '12:00 am' do
runner "CleanupOldDataJob.perform_later"
end
এখানে, CleanupOldDataJob.perform_later ব্যাকগ্রাউন্ডে কাজ করবে এবং ক্রন জব এর মাধ্যমে প্রতিদিন রাত ১২টায় এটি চালানো হবে।
Task Scheduling এর জন্য অন্যান্য টুলস
Rails এ Task Scheduling এবং Cron Job সেটআপের জন্য কিছু অন্যান্য জনপ্রিয় টুলস ব্যবহার করা যেতে পারে, যেমন:
- Sidekiq: এটি একটি শক্তিশালী এবং জনপ্রিয় ব্যাকগ্রাউন্ড জব প্রসেসর যা Redis ব্যবহার করে। এটি দ্রুত এবং স্কেলেবল।
- Resque: এটি আরেকটি ব্যাকগ্রাউন্ড জব প্রসেসর, তবে এটি তুলনামূলকভাবে Sidekiq এর চেয়ে কিছুটা ধীর।
- Delayed Job: এটি আরও সহজ এবং নির্ভরযোগ্য, তবে এটি উচ্চ-লোড সিস্টেমের জন্য কম উপযোগী।
সারমর্ম
Cron Jobs এবং Task Scheduling Ruby on Rails অ্যাপ্লিকেশনগুলির জন্য গুরুত্বপূর্ণ পদ্ধতি, যা নির্দিষ্ট সময়ে নিয়মিত কাজ পরিচালনা করে। Whenever gem এর মাধ্যমে Rails অ্যাপ্লিকেশনে সহজে Cron Jobs কনফিগার করা যায়, এবং Active Job ব্যাকগ্রাউন্ড কাজ এবং টাস্ক স্কেজ্যুলিংয়ের জন্য একটি কার্যকর পদ্ধতি সরবরাহ করে। আপনি আপনার অ্যাপ্লিকেশনে প্রয়োজনীয় টাস্ক বা কাজ স্কেজ্যুল করতে এবং পরিচালনা করতে এই দুটি পদ্ধতি ব্যবহার করতে পারেন।
Read more