हमारे पास एक वेब सेवा है जो बड़ी एमपी 3 फ़ाइलों की एक निश्चित सूची के छोटे, मनमाने ढंग से खंडों की सेवा करती है। एमपी 3 फाइलें एक अजगर आवेदन द्वारा ऑन-द-फ्लाई उत्पन्न होती हैं। मॉडल है, एक यूआरएल को एक जीईटी अनुरोध दें जो निर्दिष्ट करता है कि आप कौन से सेगमेंट चाहते हैं, प्रतिक्रिया में audio/mpeg
स्ट्रीम प्राप्त करें। यह एक महंगी प्रक्रिया है।क्या HTTP पर एक महंगी, अवरुद्ध पायथन प्रक्रिया के परिणामों की सेवा करने का कोई बेहतर तरीका है?
हम Nginx का उपयोग फ्रंट एंड अनुरोध हैंडलर के रूप में कर रहे हैं। Nginx सामान्य अनुरोधों के लिए कैशिंग प्रतिक्रियाओं का ख्याल रखता है।
हमने शुरू में नर्गिनक्स से अनुरोधों को संभालने के लिए बैकडोडो का उपयोग करने की कोशिश की। जैसा कि आप उम्मीद करेंगे, अवरुद्ध एमपी 3 ऑपरेशन ने टोरनाडो को अपनी चीज (एसिंक्रोनस I/O) करने से रोक दिया था। तो, हम multithreaded गए, जो अवरोधन समस्या हल किया, और काफी अच्छा प्रदर्शन किया। हालांकि, इसने एक सूक्ष्म दौड़ की स्थिति (असली दुनिया के भार के तहत) पेश की है कि हम अभी तक निदान या पुन: उत्पन्न करने में सक्षम नहीं हैं। दौड़ की स्थिति हमारे एमपी 3 आउटपुट को दूषित करती है।
इसलिए हमने अपाचे/mod_wsgi (अभी भी w/Nginx ऊपर सामने) के पीछे एक सरल डब्लूएसजीआई हैंडलर के रूप में अपना आवेदन सेट करने का निर्णय लिया। यह अवरुद्ध करने की समस्या और दौड़ की स्थिति को समाप्त करता है, लेकिन वास्तविक दुनिया की स्थितियों के तहत सर्वर पर एक कैस्केडिंग लोड बनाता है (यानी अपाचे बहुत अधिक प्रोसेसर बनाता है)। हम अभी अपाचे/mod_wsgi ट्यूनिंग पर काम कर रहे हैं, लेकिन फिर भी एक परीक्षण-और-त्रुटि चरण में। (अपडेट करें: हमने टोरनाडो में वापस स्विच किया है। नीचे देखें।)
अंत में, प्रश्न: क्या हम कुछ याद कर रहे हैं? HTTP पर सीपीयू-महंगे संसाधनों की सेवा करने का कोई बेहतर तरीका है?
अद्यतन: ग्राहम के सूचित आलेख के लिए धन्यवाद, मुझे पूरा यकीन है कि यह एक अपाचे ट्यूनिंग समस्या है। मध्य समय में, हम टोरनाडो का उपयोग करने के लिए वापस चले गए हैं और डेटा भ्रष्टाचार के मुद्दे को हल करने की कोशिश कर रहे हैं।
उन लोगों के लिए जो समस्या पर अधिक लोहा फेंकने के लिए इतने जल्दी थे, टोरनाडो और थोड़ी-थोड़ी-थ्रेडिंग (थ्रेडिंग द्वारा पेश की गई डेटा अखंडता समस्या के बावजूद) लोड को स्वीकार्य रूप से छोटे (एकल कोर) अमेज़ॅन ईसी 2 उदाहरण पर संभाला जाता है ।
उत्कृष्ट लेख। धन्यवाद। यह चाल चल रहा है। –
असल में, मैं इस लिंक को सबसे अच्छे उत्तर के रूप में स्वीकार करने जा रहा हूं, क्योंकि समस्या अपाचे ट्यूनिंग समस्या प्रतीत होती है। –