2016-10-17 11 views
9

में थ्रॉटलिंग एज़ूर स्टोरेज कतार प्रसंस्करण मैंने एक एज़ूर फ़ंक्शन क्यू ट्रिगर के साथ एक एज़ूर फ़ंक्शन ऐप बनाया है जो एक कतार को संसाधित करता है जिसमें प्रत्येक कतार आइटम एक यूआरएल होता है। फ़ंक्शन बस यूआरएल की सामग्री डाउनलोड करता है। मेरे पास एक और फ़ंक्शन है जो किसी साइट के XML साइटमैप को लोड और पार्स करता है और कतार में सभी पेज यूआरएल जोड़ता है। मेरी समस्या यह है कि फ़ंक्शंस ऐप बहुत तेज़ी से चलता है और यह वेबसाइट को हथियार देता है ताकि यह सर्वर त्रुटियों को वापस करना शुरू कर दे। क्या स्पीड ऐप चलाने की गति को सीमित/थ्रॉटल करने का कोई तरीका है?एज़ूर फ़ंक्शन ऐप

मैं निश्चित रूप से, एक सरल वेब नौकरी लिख सकता हूं जो उन्हें क्रमशः संसाधित करता है (या कुछ एसिंक के साथ लेकिन समवर्ती अनुरोधों की संख्या सीमित करता है), लेकिन मुझे वास्तव में एज़ूर फ़ंक्शंस की सादगी पसंद है और "सर्वरलेस" कंप्यूटिंग।

उत्तर

15

कुछ विकल्प हैं जिन पर आप विचार कर सकते हैं।

सबसे पहले, कुछ knobs हैं जिन्हें आप host.json में कॉन्फ़िगर कर सकते हैं जो नियंत्रण कतार प्रसंस्करण (दस्तावेज here)। queues.batchSize घुंडी यह है कि एक समय में कितने कतार संदेश प्राप्त किए जाते हैं। यदि 1 पर सेट किया गया है, तो रनटाइम एक समय में 1 संदेश लाएगा, और केवल उस संदेश के लिए प्रसंस्करण पूर्ण होने पर ही अगली बार लाएगा। यह आपको एकल उदाहरण पर क्रमिकरण का कुछ स्तर दे सकता है। डिफ़ॉल्ट संदेशों से कि कतारबद्ध दिखाई और तुरंत प्रसंस्करण के लिए तैयार हो जाते हैं कर रहे हैं -

एक अन्य विकल्प जिन संदेशों को आप इस तरह से है कि वे बाहर स्थान दिया गया है में enqueue पर NextVisibleTime स्थापित करने के लिए के लिए हो सकता है।

एक समय के लिए एक साइट के लिए सभी यूआरएल के संग्रह के साथ एक संदेश को एनक्यू करने के लिए एक अंतिम विकल्प हो सकता है, इसलिए संदेश संसाधित होने पर, आप अपने फ़ंक्शन में क्रमशः यूआरएल को संसाधित कर सकते हैं, और उस तरह समानांतरता को सीमित करें।

+2

धन्यवाद @ mathewc। मैं आपके दूसरे सुझाव के साथ गया (अगला VisibleTime सेट)। यह समझने के लिए मुझे थोड़ा सा लगा कि यह कैसे करना है लेकिन यह अच्छी तरह से काम कर रहा है। यदि कोई कोई चोटी लेना चाहता है तो मेरा कोड https://github.com/alindgren/SiteWarmer पर है। – Alex

+0

queues.batch कतार संदेश की संख्या कुल मिलाकर कुल मिलाकर? या बस उस समारोह के प्रति उदाहरण? – Parker

+0

बैचसाइज हमारे कतार मतदान लूप के प्रत्येक पुनरावृत्ति पर प्राप्त संदेशों की संख्या है। अर्थात। यह वह संख्या है जिसे हम Azure Queues GetMessagesAsync कॉल में पास करते हैं। यह मतदान लूप एक समारोह के लिए विशिष्ट है - प्रत्येक कतार समारोह का अपना स्वयं का होता है। – mathewc

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