বেশিরভাগ অ্যাপ্লিকেশনের মেইলার, নিয়মিত ক্লিন-আপ, বা অন্য যেকোন সময়সাপেক্ষ অপারেশনের জন্য ব্যাকগ্রাউন্ড জব প্রয়োজন যাতে ব্যবহারকারীর উপস্থিত থাকার প্রয়োজন হয় না।
বেশ কিছু রত্ন রেল জগতে কাজের সারি এবং ব্যাকগ্রাউন্ড প্রসেসিংকে সমর্থন করে — বিলম্বিত চাকরি এবং সিডেকিক দুটি সবচেয়ে জনপ্রিয়।
এই পোস্টে, আমরা বিলম্বিত চাকরি এবং সিডেকিক সম্পর্কে বিস্তারিতভাবে দেখব, এতে তারা কীভাবে একে অপরের বিরুদ্ধে কাজ করে।
চলুন!
বিলম্বিত কাজের একটি দ্রুত ভূমিকা
বিলম্বিত কাজ হল Shopify থেকে একটি সরাসরি নিষ্কাশন এবং সমস্ত ব্যাকগ্রাউন্ড কাজগুলি বজায় রাখতে একটি টেবিল ব্যবহার করে৷ এটি একটি খুব সাধারণ প্যাটার্ন অনুসরণ করে৷ যেকোন রুবি অবজেক্ট যা একটি perform-এ সাড়া দেয় পদ্ধতিটি কাজের টেবিলে সারিবদ্ধ করা যেতে পারে।
এছাড়াও, যদি আপনার বিশেষ কাজের অবজেক্টগুলি বজায় রাখার প্রয়োজন না হয় (যদিও এটি পরীক্ষাযোগ্যতা এবং দীর্ঘস্থায়ী ক্রিয়াকলাপগুলির স্পষ্ট পৃথকীকরণের জন্য অত্যন্ত সুপারিশ করা হয়), এটি আপনাকে .delay.method(params) কল করার অনুমতি দেয় যেকোনো রুবি বস্তুর উপর। এটি ব্যাকগ্রাউন্ডে পদ্ধতিটি প্রক্রিয়া করবে৷
বিলম্বিত কাজ README সমস্ত সাধারণ ব্যবহারের ধরণগুলি ব্যাখ্যা করার জন্য একটি দুর্দান্ত কাজ করে৷
অনেক দল বিলম্বিত কাজ বেছে নেয় কারণ এটি সহজ এবং তাদের ইতিমধ্যে বিদ্যমান ডাটাবেস ব্যবহার করে। তাদের অন্য সম্পদ ব্যয়/রক্ষণাবেক্ষণের প্রয়োজন নেই।
যাইহোক, এটি এখনও আপনার ডাটাবেস টেবিলে স্থান নেবে। আপনার যদি একই সময়ে অনেকগুলি কাজ সারিবদ্ধ থাকে তবে সেগুলিকে মিটমাট করার জন্য আপনার আরও ডিস্কের জায়গার প্রয়োজন হতে পারে৷
Sidekiq-এর একটি দ্রুত ভূমিকা
অন্যদিকে, Sidekiq, সমস্ত কাজের মেটাডেটা বজায় রাখার জন্য রেডিসকে তার ডেটা স্টোর হিসাবে ব্যবহার করে৷ এটি নিয়মিত ডাটাবেস সিস্টেমগুলির তুলনায় অনেক দ্রুত হওয়ার সুস্পষ্ট সুবিধার সাথে আসে যা Delayed Jobs ব্যবহার করে৷ এটি ছাড়াও, প্রতিটি Sidekiq প্রক্রিয়া আরও দ্রুত কাজগুলি প্রক্রিয়া করার জন্য একাধিক থ্রেড তৈরি করে৷
Sidekiq-এ প্রতিটি ব্যাকগ্রাউন্ড কাজের জন্য, আমাদের একটি বিশেষ শ্রেণির প্রয়োজন যাতে রয়েছে Sidekiq::Worker উদ্বেগ এবং perform-এ প্রতিক্রিয়া জানায় পদ্ধতি। কাজটি সারিবদ্ধ করতে, আমাদের perform_async(arg1, arg2) কল করতে হবে আর্গুমেন্ট সহ কর্মীর উপর।
Sidekiq 'শুরু করা' নির্দেশিকা এটি এবং অন্যান্য ব্যবহারের ধরণগুলি ভালভাবে ব্যাখ্যা করে৷
বিলম্বিত চাকরি বা Sidekiq সহ সক্রিয় কাজ ব্যবহার করা
রেল ইতিমধ্যেই শীর্ষ-স্তরের ঘোষণা এবং চাকরি পরিচালনার জন্য একটি পরিপক্ক কাজের কাঠামো সরবরাহ করে। বিলম্বিত চাকরি এবং Sidekiq উভয়ই ActiveJob-এর ইউনিফাইড API-এর মাধ্যমে কাজ চালানো সমর্থন করে। শুধু ApplicationJob থেকে উত্তরাধিকার সূত্রে প্রাপ্ত এবং perform_later কল করুন কনফিগার করা সারিবদ্ধ ব্যাকএন্ডে কাজটি সারিবদ্ধ করতে আপনার কাজের ক্লাসে।
অ্যাক্টিভ জব দিয়ে কাজ চালানোর সুবিধা হল যে আপনার অ্যাপ্লিকেশন কোড ফ্রেমওয়ার্ক অজ্ঞেয়বাদী হয়ে ওঠে এবং বিলম্বিত চাকরি থেকে Sidekiq (বা এর বিপরীতে) পরিবর্তন করা বেশ সহজ হয়ে যায়। ActiveJob::TestHelper এছাড়াও সারিবদ্ধ চাকরির পরীক্ষাকে একটি হাওয়ায় পরিণত করে৷
কিন্তু অ্যাক্টিভ জব দ্বারা প্রদত্ত বিমূর্ততা একটি কার্যক্ষমতা ওভারহেডের সাথেও আসে, কারণ চাকরির ডেটা স্টোরে ঠেলে দেওয়ার আগে এটিকে মোড়ানো হয়৷ Sidekiq দাবি করে যে Redis-এ ঠেলে দেওয়ার সময় ActiveJob প্রায় 2-20x ধীর হয়, ~3x প্রসেসিং ওভারহেড সহ৷
বিলম্বিত চাকরি বনাম Sidekiq
এখন যেহেতু আমরা বিলম্বিত চাকরি এবং Sidekiq-এর মূল বিষয়গুলি জানি, আসুন তাদের পার্থক্যগুলি এবং প্রতিটি টেবিলে কী নিয়ে আসে তা আরও গভীরে যান৷
বৈশিষ্ট্যগুলি
মৌলিক অ্যাপ্লিকেশনগুলির জন্য, Sidekiq এবং বিলম্বিত চাকরি উভয়ই বাক্সের বাইরে একটি ভাল বৈশিষ্ট্য সরবরাহ করে৷ এর মধ্যে রয়েছে কাজের অগ্রাধিকার নির্ধারণ, নাম দেওয়া সারি, এবং ব্যর্থতার জন্য স্বয়ংক্রিয়ভাবে পুনরায় চেষ্টা করা৷
বিলম্বিত চাকরি বাক্সের বাইরে সর্বাধিক রান টাইম কনফিগার করার একটি উপায়ও প্রদান করে (সিডেকিক করে না)।
অন্যদিকে, Sidekiq, মিডলওয়্যারকে কাজের মেটাডেটা আপডেট করতে, চাকরির লাইন এড়িয়ে যেতে বা একটি কাজ সম্পাদন করতে সহায়তা করে। Sidekiq আরও কলব্যাক সমর্থন করে, যদিও কিছু হুক বিলম্বিত কাজের অ্যাপের জন্য উপলব্ধ। কলব্যাকের পরিবর্তে, আপনি সক্রিয় কাজের সাথে বিলম্বিত কাজ ব্যবহার করতে পারেন (যেমন, before_enqueue এবং around_perform কলব্যাকগুলি রেলের মধ্যে অন্তর্নির্মিত।
ওয়েব UI হল আরেকটি বৈশিষ্ট্য যা Sidekiq-এর সাথে বাক্সের বাইরে আসে৷ এটি চাকরি সম্পর্কে ঐতিহাসিক পরিসংখ্যান এবং কর্মীদের, বর্তমানে সারিবদ্ধ এবং মৃত চাকরি সম্পর্কে তথ্য প্রদান করে৷ আপনি কনসোলের মধ্য দিয়ে না গিয়ে অবিলম্বে কাজগুলি মুছে ফেলা বা চালানোর মতো ক্রিয়াকলাপগুলি সম্পাদন করতে পারেন৷
বিলম্বিত কাজের একটি অন্তর্নির্মিত ওয়েব UI নেই, তবে delayed_job_web Sidekiq-এর অনুরূপ বৈশিষ্ট্য সহ একটি মৌলিক ওয়েব UI-তে অ্যাক্সেস দেয়৷
Sidekiq পারফরম্যান্সে জিতেছে
পারফরম্যান্সের দিক থেকে, Sidekiq বেশ বিশ্বাসযোগ্যভাবে বিলম্বিত চাকরিকে হারায়৷ Sidekiq-এর ওপেন-সোর্স বেঞ্চমার্ক অনুসারে, এটি বিলম্বিত চাকরির তুলনায় প্রায় 30 গুণ দ্রুত৷ এর দুটি প্রধান কারণ রয়েছে:
- Postgres-এর মতো প্রথাগত ডেটাবেসের তুলনায় রেডিস ডেটা অনুসন্ধানে অনেক দ্রুত কারণ এটি ডিস্কের বিপরীতে মেমরিতে ডেটা সংরক্ষণ করে।
- বিলম্বিত চাকরি কাজগুলি প্রক্রিয়া করার জন্য একটি একক থ্রেড চালায়, Sidekiq এর তুলনায়, যা একাধিক থ্রেড ব্যবহার করে।
যদিও এই সবগুলি কাগজে দুর্দান্ত দেখায়, তবে পার্থক্যগুলি খুব বেশি গুরুত্বপূর্ণ নয় যদি না আপনি একটি বড় স্কেলে কাজ করেন (এমন কিছু প্রতি মিনিটে 10 হাজার কাজ)। সঠিক সংখ্যাটি কাজের গড় রান সময়ের উপরও নির্ভর করে। রান টাইম যত বেশি হবে, বিলম্বিত কাজের ক্ষেত্রে পারফরম্যান্স ওভারহেড কম হবে।
আপনি যদি বিলম্বিত কাজের পারফরম্যান্স নিয়ে চিন্তিত হন, তাহলে আপনি কিছু পারফরম্যান্স অপ্টিমাইজেশান করতে পারেন৷ ব্যবহার করার জন্য সঠিক সূচীগুলি আপনার চাকরির সিস্টেমের পরিসংখ্যানের উপর নির্ভর করবে৷ উদাহরণস্বরূপ, আপনি যদি একাধিক সারি ব্যবহার করেন এবং শুধুমাত্র একটি চাকরির একটি বড় অংশ পায়, তাহলে সারি কলামে একটি সাধারণ সূচক (add_index :delayed_jobs, :queue ) উল্লেখযোগ্যভাবে কর্মক্ষমতা উন্নত করতে পারে।
AppSignal-এ, Sidekiq ম্যাজিক ড্যাশবোর্ড স্বয়ংক্রিয়ভাবে তৈরি হয় এবং এটি আপনাকে সারির দৈর্ঘ্য, কিউ লেটেন্সি, কাজের সময়কাল, কাজের অবস্থা, মেমরি ব্যবহার ইত্যাদি নিরীক্ষণ করতে সক্ষম করে৷

ডিপ্লয়মেন্ট
Delayed Job এবং Sidekiq উভয়েরই কর্মীদের জন্য একই রকম স্থাপনার কৌশল রয়েছে। Heroku ব্যবহার করে, আপনাকে শুধু আপনার Procfile এর ভিতরে এন্ট্রি যোগ করতে হবে। কাজের প্রসেসর শুরু করতে এবং শ্রমিকদের চালাতে।
Sidekiq এর জন্য:
বিলম্বিত কাজের জন্য:
মেমরি
এখানে জিনিসগুলি একটু বেশি আকর্ষণীয় হতে শুরু করে। কতগুলি থ্রেড চলে তা নিয়ন্ত্রণ করার জন্য Sidekiq-এর কাছে একটি সমঝোতার বিকল্প রয়েছে৷ Sidekiq বনাম বিলম্বিত চাকরির বেঞ্চমার্কগুলির অধিকাংশই Sidekiq-এর 25টি থ্রেড পর্যন্ত অত্যন্ত উচ্চ সমঝোতার উল্লেখ করে, যা এটির অতি-দ্রুত কর্মক্ষমতাতে অবদান রাখে৷
কিন্তু একটি বাস্তব সেটিংয়ে, আপনাকে থ্রেডগুলিকে আরও রক্ষণশীল কিছুতে সীমাবদ্ধ করতে হবে৷ আপনার আবেদন কতটা ভারী এবং আপনি কী ধরনের কাজ করেন তার উপর প্রকৃত সংখ্যা নির্ভর করে৷ আমি অনুশীলনে যা দেখেছি তা হল আপনি যদি একজন কর্মীকে 512MB মেমরিতে চালান (standard-1x এর সমতুল্য) Heroku এ), থ্রেডের সংখ্যা 25 এর পরিবর্তে 2 থেকে 5 এর মধ্যে।
Sidekiq-এর স্রষ্টা মাইক পেরহ্যামের 'Taming Rails memory bloat', স্মৃতির সমস্যাগুলিকে আরও বিশদভাবে আলোচনা করেছেন এবং এটি পাঠের যোগ্য৷ আমি সম্পূর্ণ আলোচনায় ঝাঁপিয়ে পড়ব না, তবে তিনি আপনাকে MALLOC_ARENA_MAX=2 সেট করার পরামর্শ দিয়েছেন Sidekiq চালায় এমন সমস্ত কর্মীদের উপর৷
jemalloc ব্যবহার করা হচ্ছে নিয়মিত malloc এর পরিবর্তে খুব সাহায্য করে। এটি করার সঠিক উপায়টি আপনি যে প্ল্যাটফর্মটি ব্যবহার করেন তার উপর নির্ভর করে তবে Heroku এ এটি বেশ সহজ। শুধুমাত্র প্রথম বিল্ডপ্যাক হিসাবে heroku-buildpack-jemalloc সেট করুন (heroku/ruby এর আগে বিল্ডপ্যাক)।
বিলম্বিত চাকরি সহজ সম্পদ ব্যবহার করে
যেমনটি আমরা আলোচনা করেছি, বিলম্বিত কাজ আপনার বিদ্যমান ডাটাবেসের উদাহরণে চলে৷ আপনাকে বাড়ানোর প্রয়োজন হতে পারে:
- উপলব্ধ মেমরি
- ডিস্ক স্পেস
- সর্বোচ্চ সংযোগ
কাজের লোড বা আপনি চালানো কর্মীদের সংখ্যার উপর নির্ভর করে। কিন্তু আপনার প্রয়োজন একমাত্র সম্পদ হল জব প্রসেসর।
অন্যদিকে, কাজগুলি পরিচালনা করার জন্য Sidekiq-এর একটি Redis দৃষ্টান্ত প্রয়োজন৷ আপনি যদি রেডিসকে একটি ক্যাশে স্টোর হিসাবেও ব্যবহার করেন, তাহলে এটি সুপারিশ করা হয় যে আপনি Sidekiq কাজের জন্য একটি "স্থির স্টোর" হিসাবে কনফিগার করা একটি পৃথক উদাহরণ ব্যবহার করুন৷
যেহেতু মেমরিতে সবকিছু ফিট হয়ে গেলে রেডিস সবচেয়ে ভালো কাজ করে, তাই আপনার যদি অনেক বেশি কাজ থাকে (উদাহরণস্বরূপ, যদি অ্যাপে কোনো সমস্যার কারণে Sidekiq কিছু সময়ের জন্য সেগুলিকে প্রসেস করা বন্ধ করে দেয়), সবকিছু পরিষ্কার করতে কিছু ডাউনটাইম লাগতে পারে। আপনার অ্যাপের মতো একই সার্ভারে রেডিস থাকলে এটি বিশেষত সমস্যাজনক। তারা মেমরির জন্য প্রতিদ্বন্দ্বিতা শুরু করবে, যার ফলে আপনার অ্যাপ অদলবদল হবে এবং শেষ পর্যন্ত আপনার কার্যক্ষমতা নষ্ট হবে।
Redis সম্পর্কে উল্লেখ্য একটি গুরুত্বপূর্ণ বিষয় হল যে এটিকে maxmemory-policy noeviction দিয়ে কনফিগার করতে হবে Sidekiq-এর ডেটার নীরব ড্রপগুলি এড়াতে৷ অন্যথায়, আপনি নিজেকে খুঁজে পাবেন যে কাজগুলি সম্পাদন করতে হবে, কোনো চিহ্ন ছাড়াই৷
একটি সাইড-নোট:Sidekiq-এ পেইড আপগ্রেডগুলি
আপনার অতিরিক্ত বৈশিষ্ট্যের প্রয়োজন হলে, Sidekiq Pro এর সাথে আসে এবং Enterprise সংস্করণ।
প্রো-তে সবচেয়ে উল্লেখযোগ্য সংযোজন হল Batch Jobs যেটি সমান্তরালভাবে চলতে পারে, পর্যবেক্ষণ করা যেতে পারে এবং একটি গ্রুপ হিসাবে ইন্টারঅ্যাক্ট করতে পারে, যখন সমস্ত কাজ সম্পন্ন হয় তখন একটি কলব্যাক আহ্বান করে। এমনকি নেটওয়ার্ক সমস্যার সময়ও যাতে কোনো কাজ নীরবে বাদ না যায় তা নিশ্চিত করার জন্য প্রো-তে উন্নত নির্ভরযোগ্যতা বৈশিষ্ট্য রয়েছে।
এন্টারপ্রাইজ সংস্করণটি আরও বৈশিষ্ট্য সহ আসে। আপনি যদি এমন কিছু খুঁজছেন যা একটি নিয়মিত Sidekiq ইনস্টলেশন সমাধান করতে পারে না, তাহলে প্রদত্ত Sidekiq বৈশিষ্ট্যগুলি অন্বেষণ করুন৷
বাস্তবে, Sidekiq-এর বিনামূল্যের সংস্করণটি এখনও দুর্দান্ত কাজ করে৷ কিন্তু এটা জেনে রাখা ভালো যে এমন কিছু অর্থপ্রদানের বিকল্প রয়েছে যা আপনি প্রয়োজন অনুসারে আপগ্রেড করতে পারেন, পরিবর্তে একটি ভিন্ন সমাধানে স্যুইচ করতে পারেন৷
কমিউনিটি এবং ডেভেলপমেন্ট স্ট্যাটাস:Sidekiq has the Edge
Sidekiq এবং Delayed Job উভয়ের পিছনেই একটি বিশাল সম্প্রদায় রয়েছে। যাইহোক, StackOverflow বা অফিসিয়াল ডকুমেন্টেশনে আপনার প্রশ্নের দ্রুত উত্তর খুঁজে পাওয়া সবসময় সহজ নয়।
উন্নয়নের দিক থেকে, বিলম্বিত চাকরির জন্য জিনিসগুলি খুব উজ্জ্বল দেখাচ্ছে না৷ 2021 সালের ডিসেম্বর এবং 2022 সালের জানুয়ারিতে বিলম্বিত চাকরিতে কিছু ছোটখাটো কাজ করা হয়েছিল, তবে এটি সামনের দিকে কোনও বড় উন্নয়ন হচ্ছে বলে মনে হচ্ছে না৷ এটি শুধুমাত্র রক্ষণাবেক্ষণ-মোডে আছে বলে মনে হচ্ছে, এবং Github-এ অনেকগুলি খোলা সমস্যা রয়েছে৷
বিপরীতে, Sidekiq এখনও সক্রিয় বিকাশের অধীনে রয়েছে, এবং এর নির্মাতা এটিতে পুরো সময় কাজ করছেন। খুব কম উন্মুক্ত সমস্যা রয়েছে এবং সেগুলি নিয়মিতভাবে সমাধান করা হয়।
র্যাপ-আপ:সাইডিক বা বিলম্বিত চাকরি? এটি আপনার প্রয়োজনের উপর নির্ভর করে
এই পোস্টে, আমরা রেল অ্যাপ্লিকেশনগুলির জন্য দুটি প্রধান জব প্রসেসিং সিস্টেম কভার করেছি — Sidekiq এবং বিলম্বিত চাকরি — তাদের কিছু সুবিধা এবং অসুবিধার দিকে নজর রেখে৷
প্রতিটির জন্য বিভিন্ন ব্যবহারের ক্ষেত্রে রয়েছে। এটি সব আপনার অপারেশনের বাজেট এবং স্কেলের উপর নির্ভর করে৷
যদি কর্মক্ষমতা এবং দীর্ঘমেয়াদী রক্ষণাবেক্ষণের গুরুত্ব হয়, তাহলে Sidekiq একজন নো-ব্রেইনার। অন্যদিকে, যদি চলমান খরচ একটি উদ্বেগের বিষয় হয়, তাহলে বিলম্বিত চাকরি সেখানে আপনাকে সাহায্য করতে পারে।
আপনি বিলম্বিত চাকরি বা Sidekiq চয়ন করুন না কেন, আপনার প্রকল্পের জন্য শুভকামনা এবং সুখী কোডিং!
👋 আপনি যদি এই নিবন্ধটি পছন্দ করেন তবে আমাদের রুবি পারফরম্যান্স মনিটরিং চেকলিস্টে অন্যান্য রুবি (রেলগুলিতে) পারফরম্যান্স নিবন্ধগুলি দেখুন৷
পি.এস. আপনি যদি রুবি ম্যাজিক পোস্টগুলি প্রেস থেকে বের হওয়ার সাথে সাথে পড়তে চান তবে আমাদের রুবি ম্যাজিক নিউজলেটারে সাবস্ক্রাইব করুন এবং একটি পোস্ট মিস করবেন না!