सही बैकग्राउंड जॉब प्रोसेसर का चयन:विलंबित जॉब बनाम साइडकीक की व्याख्या
<पी> अधिकांश एप्लिकेशन को मेलर्स के लिए पृष्ठभूमि कार्यों, नियमित सफाई, या किसी अन्य समय लेने वाले ऑपरेशन की आवश्यकता होती है जिसके लिए उपयोगकर्ता की उपस्थिति की आवश्यकता नहीं होती है। <पी> रेल की दुनिया में कई रत्न नौकरी कतारों और पृष्ठभूमि प्रसंस्करण का समर्थन करते हैं - विलंबित नौकरी और साइडकीक दो सबसे लोकप्रिय हैं। <पी> इस पोस्ट में, हम विलंबित नौकरी और साइडकीक पर एक विस्तृत नज़र डालेंगे, जिसमें यह भी शामिल होगा कि वे एक-दूसरे के खिलाफ कैसे काम करते हैं। <पी> चलो चलें! विलंबित कार्य का त्वरित परिचय
<पी> डिलेड जॉब शॉपिफाई से सीधा निष्कर्षण है और सभी पृष्ठभूमि नौकरियों को बनाए रखने के लिए एक तालिका का उपयोग करता है। यह एक बहुत ही सरल पैटर्न का पालन करता है। कोई भी रूबी ऑब्जेक्ट जो perform पर प्रतिक्रिया करता है विधि को जॉब तालिका में सूचीबद्ध किया जा सकता है। <पी> इसके अलावा, यदि आपको विशेष कार्य वस्तुओं को बनाए रखने की आवश्यकता नहीं है (हालाँकि परीक्षण योग्यता और लंबे समय से चल रहे संचालन के स्पष्ट पृथक्करण के लिए इसकी अत्यधिक अनुशंसा की जाती है), तो यह आपको .delay.method(params) पर कॉल करने की भी अनुमति देता है। किसी भी रूबी ऑब्जेक्ट पर। यह पृष्ठभूमि में विधि को संसाधित करेगा। <पी> विलंबित कार्य README सभी सामान्य उपयोग पैटर्न को समझाने का बहुत अच्छा काम करता है। <पी> कई टीमें विलंबित कार्य को चुनती हैं क्योंकि यह सरल है और उनके पहले से मौजूद डेटाबेस का उपयोग करता है। उन्हें अन्य संसाधनों को खर्च/रखरखाव करने की आवश्यकता नहीं है। <पी> हालाँकि, यह अभी भी आपकी डेटाबेस तालिका में जगह लेगा। यदि आपके पास एक ही समय में बहुत सारी नौकरियां कतार में हैं, तो आपको उन सभी को समायोजित करने के लिए अधिक डिस्क स्थान की आवश्यकता हो सकती है। साइडकीक का एक त्वरित परिचय
<पी> दूसरी ओर, साइडकीक, सभी जॉब मेटाडेटा को बनाए रखने के लिए रेडिस को अपने डेटा स्टोर के रूप में उपयोग करता है। यह नियमित डेटाबेस सिस्टम डिलेड जॉब्स द्वारा उपयोग किए जाने वाले की तुलना में बहुत तेज होने के स्पष्ट लाभ के साथ आता है। इसके अलावा, प्रत्येक साइडकीक प्रक्रिया नौकरियों को और भी तेजी से संसाधित करने के लिए कई थ्रेड्स को जन्म देती है। <पी> साइडकीक में प्रत्येक पृष्ठभूमि कार्य के लिए, हमें एक विशेष वर्ग की आवश्यकता है जिसमें Sidekiq::Worker शामिल हो चिंता और perform पर प्रतिक्रिया करता है विधि। कार्य को सूचीबद्ध करने के लिए, हमें perform_async(arg1, arg2) पर कॉल करना होगा कार्यकर्ता पर तर्कों के साथ. <पी> साइडकीक 'गेटिंग स्टार्टेड' गाइड इसे और अन्य उपयोग पैटर्न को अच्छी तरह से समझाता है। विलंबित नौकरी या साइडकीक के साथ सक्रिय नौकरी का उपयोग करना
<पी> रेल पहले से ही शीर्ष-स्तरीय घोषणा और नौकरियों के प्रबंधन के लिए एक परिपक्व नौकरी ढांचा प्रदान करता है। विलंबित नौकरी और साइडकीक दोनों एक्टिवजॉब के एकीकृत एपीआई के माध्यम से नौकरियों को चलाने का समर्थन करते हैं। बस ApplicationJob से प्राप्त करें और perform_later पर कॉल करें कॉन्फ़िगर कतारबद्ध बैकएंड पर कार्य को पंक्तिबद्ध करने के लिए अपने जॉब क्लास पर। <पी> एक्टिव जॉब के साथ जॉब चलाने का लाभ यह है कि आपका एप्लिकेशन कोड फ्रेमवर्क अज्ञेयवादी बन जाता है, और विलंबित जॉब से साइडकीक (या इसके विपरीत) पर स्विच करना बहुत आसान हो जाता है। ActiveJob::TestHelper इससे कतारबद्ध नौकरियों का परीक्षण भी आसान हो जाता है। <पी> लेकिन एक्टिव जॉब द्वारा प्रदान किया गया अमूर्त प्रदर्शन ओवरहेड के साथ भी आता है, क्योंकि जॉब डेटा को स्टोर में धकेलने से पहले लपेटना पड़ता है। साइडकीक का दावा है कि रेडिस पर पुश करते समय एक्टिवजॉब लगभग 2-20x धीमा है, ~3x प्रोसेसिंग ओवरहेड के साथ। विलंबित नौकरियां बनाम साइडकीक
<पी> अब जब हम विलंबित नौकरियों और साइडकीक की मूल बातें जानते हैं, तो आइए उनके अंतरों पर गहराई से विचार करें और प्रत्येक तालिका में क्या लाता है। विशेषताएं
<पी> बुनियादी अनुप्रयोगों के लिए, साइडकीक और डिलेड जॉब दोनों ही बॉक्स से बाहर सुविधाओं का एक अच्छा सेट प्रदान करते हैं। इनमें नौकरी की प्राथमिकताएं निर्दिष्ट करना, नामित कतारें, और विफलताओं पर ऑटो-पुनः प्रयास करना शामिल है। <पी> विलंबित कार्य बॉक्स से बाहर अधिकतम रन टाइम को कॉन्फ़िगर करने का एक तरीका भी प्रदान करता है (साइडकीक नहीं करता है)। <पी> दूसरी ओर, साइडकीक जॉब मेटाडेटा को अपडेट करने, नौकरी की कतार छोड़ने या नौकरी निष्पादित करने के लिए मिडलवेयर के लिए समर्थन प्रदान करता है। साइडकीक अधिक कॉलबैक का समर्थन करता है, हालांकि विलंबित जॉब ऐप्स के लिए कुछ हुक उपलब्ध हैं। कॉलबैक के बजाय, आप सक्रिय जॉब के साथ विलंबित जॉब का उपयोग कर सकते हैं (अर्थात्, before_enqueue और around_perform कॉलबैक रेल्स में अंतर्निहित हैं)। <पी> वेब यूआई एक और सुविधा है जो साइडकीक के साथ बॉक्स से बाहर आती है। यह नौकरियों के बारे में ऐतिहासिक आंकड़े और श्रमिकों के बारे में जानकारी, वर्तमान में कतारबद्ध और मृत नौकरियों के बारे में जानकारी प्रदान करता है। आप कंसोल के माध्यम से जाने के बिना तुरंत नौकरियों को हटाने या चलाने जैसे ऑपरेशन कर सकते हैं। <पी> विलंबित कार्य में इनबिल्ट वेब यूआई नहीं है, लेकिन delayed_job_web है साइडकीक के समान सुविधाओं के साथ एक बुनियादी वेब यूआई तक पहुंच प्रदान करता है। साइडकीक ने प्रदर्शन में जीत हासिल की
<पी> प्रदर्शन के मामले में, साइडकीक विलंबित जॉब को काफी हद तक मात देता है। साइडकीक के ओपन-सोर्स बेंचमार्क के अनुसार, यह विलंबित जॉब की तुलना में लगभग 30 गुना तेज है। इसके दो प्रमुख कारण हैं: - पोस्टग्रेज जैसे पारंपरिक डेटाबेस की तुलना में रेडिस डेटा को क्वेरी करने में बहुत तेज़ है क्योंकि यह डिस्क के विपरीत डेटा को मेमोरी में संग्रहीत करता है।
- विलंबित जॉब साइडकीक की तुलना में नौकरियों को संसाधित करने के लिए एक ही थ्रेड चलाता है, जो कई थ्रेड्स का उपयोग करता है।
<पी> हालांकि यह सब कागज पर बहुत अच्छा लगता है, लेकिन जब तक आप बड़े पैमाने पर काम नहीं करते हैं (प्रति मिनट 10 हजार नौकरियां जैसी कुछ) तो अंतर ज्यादा मायने नहीं रखता। सटीक संख्या किसी नौकरी के औसत समय पर भी निर्भर करती है। रनटाइम जितना लंबा होगा, विलंबित कार्य के लिए प्रदर्शन का भार उतना ही कम होगा। <पी> यदि आप विलंबित कार्य के प्रदर्शन के बारे में चिंतित हैं, तो आप कुछ प्रदर्शन अनुकूलन कर सकते हैं। उपयोग की जाने वाली सटीक अनुक्रमणिका आपके कार्य प्रणाली के आँकड़ों पर निर्भर करेगी। उदाहरण के लिए, यदि आप एकाधिक कतारों का उपयोग करते हैं और केवल एक को नौकरियों का एक बड़ा हिस्सा मिलता है, तो कतार कॉलम पर एक सरल सूचकांक (add_index :delayed_jobs, :queue) ) प्रदर्शन में उल्लेखनीय सुधार कर सकता है। <पी> ऐपसिग्नल में, साइडकीक मैजिक डैशबोर्ड स्वचालित रूप से जेनरेट हो जाता है और यह आपको कतार की लंबाई, कतार विलंबता, कार्य अवधि, कार्य की स्थिति, मेमोरी उपयोग आदि की निगरानी करने में सक्षम बनाता है। <पी>
तैनाती
<पी> डिलेड जॉब और साइडकीक दोनों में श्रमिकों के लिए एक समान तैनाती रणनीति है। हेरोकू का उपयोग करके, आपको बस अपने Procfile के अंदर प्रविष्टियां जोड़ने की जरूरत है। जॉब प्रोसेसर शुरू करने और कर्मचारियों को चलाने के लिए। <पी> साइडकीक के लिए: <पी> विलंबित कार्य के लिए: मेमोरी
<पी> यहीं से चीज़ें थोड़ी और दिलचस्प होनी शुरू होती हैं। साइडकीक के पास यह नियंत्रित करने के लिए एक समवर्ती विकल्प है कि वह कितने थ्रेड चलाता है। अधिकांश साइडकीक बनाम विलंबित जॉब बेंचमार्क में साइडकीक की 25 थ्रेड तक की बहुत उच्च संगामिति का उल्लेख है, जो इसके सुपर-फास्ट प्रदर्शन में योगदान देता है। <पी> लेकिन वास्तविक सेटिंग में, आपको थ्रेड्स को कुछ अधिक रूढ़िवादी तक सीमित करना होगा। वास्तविक संख्या इस बात पर निर्भर करती है कि आपका एप्लिकेशन कितना भारी है और आप किस प्रकार के कार्य करते हैं। मैंने व्यवहार में जो देखा है वह यह है कि यदि आप किसी वर्कर को 512 एमबी मेमोरी ( standard-1x के बराबर) पर चलाते हैं हेरोकू पर), थ्रेड्स की संख्या 25 के बजाय 2 और 5 के बीच है। <पी> साइडकीक के निर्माता माइक पेरहम द्वारा लिखित 'टैमिंग रेल्स मेमोरी ब्लोट' मेमोरी मुद्दों पर अधिक विस्तार से चर्चा करता है और पढ़ने लायक है। मैं पूरी चर्चा में नहीं जाऊंगा, लेकिन वह अनुशंसा करता है कि आप MALLOC_ARENA_MAX=2 सेट करें साइडकीक चलाने वाले सभी कर्मचारियों पर। <पी> jemalloc का उपयोग करना नियमित malloc के बजाय भी मदद करता है. ऐसा करने का सटीक तरीका आपके द्वारा उपयोग किए जाने वाले प्लेटफ़ॉर्म पर निर्भर करता है, लेकिन हेरोकू पर यह बहुत सरल है। बस हरोकू-बिल्डपैक-जेमलोक को पहले बिल्डपैक के रूप में सेट करें (heroku/ruby से आगे) बिल्डपैक). विलंबित कार्य सरल संसाधनों का उपयोग करता है
<पी> जैसा कि हमने चर्चा की, विलंबित कार्य आपके मौजूदा डेटाबेस इंस्टेंस पर चलता है। आपको इसे बढ़ाने की आवश्यकता हो सकती है: - उपलब्ध मेमोरी
- डिस्क स्थान
- अधिकतम कनेक्शन
<पी> नौकरी के बोझ या आपके द्वारा चलाए जाने वाले श्रमिकों की संख्या पर निर्भर करता है। लेकिन आपके लिए आवश्यक एकमात्र संसाधन जॉब प्रोसेसर है। <पी> दूसरी ओर, साइडकीक को नौकरियों को संभालने के लिए रेडिस इंस्टेंस की आवश्यकता होती है। यदि आप रेडिस को कैश स्टोर के रूप में भी उपयोग करते हैं, तो यह अनुशंसा की जाती है कि आप साइडकीक नौकरियों के लिए "परसिस्टेंट स्टोर" के रूप में कॉन्फ़िगर किए गए एक अलग इंस्टेंस का उपयोग करें। <पी> चूँकि Redis तब सबसे अच्छा काम करता है जब सब कुछ मेमोरी में फिट बैठता है, यदि आपके पास बहुत अधिक काम हैं (उदाहरण के लिए, यदि साइडकीक ऐप में किसी समस्या के कारण उन्हें कुछ समय के लिए संसाधित करना बंद कर देता है), तो सब कुछ साफ़ करने में कुछ डाउनटाइम लग सकता है। यदि आपके पास आपके ऐप के समान सर्वर पर Redis है तो यह विशेष रूप से परेशानी भरा है। वे मेमोरी के लिए प्रतिस्पर्धा करना शुरू कर देंगे, जिससे स्वैपिंग होगी और अंततः आपके ऐप का प्रदर्शन नष्ट हो जाएगा। <पी> रेडिस के बारे में ध्यान देने योग्य एक महत्वपूर्ण बात यह है कि इसे maxmemory-policy noeviction के साथ कॉन्फ़िगर करना होगा साइडकीक के डेटा की मूक बूंदों से बचने के लिए। अन्यथा, आप बिना किसी निशान के, अपने आप को उन कार्यों को खोते हुए पाएंगे जिन्हें निष्पादित करने की आवश्यकता है। एक साइड-नोट:साइडकीक में सशुल्क अपग्रेड
<पी> यदि आपको अतिरिक्त सुविधाओं की आवश्यकता है, तो साइडकीक Pro के साथ आता है और Enterprise संस्करण. <पी> प्रो में सबसे उल्लेखनीय जोड़ Batch Jobs है जो समानांतर में चल सकता है, निगरानी की जा सकती है, और एक समूह के रूप में बातचीत कर सकती है, जब सभी कार्य पूरे हो जाते हैं तो कॉलबैक शुरू हो जाता है। प्रो ने यह सुनिश्चित करने के लिए विश्वसनीयता सुविधाओं में भी सुधार किया है कि नेटवर्क समस्याओं के दौरान भी कोई भी नौकरी चुपचाप न छूटे। <पी> एंटरप्राइज़ संस्करण और भी अधिक सुविधाओं के साथ आता है। यदि आप किसी ऐसी चीज़ की तलाश कर रहे हैं जिसे नियमित साइडकीक इंस्टॉलेशन हल नहीं कर सकता है, तो भुगतान की गई साइडकीक सुविधाओं का पता लगाएं। <पी> व्यवहार में, साइडकीक का मुफ़्त संस्करण अभी भी बढ़िया काम करता है। लेकिन यह जानना अच्छा है कि ऐसे भुगतान विकल्प हैं जिन्हें आप किसी भिन्न समाधान पर स्विच करने के बजाय आवश्यकतानुसार अपग्रेड कर सकते हैं। सामुदायिक और विकास की स्थिति:साइडकीक के पास बढ़त है
<पी> साइडकीक और डिलेड जॉब दोनों के पीछे एक बहुत बड़ा समुदाय है। हालाँकि, StackOverflow या आधिकारिक दस्तावेज़ीकरण में अपने प्रश्नों के त्वरित उत्तर पाना हमेशा आसान नहीं होता है। <पी> विकास के मामले में, विलंबित नौकरी के लिए चीजें बहुत अच्छी नहीं दिख रही हैं। दिसंबर 2021 और जनवरी 2022 में विलंबित नौकरी पर कुछ मामूली काम किया गया था, लेकिन ऐसा नहीं लगता कि इसमें आगे कोई बड़ा विकास हो रहा है। ऐसा प्रतीत होता है कि यह केवल-रखरखाव मोड में है, और Github पर बहुत सारे खुले मुद्दे हैं। <पी> इसके विपरीत, साइडकीक अभी भी सक्रिय विकास के अधीन है, और इसका निर्माता इस पर पूर्णकालिक काम कर रहा है। बहुत कम खुले मुद्दे हैं, और उन्हें नियमित रूप से संबोधित किया जाता है। समापन:साइडकिक या विलंबित नौकरी? यह आपकी आवश्यकताओं पर निर्भर करता है
<पी> इस पोस्ट में, हमने रेल अनुप्रयोगों के लिए दो प्रमुख नौकरी प्रसंस्करण प्रणालियों - साइडकीक और विलंबित नौकरी - को कवर किया है और उनके कुछ पेशेवरों और विपक्षों पर एक नज़र डाली है। <पी> प्रत्येक के लिए अलग-अलग उपयोग के मामले हैं। यह सब आपके ऑपरेशन के बजट और पैमाने पर निर्भर करता है। <पी> यदि प्रदर्शन और दीर्घकालिक रखरखाव महत्वपूर्ण है, तो साइडकीक एक बिना सोचे-समझे काम करने वाली चीज़ है। दूसरी ओर, यदि चलने की लागत एक चिंता का विषय है, तो विलंबित कार्य आपकी मदद कर सकता है। <पी> चाहे आप विलंबित नौकरी चुनें या साइडकीक, आपके प्रोजेक्ट के लिए शुभकामनाएँ और कोडिंग के लिए शुभकामनाएँ! <पी> 👋 यदि आपको यह लेख पसंद आया है, तो हमारी रूबी प्रदर्शन निगरानी चेकलिस्ट में अन्य रूबी (ऑन रेल्स) प्रदर्शन लेखों पर एक नज़र डालें। <पी> पी.एस. यदि आप प्रेस से हटते ही रूबी मैजिक पोस्ट पढ़ना चाहते हैं, तो हमारे रूबी मैजिक न्यूज़लेटर की सदस्यता लें और एक भी पोस्ट न चूकें! पी>