Sidekiq रूबी डेवलपर्स को समय लेने वाले कार्यों को पृष्ठभूमि में ले जाकर तेज और प्रतिक्रियाशील वेब एप्लिकेशन बनाए रखने की अनुमति देता है।
इसके मूल में मल्टीथ्रेडिंग के साथ, Sidekiq एक साथ कई नौकरियों को संसाधित कर सकता है। यह Sidekiq को रूबी या रेल्स एप्लिकेशन का एक महत्वपूर्ण हिस्सा बनाता है जो भारी भार को संभालते हैं या ईमेल भेजने या फ़ाइलों को प्रसंस्कृत करने जैसे कार्य करते हैं। बैकग्राउंड प्रोसेसिंग के बिना, लंबे समय तक चलने वाले कार्य आपके एप्लिकेशन के मुख्य थ्रेड को ब्लॉक कर देंगे, जिसके परिणामस्वरूप धीमी प्रतिक्रिया समय और खराब उपयोगकर्ता अनुभव होगा।
इस पोस्ट में, हम Sidekiq का प्रभावी ढंग से उपयोग करके बैकग्राउंड जॉब को प्रबंधित और संसाधित करने पर ध्यान केंद्रित करेंगे।
शुरू करते हैं!
Sidekiq की मूल बातें
सार रूप में, Sidekiq रूबी के लिए एक पूर्ण-विशेषताओं वाला बैकग्राउंड प्रोसेसिंग फ्रेमवर्क है। यह आपको बैकग्राउंड कार्यों को समवर्ती रूप से चलाने देता है, जो प्रतिक्रियाशील और विश्वसनीय वेब एप्लिकेशन के लिए महत्वपूर्ण है। चाहे ईमेल भेजना, छवियों का आकार बदलना, या CSV फ़ाइलों को संसाधित करना, समय लेने वाले कार्यों को Sidekiq का उपयोग करके पर्दे के पीछे किया जा सकता है।
Sidekiq की आर्किटेक्चर मल्टीथ्रेडिंग और "वर्कर्स" की अवधारणा पर बहुत अधिक निर्भर करती है। हालांकि, Sidekiq 6.3.0 के अनुसार, Sidekiq::Worker मॉड्यूल को Sidekiq::Job के पक्ष में हटा दिया गया है क्योंकि "वर्कर" शब्दावली भ्रमित करने वाली हो सकती है:
क्या आप एक प्रक्रिया के बारे में बात कर रहे हैं? एक थ्रेड? एक प्रकार की नौकरी? मैं डेवलपर्स को वर्कर शब्द का उपयोग बंद करने के लिए प्रोत्साहित करता हूं।
Redis, एक बिजली-तेज़ इन-मेमोरी डेटाबेस, यहां एक आवश्यक भूमिका निभाता है, जो इन बैकग्राउंड जॉब को संग्रहीत करने वाली क्यू सिस्टम के रूप में कार्य करता है।
नोट: जबकि Sidekiq भंडारण के लिए Redis पर निर्भर करता है, हम इस लेख में Redis कॉन्फ़िगरेशन और उपयोग के विवरण में नहीं जाएंगे।
रेल्स के लिए Sidekiq का इंस्टॉलेशन और सेटअप
शुरू करने के लिए, आपको रूबी संस्करण 2.5 या बाद का और Redis सर्वर संस्करण 4 या बाद का चलाने की आवश्यकता होगी।
अब आप Sidekiq रूबी जेम इंस्टॉल करने के लिए तैयार हैं।
Sidekiq को अपने एप्लिकेशन के Gemfile में जोड़कर शुरू करें:
इसके बाद, इसे अपने प्रोजेक्ट की डायरेक्टरी में इंस्टॉल करें:
अब जब 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 निष्पादन पर SomeNameForAJob के perform मेथड को पास किए जाते हैं।
यहां से, Sidekiq क्लाइंट जॉब को Redis में एक कतार में धकेलता है, और Sidekiq सर्वर उस जॉब को कतार से बाहर निकालता है जब यह इसे संसाधित करने के लिए तैयार होता है।
अपना पहला Sidekiq जॉब बनाना
Sidekiq में, जॉब जॉब क्लास द्वारा दर्शाए जाते हैं, और उन्हें जिन कार्यों को करने की आवश्यकता होती है, वे perform विधि में परिभाषित होते हैं। आइए एक बुनियादी Sidekiq जॉब बनाएं:
इस कोड स्निपेट में, हमने HelloNameJob क्लास बनाई है। यह दो आर्गुमेंट लेता है: name और times। जब निष्पादित किया जाता है, तो यह कंसोल पर एक निर्दिष्ट संख्या में अभिवादन प्रिंट करता है। यह, निश्चित रूप से, एक सरल उदाहरण है। वास्तविक दुनिया के एप्लिकेशन में, perform विधि में कोई भी कोड हो सकता है जिसे आप पृष्ठभूमि में चलाना चाहते हैं।
अब अपना जॉब निष्पादित करें। बस क्लास पर perform_async विधि को कॉल करें और अपने perform विधि की अपेक्षा वाले किसी भी आर्गुमेंट को पास करें। यहां बताया गया है कि हम अपने द्वारा बनाए गए HelloNameJob को कैसे शेड्यूल कर सकते हैं:
यह "Hello, Jeff!" को पांच बार प्रिंट करने के लिए एक जॉब को एनक्यू करेगा।
यदि आपको किसी विशेष समय पर जॉब निष्पादित करने की आवश्यकता है, तो आप perform_in या perform_at विधियों का उपयोग कर सकते हैं। उदाहरण के लिए:
इन उदाहरणों में, 'Meredith' को पांच मिनट में तीन बार उसका अभिवादन प्राप्त होगा, जबकि 'Jeff' को दो दिन इंतजार करना होगा उसका अभिवादन दो बार प्राप्त करने के लिए।
उन्नत Sidekiq उपयोग
Sidekiq काम को पृष्ठभूमि में उतारने तक सीमित नहीं है। यह उन्नत सुविधाएँ भी प्रदान करता है जो आपको अपने जॉब को कॉन्फ़िगर करने की अनुमति देती हैं, जिसमें जॉब रीट्राई और जॉब प्राथमिकता शामिल हैं।
स्वचालित जॉब रीट्राई
Sidekiq की सबसे शक्तिशाली विशेषताओं में से एक स्वचालित जॉब रीट्राई है। डिफ़ॉल्ट रूप से, यदि कोई जॉब अनहैंडल्ड अपवाद के कारण विफल होता है, तो Sidekiq एक्सपोनेंशियल बैकऑफ के साथ जॉब को रीट्राई करेगा। आप अपने क्लास में sidekiq_options निर्दिष्ट करके रीट्राई की संख्या को अनुकूलित कर सकते हैं जैसे:
इस उदाहरण में, यदि कोई जॉब विफल होता है, तो Sidekiq हार मानने से पहले इसे दस बार रीट्राई करेगा।
जॉब प्राथमिकता
जॉब प्राथमिकता एक और उन्नत विशेषता है जो Sidekiq प्रदान करता है। आप अपने जॉब को अलग-अलग कतारों में असाइन करके और प्रत्येक कतार की प्राथमिकता सेट करके अपने जॉब की प्राथमिकता को नियंत्रित कर सकते हैं। यहां बताया गया है कि आप जॉब परिभाषित करते समय एक कतार कैसे निर्दिष्ट कर सकते हैं:
इस उदाहरण में, ThisJob के लिए जॉब क्रिटिकल कतार में रखे जाएंगे। अपने Sidekiq सर्वर को शुरू करते समय, आप तब कतारों को संसाधित किए जाने के क्रम को निर्दिष्ट कर सकते हैं।
ये सिर्फ कुछ उदाहरण हैं कि Sidekiq की उन्नत सुविधाओं का उपयोग आपके बैकग्राउंड जॉब प्रोसेसिंग को ठीक करने के लिए कैसे किया जा सकता है। Sidekiq के साथ, आपके पास यह सुनिश्चित करने के लिए उपकरण हैं कि आपके जॉब कुशलतापूर्वक, मज़बूती से, और आपके एप्लिकेशन की आवश्यकताओं के लिए सबसे उपयुक्त तरीके से संसाधित होते हैं।
Sidekiq के साथ निगरानी और स्केलिंग
Sidekiq आपकी जॉब प्रोसेसिंग क्षमताओं की निगरानी और स्केलिंग के लिए मानक सुविधाओं के साथ आता है। एक वेब-आधारित डैशबोर्ड आपकी जॉब कतारों का रीयल-टाइम दृश्य देता है। आप संसाधित और विफल जॉब की संख्या, साथ ही वर्तमान और शेड्यूल्ड जॉब के बारे में विस्तृत जानकारी देख सकते हैं।
Sidekiq डैशबोर्ड का उपयोग करने के लिए, इसे अपने रेल्स रूट्स फ़ाइल में माउंट करें। config/routes.rb में, जोड़ें:
इन लाइनों को जोड़ने के बाद, आप अपने सर्वर पर '/sidekiq' पर नेविगेट करके डैशबोर्ड तक पहुंच सकते हैं।
AppSignal के साथ Sidekiq की निगरानी
अधिक व्यापक निगरानी के लिए, Sidekiq AppSignal जैसे एप्लिकेशन प्रदर्शन निगरानी टूल के साथ अच्छी तरह से एकीकृत होता है। AppSignal का Sidekiq डैशबोर्ड आपके Sidekiq जॉब में विस्तृत अंतर्दृष्टि प्रदान करता है, जिसमें विफल और रीट्राई किए गए जॉब, जॉब अवधि, और Redis मेमोरी उपयोग शामिल हैं।

