2014-12-20 6 views
19

डोकर और शेड्यूलिंग अमेज़न के ईसीएस की तरह & आयोजन सेवाओं के आगमन के साथ, मैं अपने नोड एपीआई तैनात करने के लिए इष्टतम तरीका निर्धारित करने के लिए कोशिश कर रहा हूँ। डॉकर और ईसीएस के साथ, मैं मास्टर प्रक्रिया और एकाधिक कार्यकर्ता प्रोसेसर बनाकर documentation में सुझाए गए एसिंक्रोनस त्रुटि की स्थिति में नोड ऐप को क्रैश करने के लिए नोड क्लस्टर लाइब्रेरी का लाभ उठाना चाहता हूं।अमेज़ॅन ईसीएस पर डॉकर में नोड एपीआई चलाने का सबसे अच्छा तरीका क्या है?

क्लस्टर दृष्टिकोण के लाभों में से एक, शान से निपटने त्रुटियों के अलावा, प्रत्येक उपलब्ध सीपीयू के लिए एक कार्यकर्ता प्रोसेसर पैदा कर रही है। लेकिन क्या यह डॉकर दुनिया में समझ में आता है? क्या यह एक एकल डॉकर कंटेनर में चल रहे कई नोड प्रक्रियाओं को समझने के लिए समझ में आता है जिसे ईसीएस पर ईसी 2 उदाहरणों के समूह में स्केल किया जा रहा था?

नोड क्लस्टर दृष्टिकोण के बिना, मैं गलतियों को गलती से संभालने की क्षमता खो देता हूं और इसलिए मुझे लगता है कि कम से कम, मुझे प्रति डॉकर कंटेनर के लिए एक मास्टर और एक कार्यकर्ता प्रक्रियाएं चलनी चाहिए। मैं अभी भी उलझन में हूं कि ईसीएस के लिए कार्य परिभाषा में कितने सीपीयू परिभाषित किए जाएंगे। ECS documentation प्रत्येक कंटेनर उदाहरण के बारे में कुछ कहता है जिसमें प्रति सीपीयू 1024 इकाइयां होती हैं; लेकिन यह ईसी 2 गणना इकाइयों की तरह ही नहीं है, है ना? और इसके साथ ही, मुझे यह अधिकार प्राप्त करने के लिए उचित मात्रा में वीसीपीयू के साथ ईसी 2 इंस्टेंस प्रकारों को चुनना होगा?

मैं समझता हूँ कि सबसे इष्टतम विन्यास को प्राप्त मेरी विशिष्ट नोड API एप्लिकेशन बेंचमार्किंग के कुछ स्तर की आवश्यकता हो सकती है, लेकिन यह जहां शुरू करने के लिए का एक बेहतर विचार है करने के लिए भयानक होगा। हो सकता है कि कुछ अध्ययन/शोध मुझे करने की ज़रूरत है? पथ या सिफारिशों पर मुझे मार्गदर्शन करने के लिए कोई संकेतक सबसे सराहना की जाएगी!

संपादित करें: मेरी विशिष्ट प्रश्न सारांश यह है:

  1. यह मतलब है के रूप में एक डोकर कंटेनर के अंदर वर्णित here सुंदर क्रैश होने प्राप्त करने के लिए एक मास्टर/कार्यकर्ता क्लस्टर चलाने के लिए?

  2. क्या क्लस्टर डॉक्स में वर्णित लगभग समान कोड का उपयोग करना, require('os').cpus().length के माध्यम से उपलब्ध CPUs को 'स्केल' करने के लिए समझदारी होगी?

  3. ईसीएस कार्य परिभाषाओं के लिए प्रलेखन में अमेज़ॅन का क्या अर्थ है, जहां यह cpus सेटिंग के लिए कहता है, कि container instance has 1024 units per CPU? और इस सेटिंग के लिए एक अच्छा प्रारंभिक बिंदु क्या होगा?

  4. क्या एक नोड से ऊपर के आधार पर API की सेवा करने के उद्देश्य से एक ईसीएस क्लस्टर के लिए उपयोग करने के लिए उदाहरण के प्रकार के लिए एक अच्छा प्रारंभिक बिंदु हो सकता है? और उपलब्ध वीसीपीयू पिछले प्रश्नों को कैसे प्रभावित करते हैं?

उत्तर

3

ये सभी तकनीकें नई हैं और सर्वोत्तम प्रथाएं अभी भी स्थापित की जा रही हैं, इसलिए इन्हें केवल मेरे अनुभव से सुझावों पर विचार करें।

