2013-03-11 4 views
13

के साथ असंतोषजनक नौकरी पुश प्रदर्शन हमारे वेब अनुप्रयोग के पीछे के अंत का समर्थन करने के लिए python-rq का उपयोग करने का प्रयास कर रहा है, लेकिन नई नौकरियों को धक्का देना बहुत लंबा लगता है - 12 सेकंड तक।पायथन आरक्यू

enqueue_call फ़ंक्शन कॉल निष्पादित करते समय प्रदर्शन हिट होता है, खासकर जब सिस्टम से जुड़े कार्यकर्ता प्रक्रियाओं की संख्या बढ़ जाती है (200 से अधिक)।

प्रणाली इस प्रकार काम करता है:

  1. सामने के छोर काम कतार सर्वर से नौकरियों धक्का। कार्य को निष्पादित करने के वास्तविक तर्कों के अतिरिक्त, नौकरी के तर्कों (जैसे टाइमआउट और टीटीएल) में पास करने के लिए यह enqueue_call फ़ंक्शन का उपयोग करता है।
  2. एकाधिक प्रक्रियाएं (कई मशीनों पर फैली हुई) श्रमिकों को चला रही हैं, प्रत्येक यूनिक्स screen के तहत। कतारों को सुनने के लिए Worker.work() अनंत लूप फ़ंक्शन निष्पादित करते हुए, दस्तावेज़ प्रलेखन में प्रदान किए गए पैटर्न का पालन करते हैं।
  3. प्रसंस्करण के दौरान, कुछ कार्य नए होते हैं, आमतौर पर उसी कतार पर जो वे चल रहे हैं।

बुनियादी ढांचे के बारे में:

  • Redis सर्वर चलाता है कि इस कार्य के लिए कतार इसे करने के लिए समर्पित है। इसके अलावा, दृढ़ता अक्षम है। यह 4 जीबी रैकस्पेस सर्वर में चल रहा है।
  • कार्य कतार के साथ सर्वर पर redis-benchmark चलाते समय, हमें अधिकतर मानक के लिए औसतन 20000 आर/एस परिणाम मिलते हैं।

हम इस तरह की स्थिति में नई नौकरियों के लिए पुश प्रदर्शन में सुधार कैसे कर सकते हैं? क्या कोई बेहतर पैटर्न है जिसका हमें उपयोग करना चाहिए?

+0

तो (अजवाइन के लिए) प्रदर्शन में बहुत सुधार स्विचन था हो सकता है? मुझे एक ही समस्या का सामना करना पड़ रहा है। –

+0

मैं वर्तमान में एक ही परियोजना पर काम नहीं कर रहा हूं। हालांकि, हमने बैक एंड के रूप में 'आरक्यू' का उपयोग करना जारी रखा, और अंततः बुनियादी ढांचे को साफ करने के दौरान प्रदर्शन समस्याओं को खत्म कर दिया गया। मैं आपके विशिष्ट उपयोग मामले के लिए 'सेलेरी' पर स्विचिंग या 'आरक्यू' के साथ शेष की सिफारिश नहीं कर सका; हालांकि, मैं * परीक्षणों का सुझाव देना चाहता हूं। यह उतना कठिन नहीं हो सकता जितना आप प्रारंभ में सोचेंगे, और मैं ** गारंटी देता हूं ** अच्छे परीक्षण बनाने के साथ व्यतीत किए गए किसी भी समय अंततः भुगतान करेगा, क्योंकि आप अपने सिस्टम की प्रकृति को बेहतर ढंग से समझते हैं। शुभकामनाएँ! –

उत्तर

1

12 सेकंड? यह पागल है।

क्या आपने अजवाइन का उपयोग करने पर विचार किया है?
कभी इस्तेमाल किया redis-RQ, लेकिन से मैं क्या डॉक्स के आधार पर देखें कि यह कार्यकर्ताओं की बड़ी संख्या के लिए वास्तव में अच्छा नहीं है
Redis कतार आमतौर पर BLPOP आदेश, जो कई ग्राहकों के साथ काम कर सकते हैं, लेकिन कौन जानता है के आधार पर कितना कर सकते हैं वास्तव में एक कुंजी के लिए संभाल लें।

तो मैं सुझाव है कि आप अजवाइन या अजगर-RQ के लिए अपने स्वयं के कार्यों वितरक लिखने के लिए स्विच करने के लिए है, जो अभ्यस्त आसान स्विचिंग