2010-05-10 25 views
10

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

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

मैं खोज का एक छोटा सा है और मैं उसे वेब एप्लिकेशन पर थ्रॉटल भीतर का API कॉल कवर और मैं आउटबाउंड के प्रवाह को नियंत्रित करने के छोटे से चर्चा पा सकते हैं पाया है ट्यूटोरियल सामग्री और पहले से बने पुस्तकालयों की भारी राशि किया है कहता है।

शौकिया वेब डेवलपर और रेल की नौसिखिया दोनों होने के नाते, यह पूरी तरह से संभव है कि मैं गलत स्थानों में गलत खोज निष्पादित कर रहा हूं। इसलिए मेरे सवालों हैं:

  • वहाँ एक अच्छा वेबसाइट वहाँ बाहर है कि आउटबाउंड API अनुरोधों थ्रॉटल से संबंधित सामग्री है रेल ट्यूटोरियल के योग?

  • क्या कोई रूबी रत्न या अन्य पुस्तकालय हैं जो मुझे अनुरोधों को कम करने में मदद करेंगे?

मैं कैसे मैं API कॉल का प्रबंधन करने के DelayedJob या Resque की तरह एक कतार आधारित कार्यकर्ता का उपयोग कर एक थ्रॉटलिंग प्रणाली लिखने के बारे में जाना सकता है कुछ विचार है, लेकिन मैं नहीं बल्कि शेष साइट का निर्माण मेरी सप्ताहांत बिताते थे अगर पहले से ही एक अच्छा पूर्व निर्मित समाधान है।

उत्तर

0

कोई भी आउटबाउंड थ्रॉटलिंग के बारे में बात करने का कारण यह नहीं है कि यह आमतौर पर बहुत छोटा है, क्योंकि इसे नियंत्रित करता है। बैंडविड्थ को नियंत्रित करना थोड़ा कठिन हो सकता है, लेकिन अनुरोध की संख्या को नियंत्रित कर सकता है?

ri Kernel#sleep 

तो, आप की अनुमति हो, तो प्रति मिनट तुम सिर्फ सोने के (6) प्रत्येक कॉल

+0

ऐ, जो एक उचित समाधान की तरह लगता है- हालांकि मुझे इसके साथ कुछ समस्याएं हैं। 1) नींद के समय को अनुकूलित करने के लिए यह कुछ बढ़िया ट्यूनिंग लेगा और 2) ऐसा लगता है कि नींद की अवधि के दौरान कार्यकर्ता धागा पूरी तरह से बंद हो जाएगा। मैं एक ऐसा समाधान पसंद करूंगा जो कार्यकर्ता को एपीआई कॉल के निष्पादन को रोक देगा और अन्य कार्यों को संसाधित करेगा यदि कॉल सीमा केवल लटकने के बजाय पार हो जायेगी। – Sharpie

+0

1) आपका क्या मतलब अनुकूलित है? आप 0% सीपीयू उपयोग से अधिक कुशल नहीं हो सकते हैं! 2) हां यह बात है!यदि आप अन्य कार्यों को करना चाहते हैं, तो उन्हें एक और धागे पर दें। मुझे समझ में नहीं आता कि आप दैनिक बैच नौकरी के पर्दे के बारे में इतना चिंतित क्यों हैं। *) उपयोग – user336851

+0

उपयोग के बारे में उत्तर संपादित किया गया, ठीक है, मुझे लगता है कि इस बिंदु पर मेरी मुख्य चिंता यह है कि मैं ऐपोकू जैसे मंच पर ऐप को तैनात करने पर विचार कर रहा हूं। इस मामले में मैं अनुकूलित करना चाहता हूं ताकि प्रत्येक थ्रेड कार्यों के माध्यम से यथासंभव कुशलतापूर्वक काम कर सके। चूंकि प्रति कार्यकर्ता हरोकू शुल्क, मैं जितना संभव हो उतना कम कार्यकर्ता धागे का उपयोग करना चाहता हूं। शायद मैं इस मुद्दे को अत्यधिक जटिल करने की कोशिश कर रहा हूं ... सरल समाधान अच्छे समाधान हैं। – Sharpie

2

अब इसके लिए एक मणि है: throttle-queue। यह एक कोड ब्लॉक लेता है और यह सुनिश्चित करता है कि यह प्रति सेकंड केवल x बार निष्पादित हो जाता है। यह रीडमे से लिया गया एक उदाहरण है, जो प्रति सेकंड केवल तीन फाइलें लाएगा:

require 'throttle-queue' 

q = ThrottleQueue.new 3 
files.each {|file| 
    q.background(file) { 
     fetch file 
    } 
} 
संबंधित मुद्दे