एक प्रक्रिया-प्रति-कंटेनर एक कठिन और तेज़ नियम की तुलना में एक सुझाव है। जब आप इसके लिए उपयोग करते हैं तो एक कंटेनर में कई प्रक्रियाओं को चलाने के लिए ठीक है, खासतौर पर इस मामले में जहां एक मास्टर प्रोसेस फोर्क कार्यकर्ता है। बस एक कंटेनर का उपयोग करें और इसे प्रति कोर एक प्रक्रिया को फोर्क करने दें, जैसा कि आपने प्रश्न में सुझाव दिया है।

ईसी 2 पर, उदाहरण प्रकारों में कई वीसीपीयू हैं, जो ओएस के मूल के रूप में दिखाई देंगे। ईसीएस क्लस्टर के लिए एक ईसी 2 इंस्टेंस प्रकार का उपयोग करें जैसे कि सी 3 एक्सक्लर्ज चार वीसीपीयू के साथ। ईसीएस में यह 4096 सीपीयू इकाइयों का अनुवाद करता है। यदि आप ऐप को सभी 4 वीसीपीयू का उपयोग करना चाहते हैं, तो एक कार्य परिभाषा बनाएं जिसके लिए 4096 सीपीयू इकाइयों की आवश्यकता हो।

लेकिन यदि आप ऐप को क्रैश होने से रोकने के लिए यह सब कर रहे हैं तो आप कंटेनर को क्रैश होने पर पुनरारंभ करने के लिए केवल पुनरारंभ नीति का उपयोग कर सकते हैं। ऐसा प्रतीत होता है कि पुनरारंभ नीतियां अभी तक ईसीएस द्वारा समर्थित नहीं हैं।

+0

प्रतिक्रिया के लिए धन्यवाद, निश्चित रूप से सहायक। तो प्रति ईसी 2 उदाहरण के लिए एक डॉकर कंटेनर? यह निश्चित रूप से उन तरीकों में से एक था जो मेरे दिमाग को पार करते थे, यह इसे आसान रखता है। मुझे यकीन नहीं था कि ईसी 2 उदाहरण पर डॉकर कंटेनर को ढेर करने का कोई फायदा हुआ है, लेकिन मुझे लगता है कि अगर मैं ऐप लेवल (कंटेनर के अंदर) पर प्रत्येक वीसीपीयू के लिए फोर्किंग कर रहा हूं, तो कंटेनर ढेर करने से ज्यादा समझ नहीं आती है। मैं यह क्यों कर रहा हूं, इस संबंध में यह वास्तव में ऐप को क्रैश होने से रोकने के बारे में नहीं है, यह शानदार तरीके से क्रैश होने के बारे में है (http अनुरोधों को सुनना बंद करें, त्रुटि रिकॉर्ड करें, और फिर प्रक्रिया समाप्त करें)। –

+0

मास्टर प्रक्रिया समय-समय पर मजदूरों को स्मृति रिसाव के खिलाफ असफल-सुरक्षित के रूप में मारने के लिए भी उपयोगी है। –

+0

खुशी ने मदद की।मैं असफल सुरक्षित लक्ष्य को समझता हूं, लेकिन ऐसा लगता है कि एक ऑटोरेस्टार्ट तंत्र के माध्यम से ऐप में संभावित रूप से छुपा बग एक आखिरी उपाय होना चाहिए। और निश्चित रूप से, यदि आप सभी कोर का उपयोग कर रहे हैं तो प्रति उदाहरण केवल एक कंटेनर चलाना ठीक है। –

0

डोकर दुनिया में आप डोकर कंटेनर प्रति 1 NodeJS चल पाएंगे, लेकिन आप अपने EC2 उदाहरणों में से प्रत्येक पर कई ऐसे कंटेनर चलाए जा सकें। यदि आप fig जैसे कुछ का उपयोग करते हैं तो आप कई अनावश्यक कंटेनरों को एक उदाहरण चलाने के लिए fig scale <n> का उपयोग कर सकते हैं। इस तरह आपको समय से पहले अपने नोडज गिनती को परिभाषित करने की आवश्यकता नहीं है और आपकी प्रत्येक नोडज प्रक्रियाओं को दूसरों से अलग किया जाता है।

+0

