Heroku: वेब dyno बनाम कार्यकर्ता dyno? मुझे कितने / किस अनुपात की आवश्यकता है?


82

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

इसके अलावा, मैं इस बारे में उलझन में हूं कि वे प्रत्येक डायनो के लिए घंटों की मात्रा से क्या मतलब रखते हैं।

http://www.heroku.com/pricing

मैं भी इस लेख पर हुआ। उनके सुझाए गए समाधानों में से एक के रूप में, उन्होंने डायनोस की मात्रा बढ़ाने के लिए कहा। वे किस प्रकार के डायनो का जिक्र यहां कर रहे हैं?

http://devcenter.heroku.com/articles/backlog-too-deep

जवाबों:


58

आपका सबसे अच्छा संकेत है अगर आपको अधिक डायनोस की जरूरत है (देवदार पर उर्फ ​​प्रक्रियाएं) आपके हरोकू लॉग हैं। सुनिश्चित करें कि आप विस्तारित लॉगिंग (यह मुफ़्त है) में अपग्रेड करें ताकि आप अपने लॉग को पूंछ सकें।

आप heroku.router प्रविष्टियों की तलाश कर रहे हैं और जिस मूल्य पर आप सबसे अधिक रुचि रखते हैं वह है कतार मूल्य - यदि यह लगातार 0 से अधिक है तो यह एक अच्छा संकेत है जिसे आपको अधिक dynos जोड़ने की आवश्यकता है। अनिवार्य रूप से इसका मतलब है कि आपकी प्रक्रिया की तुलना में अधिक अनुरोध आ रहे हैं ताकि वे संभाल सकें ताकि उन्हें कतारबद्ध किया जा सके। यदि वे बिना किसी डेटा को लौटाए बहुत लंबी कतार में खड़े हो जाते हैं, तो उनका समय समाप्त हो जाएगा।

कोई आदर्श अनुपात नहीं है जिससे मैं डरता हूं, आपके पास एक ऐप हो सकता है जो 100 अनुरोधों के लिए कई वेब प्रक्रियाओं की आवश्यकता है, लेकिन सिर्फ श्रमिकों का उपयोग नहीं करता है। अगर आपको बैकग्राउंड में प्रोसेसिंग कर रहे हैं जैसे ईमेल आदि भेज रहे हैं तो आपको केवल श्रमिक प्रक्रियाओं की आवश्यकता है।

ps बैकलॉग बहुत गहरी एक डायनो वेब प्रक्रिया होगी जो इसका कारण होगी।

अद्यतन: 26 मार्च 2013 को हरोकू ने लॉग आउट से कतार और प्रतीक्षा क्षेत्रों को हटा दिया।

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


12
हेरोकू राउटर लॉग को देखने के लिए,heroku logs -p router --tail
नाथन हर्स्ट

1
मुझे एक कतार नहीं दिख रही है, मैं dyno = web.1 कनेक्ट = 2ms सेवा = 4ms स्थिति = 200 बाइट्स = 43 देख रहा हूँ
Jaqx

8
उन्हें क्यों हटाया?
एटिलियो

6
आप हर्को लैब्स एड-ऑन को सक्षम करके भी यह जानकारी प्राप्त कर सकते हैं log-runtime-metrics। ऐसा करने के लिए निम्न कमांड चलाएँ heroku labs:enable log-runtime-metrics। और अधिक पढ़ें: devcenter.heroku.com/articles/log-runtime-metrics
जेरेमी फॉक्स

3
stackoverflow.com/a/19965981/1233555 - हरोकू यादृच्छिक रूटिंग में चला गया है, इसलिए कुछ डायनोस में स्टैकिंग हो सकता है जबकि अन्य डायनोस मुक्त हैं। यह सुनिश्चित करने से बचें कि आपके वेब dynos में सभी अनुरोध बहुत जल्दी से संभाले जाते हैं।
क्रिसपॉनिक्स

15

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


1
"डायनोस मूल रूप से प्रक्रियाएं हैं जो आपके उदाहरण पर चलती हैं।" यह गलत बयान है। विभिन्न उदाहरणों में डायनो मौजूद है।
नील मिडलटन

9

बहुत से लोगों ने उल्लेख किया है कि कोई ज्ञात अनुपात नहीं है और यह कि वेब कर्मचारियों के 'पृष्ठभूमि' के श्रमिकों का अनुपात जो आप चाहते हैं, इस बात पर निर्भर है कि आपने अपने आवेदन को कैसे डिज़ाइन किया है - यह सही है। हालाँकि मुझे लगा कि यह जोड़ना उपयोगी हो सकता है कि अंगूठे के एक सामान्य नियम के रूप में, आप अपने वेब कर्मचारियों को चाहते हैं - और इस प्रकार वे जो नियंत्रक कार्य कर रहे हैं - वे ब्राउज़र क्रियाओं से प्रतिक्रिया समय में विलंबता को कम करने के लिए त्वरित और बहुत हल्के होने के लिए। अगर कुछ ब्राउज़र कार्रवाई है, जो सेवा करने के लिए वास्तविक समय के आधे से एक सेकंड से अधिक की आवश्यकता होगी, तो आप शायद किसी प्रकार की प्रणाली को आर्किटेक्ट करना चाहेंगे जो उस कार्रवाई के थोक को एक कतार में धकेलता है।

