2016-03-19 5 views
8

हम तीसरे पक्ष के http कॉल करने के लिए अजवाइन का उपयोग कर रहे हैं। हमारे पास लगभग 100+ कार्य हैं जो केवल तृतीय पक्ष HTTP API कॉल को कॉल करते हैं। कुछ कार्य एपीआई को थोक में कहते हैं, उदाहरण के लिए सुबह सुबह 4 बजे आधे मिलियन अनुरोध, जबकि कुछ एपीआई कॉल की निरंतर स्ट्रीम प्रति सेकंड लगभग एक या दो बार अनुरोध प्राप्त करते हैं।तृतीय पक्ष HTTP कॉल के लिए सेलरी अनुकूलित करना

अधिकांश एपीआई कॉल प्रतिक्रिया समय 500 से 800 एमएस के बीच है।

हम अजवाइन के साथ बहुत धीमी डिलीवरी दरें देख रहे हैं। उपर्युक्त कार्यों में से अधिकांश के लिए, अधिकतम वितरण दर लगभग 100/एस (अधिकतम) लगभग 1/एस (मिनट) तक है। मेरा मानना ​​है कि यह बहुत खराब है और कुछ निश्चित रूप से गलत है, लेकिन मैं यह समझने में सक्षम नहीं हूं कि यह क्या है।

हमने 3 सर्वरों के क्लस्टर के साथ शुरुआत की और वृद्धिशील रूप से इसे 7 सर्वरों का समूह बना दिया, लेकिन इसमें कोई सुधार नहीं हुआ। हमने ऑटोस्केल से तय 10, 20, 50, 100 श्रमिकों के लिए विभिन्न समवर्ती सेटिंग्स के साथ प्रयास किया है। कोई परिणाम बैकएंड नहीं है और हमारा ब्रोकर RabbitMQ है।

चूंकि हमारा कार्य निष्पादन समय बहुत छोटा है, अधिकतर के लिए एक सेकंड से भी कम, हमने विभिन्न मूल्यों के लिए प्रीफेच गिनती असीमित बनाने की भी कोशिश की है।

--time-limit=1800 --maxtasksperchild=1000 -Ofair -c 64 --config=celeryconfig_production

सर्वर 64 जी रैम, Centos 6.6 है।

क्या आप मुझे यह बता सकते हैं कि क्या गलत हो सकता है या इसे हल करने के बारे में पॉइंटर्स क्या हो सकता है?

क्या हमें gevents के साथ जाना चाहिए? हालांकि मुझे यह पता नहीं है कि यह क्या है।

+0

RabbitMQ में आपकी कतार कितनी भरी है? कतार खाली होने पर RabbitMQ सबसे तेज़ है। आप RabbitMQ मशीन के सीपीयू उपयोग की निगरानी कर सकते हैं। यदि आप भारी CPU उपयोग देखते हैं, तो शायद ऐसा इसलिए है क्योंकि खरगोश एमक्यू विशाल कतार आकार के साथ सामना करने के लिए बहुत कुछ कर रहा है। – LearnerEarner

+1

शायद मूर्खतापूर्ण आवाज हो और यकीन है कि आपने इस पर ध्यान दिया है, लेकिन क्या आपने जांच की है कि क्या तृतीय पक्ष सर्वर लोड के तहत अच्छा व्यवहार कर रहा है? क्या यह अभी भी 500-800ms में प्रतिक्रिया दे रहा है जब भी आप इसे कई समवर्ती अनुरोध के साथ दबाते हैं? – LearnerEarner

+0

http://www.rabbitmq.com/blog/2012/05/11/some-queuing-theory-throughput-latency-and-bandwidth/ – LearnerEarner

उत्तर

5

सबसे पहले - जीआईएल - यह कोई मामला नहीं होना चाहिए, क्योंकि अधिक मशीनों को तेजी से जाना चाहिए। लेकिन - कृपया जांचें कि लोड केवल सर्वर के एक कोर पर जाता है ...

मुझे यकीन नहीं है कि पूरे मामले में पूरे सेलेरी का अच्छा विचार है या नहीं। यह बहुत सारी कार्यक्षमता के साथ, महान सॉफ्टवेयर है। लेकिन, यदि इसकी आवश्यकता नहीं है, तो कुछ आसान उपयोग करना बेहतर होता है - बस उसमें से कुछ सुविधाओं में हस्तक्षेप होता है। मैं छोटे पीओसी लिखूंगा, अन्य क्लाइंट सॉफ़्टवेयर की जांच करें, जैसे कि पिका। अगर इससे मदद नहीं मिलेगी - समस्या बुनियादी ढांचे के साथ है। अगर मदद करता है - आपके पास समाधान है। :)

यह बताने में वाकई मुश्किल है कि क्या हो रहा है। यह आईओ, या बहुत से नेटवर्क कॉल के साथ कुछ हो सकता है ... मैं कुछ कदम उठाने के लिए वापस कदम उठाऊंगा। एकीकरण परीक्षण लिखें, लेकिन पूर्ण टीसीपी स्टैक का उपयोग करने के लिए 2-3 मशीनों का उपयोग करना सुनिश्चित करें। सीआई रखना सुनिश्चित करें, और दिन में एक बार परीक्षण करें, या तो - यह देखने के लिए कि चीजें सही दिशा में जा रही हैं या नहीं।

+0

कुछ विशिष्ट मामलों में भी जीआईएल 100ms के बाद रिलीज नहीं होता है –

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