यदि आपके पास एक कार्य था जिसे आप केवल एक बार सर्वरों के एक समूह पर चलाना चाहते थे, तो एक नियमित अंतराल पर इसे प्राप्त करने का सबसे अच्छा तरीका क्या होगा? इस मामले में क्लस्टर की परिभाषा एक लोड बैलेंसर के पीछे बैठे वितरित सत्रों के साथ 2 या अधिक समान सर्वर हैं।
केस का उपयोग करें: आपके पास एक ऐसा काम है जो चलाने के लिए महंगा है जिसे केवल X घंटे के अनुसार एक बार चलाया जाना चाहिए। उदाहरण के लिए, यह काम रिकॉर्डों के एक समूह पर आधारित हो सकता है और उनकी स्थिति को अपडेट कर सकता है।
- सबसे खराब स्थिति यह है कि दो बार नौकरी चलाने से आपका डेटा अमान्य हो जाता है।
- सबसे अच्छा मामला परिदृश्य यह है कि नौकरी आपके सभी सर्वरों पर संसाधनों का उपयोग करती है।
आवश्यकताएँ सारांश:
- यदि किसी एक नोड के डाउन होने पर भी जॉब चलना चाहिए।
- नौकरी प्रति शेड्यूल के अनुसार केवल एक बार चलाई जानी चाहिए।
- यदि एक ही समय में या ओवरलैपिंग समय पर कई कार्य निर्धारित किए जाते हैं, तो चल रहे नौकरियों की संख्या को सर्वरों के बीच समान रूप से वितरित किया जाता है।
- मशीनों का समान कोड आधार होना चाहिए और NTP के माध्यम से सिंक्रनाइज़ किया जाना चाहिए।
- कॉन्फ़िगरेशन वातावरण चर द्वारा नोड और नोड के बीच भिन्न हो सकता है।
- काम को समय पर या निर्धारित समय के दिए गए अंतराल के भीतर शुरू करना होगा। (उदाहरण के लिए 5 मिनट का कहना है)
संभव समाधान
- एक नोड को मास्टर नोड के रूप में सेट करें, यह काम नहीं करता है क्योंकि यह ऊपर 1 का उल्लंघन करता है।
- एक अनुरोध करें कि लोड बैलेंसर काम को किक करने के लिए संतुलित करता है। दुर्भाग्य से इसका साइड इफेक्ट यह है कि यदि आपके पास एक ही समय में कई कार्य चल रहे हैं तो वे सभी एक ही मशीन द्वारा चलाए जा सकते हैं।
यह जावा में एक सर्वलेट कंटेनर में चलना होगा। हालाँकि यह उन नौकरियों को कोड नहीं कर रहा है जिनकी मुझे तलाश है।
निश्चित रूप से यह ज्ञात सर्वोत्तम समाधान के साथ एक हल की गई समस्या है।
संबंधित प्रश्न। /programming/5949038/schedule-job-executes-twice-on-cluster
यह डुप्लिकेट नहीं है क्योंकि समाधान ऊपर दी गई उन 5 आवश्यकताओं के अनुसार अपर्याप्त है। सबसे अपवर्तित समाधान एक दौड़ समस्या से ग्रस्त है, और दूसरा समाधान आवश्यकता 3 का उल्लंघन करता है