2010-06-15 24 views
9

इसलिए मेरी समस्या है:लोड संतुलन और शेड्यूलिंग एल्गोरिदम

मेरे पास कई अलग-अलग कॉन्फ़िगरेशन सर्वर हैं। मेरे पास अलग-अलग गणनाएं हैं (नौकरियां); मैं भविष्यवाणी कर सकता हूं कि प्रत्येक नौकरी को लगभग कितना समय लगेगा। इसके अलावा, मेरे पास प्राथमिकताएं हैं। मेरा सवाल यह है कि सभी मशीनों को 99-100% लोड करने और सर्वोत्तम तरीके से नौकरियों को निर्धारित करने का तरीका है।

प्रत्येक मशीन एक समय में कई गणना कर सकती है। नौकरियों को मशीन पर धकेल दिया जाता है। केंद्रीय मशीन प्रत्येक मशीन के वर्तमान भार को जानता है। इसके अलावा, मैं यहां कुछ प्रकार की मशीन लर्निंग असाइन करना चाहता हूं, क्योंकि मैं प्रत्येक नौकरी के आंकड़े (शुरू, समाप्त, सीपीयू लोड इत्यादि) जानूंगा।

प्राथमिकताओं को ध्यान में रखते हुए, मैं सर्वोत्तम संभव तरीके से नौकरियों (गणना) को कैसे वितरित कर सकता हूं?

कोई सुझाव, विचार, या एल्गोरिदम?

एफवाईआई: मेरा मंच .NET।

+0

.NET से संबंधित क्या है? मैं कुछ भी नहीं देखता, एक अल्गो चयन बिंदु से, वास्तव में .NET के उपयोग पर किसी भी तरह से निर्भर है। Algorythms - प्रति परिभाषा - langauge स्वतंत्र हैं। – TomTom

+0

इससे कोई फर्क नहीं पड़ता कि क्या अलगो .NET में है या नहीं :) मैंने अभी उल्लेख किया है कि मैं .NET के साथ काम कर रहा हूं, इसलिए शायद ढांचे में पहले से ही कुछ कार्यक्षमताएं हैं :) –

+0

@ लुकास मुझे एक समानता का सामना करना पड़ रहा है इस समय समस्या है। क्या आपको कभी अच्छा समाधान मिला? –

उत्तर

0

ऐसा लगता है कि .NET के साथ बहुत कम करना है।

लेकिन अपनी मशीनों को 'वर्कर थ्रेड' के रूप में सोचें, उपलब्ध सीपीयू (या अन्य महत्वपूर्ण संसाधन) पर उपलब्ध मशीनों का 'पूल' बनाएं, फिर प्रत्येक कार्य को अपने फिटनेस मशीन पर प्रत्येक नौकरी को धक्का देने के लिए अपने ज्ञान का उपयोग करें। ।

यदि आप सभी नौकरियों को पहले से जानते हैं, तो संभवतः आप सही मशीनों पर सही क्रम में शेड्यूल करने के लिए 'सर्वश्रेष्ठ फिट' एल्गोरिदम का उपयोग कर सकते हैं। आप 'काटने वाले स्टॉक' एल्गोरिदम भी देख सकते हैं; http://en.wikipedia.org/wiki/Cutting_stock_problem ...

+0

** Appliedalgo.com ** - ऐसा किया जाता है जब आप इसे यूएसडी 500 के लिए खरीद सकते हैं, शेड्यूलिंग/निष्पादन ट्रैकिंग/भार संतुलन सब कुछ –

+0

यह वित्त पोषण के आधार पर इसे खरीदने के लिए सस्ता हो सकता है। लेकिन ध्यान दें कि केवल वह पैकेज "64 बिट विंडोज 7 या इससे ऊपर" है (उनकी वेबसाइट के अनुसार)। –

+0

यह जावा तक भी बैलेंस जॉब्स लोड कर सकता है, लेकिन केवल 64 बिट विंडोज़ पर। –

2
  1. Dryad linq पर देखें। यह पहले से ही अकादमिक रिलीज में है और उपयोगी हो सकता है।
  2. Win HPC server - माइक्रोसॉफ्ट से वितरित कंप्यूटिंग के लिए एंटरप्राइज़ समाधान।
  3. कुछ code samples जो प्रदर्शन काउंटर का विश्लेषण करके लोड संतुलन बनाने में मदद कर सकते हैं।
  4. माइक्रोसॉफ्ट के पास StockTrader नमूना अनुप्रयोग (स्रोतों के साथ) है, जो हाथ से लिखे गए राउंडरोबिन लोड संतुलन के साथ वितरित एसओए का उदाहरण है।
0

माइक्रोसॉफ्ट ने हाल ही में अपने क्विंसी शेड्यूलर पर paper प्रकाशित किया। यदि आप सीपीयू उपयोग के लिए बस अनुकूलित कर रहे हैं तो एक बहुत ही सरल सॉल्वर वैश्विक इष्टतम पा सकता है। यदि आपको अधिक अक्षों में अनुकूलन की आवश्यकता है तो स्पष्ट रूप से समस्या स्थान अधिक जटिल होगा।

आपका क्लस्टर कितना बड़ा है? विफलता के मामलों के आसपास आप अनुकूलित करने के साथ कैसे निपटते हैं? क्या वे मायने रखते हैं? क्या आईओ है? क्या डेटा में डिस्क एफ़िनिटी है? नौकरी के टुकड़े को चलाने के लिए एक से अधिक जगह है? सभी चीजों पर विचार करने के लिए।

1

वैकल्पिक दृष्टिकोण के रूप में, आप प्रत्येक मशीन के शीर्ष प्रदर्शन अनुपात अनुमानों का उपयोग नौकरियों को निर्धारित करने के लिए कर सकते हैं। यह केवल तभी प्रभावी हो सकता है जब आप लोड-संतुलित सिस्टम के सीपीयू रनटाइम प्रदर्शन पर विचार कर रहे हों। आई/ओ, क्लस्टर का आकार, नेटवर्क प्रदर्शन, मेमोरी मॉडल के प्रकार इत्यादि से संबंधित मुद्दे इस दृष्टिकोण से उपेक्षित हैं। http://dx.doi.org/10.1145/1513895.1513901

अधिक सटीक (लोड लोड संतुलित नौकरी वितरण) दृष्टिकोण के लिए एक प्रस्ताव देखें एल्गोरिदम - कंप्यूटर आर्किटेक्चर निर्भर एक। इस मामले में, उच्च प्राथमिकता वाले नौकरी को सर्वोत्तम मांगों के लिए निर्धारित किया जा सकता है जो इसकी मांगों को पूरा करता है - लेकिन आपको पहले सर्वर पर नौकरियों का इष्टतम मैपिंग निर्धारित करने की आवश्यकता है।आप मल्टीप्रोसेसरों (ओएसप्रोसेसर नहीं) पर ओएस शेड्यूलिंग एल्गोरिदम के कुछ तरीकों को भी लागू कर सकते हैं। आशा है कि आपको यह सहायक मिलेगा।

संबंधित मुद्दे