इस तरह की जानकारी आपके एप्लिकेशन को स्केल करते समय बॉटलनेक की पहचान करने के लिए अमूल्य है। इसके अलावा, AppSignal के अलर्ट आपको कतार की लंबाई जैसी विसंगतियों के शीर्ष पर बने रहने में मदद करते हैं, इसलिए आप जानते हैं कि आपकी कतारें कब बढ़ी हैं।

रेल्स के साथ अपने Sidekiq सेटअप में AppSignal को एकीकृत करना सरल है। AppSignal का रूबी जेम किसी अतिरिक्त कॉन्फ़िगरेशन के बिना Sidekiq सर्वर मिडलवेयर में सम्मिलित होता है। यह ActiveJob के साथ भी काम करता है!
आप यहां तक कि डॉक्स में उल्लिखित सेटअप का उपयोग करके रेल्स पर नहीं चलने वाले Sidekiq एप्लिकेशन के लिए AppSignal का उपयोग कर सकते हैं।
Sidekiq उपयोग का मामला
Sidekiq के दो सबसे आम उपयोग के मामले एसिंक्रोनस ईमेलिंग और शेड्यूल्ड रिपोर्ट जनरेशन हैं। आइए इन उदाहरणों में से एक पर करीब से नज़र डालें।
ईमेल, विशेष रूप से बड़े अटैचमेंट या कई प्राप्तकर्ताओं वाले, भेजने में काफी समय ले सकते हैं। ईमेल भेजने को बैकग्राउंड जॉब में संभालकर, आपका एप्लिकेशन उपयोगकर्ता अनुरोधों का जवाब देना जारी रख सकता है जबकि एक ईमेल संसाधित किया जा रहा है।
यहां रेल्स एप्लिकेशन में ईमेल भेजने के लिए 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. यदि आप Ruby Magic पोस्ट को प्रेस से निकलते ही पढ़ना चाहते हैं, तो हमारे Ruby Magic न्यूज़लेटर की सदस्यता लें और कभी भी एक भी पोस्ट न चूकें!