हाँ, मैं उत्पादन में अंजीर की तरह कुछ भी नहीं इस्तेमाल करूँगा; जैसा कि मैंने अपने प्रश्न में उल्लेख किया है, मेरी योजना अमेज़ॅन की कंटेनर सेवा का उपयोग करना है जो ऑर्केस्ट्रेशन और शेड्यूलिंग को संभालती है। यह कहा गया है कि, यहां तक ​​कि एक अंजीर वातावरण में, अनुप्रयोग स्तर पर कई प्रक्रियाएं चलने के बिना आप क्लस्टर मॉड्यूल प्रलेखन में वर्णित त्रुटियों को गहराई से कैप्चर और संभाल नहीं सकते हैं। एक व्यक्तिगत कंटेनर के अंदर कई प्रक्रियाओं को चलाने के लिए असामान्य नहीं है; दस्तावेज़ीकरण और कई समाधान ऐसे पैटर्न का सुझाव देते हैं। –

+0

सभी चीजें कहती हैं, मैं अभी भी ईसीएस के लिए कार्य परिभाषा पर सीपीयू इकाइयों के विकल्पों और ईसी 2, वीसीपीयू और कम्प्यूट इकाइयों के संबंध में उत्तर की तलाश कर रहा हूं। प्रतिक्रिया के लिए –

1
कि एक बहुत अच्छी पैटर्न की तरह लगता है

। यह एरलांग/ओटीपी के साथ क्या किया जाता है, और मुझे नहीं लगता कि कोई भी तर्क देगा कि यह ग्रह पर सबसे मजबूत प्रणालियों में से एक है। अब सवाल यह है कि कैसे कार्यान्वित किया जाए।

मैं Heroku या अन्य इसी तरह PaaS सिस्टम से पैटर्न में थोड़ा और अधिक परिपक्वता है कि लाभ उठाने होगा।मैं यह नहीं कह रहा हूं कि ऐसा करने के लिए अमेज़ॅन गलत जगह है, लेकिन बस इतना है कि आप उन अन्य क्षेत्रों में बहुत से काम कर चुके हैं जिनका आप अनुवाद कर सकते हैं। https://devcenter.heroku.com/articles/node-cluster

जहाँ तक vCPU और कंप्यूट इकाइयों के बीच संबंधों के रूप में, ऐसा लगता है कि यह सिर्फ 1/1024 की एक सीधी अनुपात है जैसे: उदाहरण के लिए, इस लेख में यह एक नुस्खा है। यह CPU उपयोग के आधार पर माइक्रोचार्ज की ओर एक कदम है। वे लैम्ब्डा काम के साथ भी इन्हें आगे ले जा रहे हैं। वे आपके द्वारा उपयोग किए जाने वाले दूसरे के अंशों के आधार पर आपको चार्ज कर रहे हैं।

+0

धन्यवाद। मैं मानता हूं कि हेरोोक और अन्य ने कुछ सुंदर भयानक प्रणालियों का विकास किया है। और डॉकर-क्षेत्र में, [डीआईएस] (http://deis.io/overview/) नामक एक परियोजना भी है जो डॉकर और कोरोस पर निर्मित एक हेरोकू-प्रेरित ओपन सोर्स कस्टम पास है। उस ने कहा, मैं एडब्ल्यूएस की नई कंटेनर सेवा, ईसीएस के साथ आगे बढ़ना और आगे बढ़ना चाहता हूं। उस ने कहा, एडब्ल्यूएस ईसी 2 में, गणना इकाइयां एक मीट्रिक का प्रतिनिधित्व करती हैं जो वे आती हैं, और "अमेज़ॅन ईसी 2 इंस्टेंस की पूर्णांक प्रोसेसिंग पावर का सापेक्ष उपाय प्रदान करती है।" यह ईसीएस कार्य परिभाषा पर सीपीयू सेटिंग के समान नहीं है। –

+0

मुझे लगता है कि मैं अभी भी ईसी 2 उदाहरण पर चलाने के लिए प्रक्रियाओं की आदर्श संख्या के रूप में थोड़ा उलझन में हूं। शायद मुझे हाइपरवाइजर कैसे काम करता है, इस बारे में और अधिक शोध करने की ज़रूरत है, लेकिन .. यदि मेरे पास एक डॉकर कंटेनर था जिसमें 2 प्रक्रियाएं थीं, तो मैं यह समझने की कोशिश कर रहा हूं कि प्रति ईसी 2 कितने कंटेनर चलाना है, और यह उस पर निर्भर है ईसी 2 इंस्टेंस प्रकार और आदर्श सेटअप कार्य परिभाषा की कॉन्फ़िगरेशन पर निर्भर है। ये वे चीजें हैं जिन्हें मैं समझने की कोशिश कर रहा हूं। –

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