फिर आप एक ऑफ़लाइन कार्यकर्ता dyno (s) को डिज़ाइन करेंगे जो इस कतार की सेवा करेगा। वे अधिक समय ले सकते हैं क्योंकि उनके आउटपुट पर कोई HTTP प्रतिक्रियाएं लंबित नहीं हैं। शायद पृष्ठ जो आपने प्रारंभिक ब्राउज़र अनुरोध से प्रदान किया था, जो कार्रवाई को आगे बढ़ाता है कुछ जावास्क्रिप्ट की सेवा करेगा जो एक धागा शुरू करता है जो यह देखने के लिए जांचता है कि क्या अनुरोध हर 5 सेकंड में समाप्त हो गया है, या उन पंक्तियों के साथ कुछ।

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


3

https://stackoverflow.com/a/19965981/1233555 - हरोकू यादृच्छिक रूटिंग में चला गया है, इसलिए कुछ डायनोज़ अन्य डायनो मुक्त होने के दौरान (जब वे एक लंबे अनुरोध पर काम करते हैं) कतारें खड़ी हो सकती हैं। यह सुनिश्चित करने से बचें कि आपके वेब dynos में सभी अनुरोध बहुत जल्दी से संभाले जाते हैं। यह आपको अधिक काम करने वाले डायनोस की आवश्यकता के दौरान वेब डायनो की संख्या कम करेगा।

आपको अपने वेब ऐप को सपोर्ट करने वाले कंसीडर के बारे में भी ध्यान रखने की ज़रूरत है, जो केवल कुछ रेल्स ही करते हैं - यूनिकॉर्न, या सावधानी से लिखे गए कोड (I / O के लिए जो EventMachine को ब्लॉक नहीं करता है) को थिन के साथ आज़माएं।

आपको संभवतः गणना करने के बजाय, यह देखने की कोशिश करनी होगी कि आपको प्रत्येक प्रकार के कितने डायनो की आवश्यकता है। सुनिश्चित करें कि उनकी नई अवशेष रिपोर्टें डिनो कतार - उपरोक्त लिंक देखें।


1

संक्षिप्त उत्तर यह है कि आपको अपनी कतारों को नीचे रखने के लिए जितनी आवश्यकता है, उतनी ही चाहिए।

जैसा कि जॉन का वर्णन है, यदि आप अपने लॉग में एक कतार देखना शुरू करते हैं तो आपको अधिक डायनोस की आवश्यकता होती है। यदि आपको अपनी पृष्ठभूमि की कतारें बहुत लंबी लगने लगती हैं (आपको यह जानकारी कैसे मिलती है, यह इस बात पर निर्भर करता है कि आपने क्या लागू किया है) तो आपको और अधिक श्रमिकों की आवश्यकता है।

इसका कोई अनुपात नहीं है क्योंकि यह आपके एप्लिकेशन डिज़ाइन और उपयोग पर बहुत अधिक निर्भर है।


1
ठीक है धन्यवाद। मैं dynos द्वारा आप वेब dynos मतलब मान रहा हूँ। इसके अलावा, मैं अपने लॉग में एक कतार की जांच कैसे करूं? अधिक विशेष रूप से मैं जो पूछ रहा हूं वह यह है कि जब मैं अपना लॉग पढ़ता हूं तो चीजें कैसे जमा हो रही हैं, मैं कैसे पहचानूं? मैं एक रेल डेवलपर हूं, इसलिए मैं अक्सर एक स्थानीय सर्वर चलाने और उन लॉग्स को पढ़ने के साथ व्यवहार करता हूं, लेकिन मुझे यकीन नहीं है कि मुझे पता होगा कि अगर मैंने देखा तो एक कतार की पहचान कैसे करें।
वारिस

1
मेरा जवाब बताता है कि कतार के आकार की पहचान कैसे करें - पूंछ आप हरोकू पर लॉग करते हैं और राउटर प्रविष्टियों और कतार = मान की तलाश करते हैं। आपके स्थानीय लॉग आपकी मदद नहीं करेंगे - आपको heroku logs -fकमांड लाइन से उपयोग करने की आवश्यकता है ।
जॉन बेयोन

1
@ जॉनहोनन ओके, धन्यवाद। बाद में पुनर्मिलन तक इसका एहसास नहीं हुआ।
वारिस 22
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.