2009-05-10 4 views
9

मैं कई वर्षों के डेस्कटॉप एप्लिकेशन विकास के बाद अपना पहला वेब एप्लिकेशन बना रहा हूं (मैं Django/पायथन का उपयोग कर रहा हूं लेकिन शायद यह एक पूरी तरह से सामान्य प्रश्न है, मुझे यकीन नहीं है)। तो कृपया सावधान रहें - यह एक अति-नौसिखिया प्रश्न हो सकता है ...वेब अनुप्रयोग पृष्ठभूमि प्रक्रिया, नौसिखिया डिजाइन प्रश्न

मेरी उपयोगकर्ता प्रक्रियाओं में से एक में सर्वर में भारी प्रसंस्करण शामिल है (यानी उपयोगकर्ता कुछ इनपुट करता है, सर्वर को इसे संसाधित करने के लिए ~ 10 मिनट की आवश्यकता होती है)। डेस्कटॉप एप्लिकेशन पर, मैं यह करता हूं कि यह उपयोगकर्ता इनपुट को एक म्यूटेक्स द्वारा संरक्षित कतार में फेंक देगा, और उस म्यूटेक्स का उपयोग करके कतार पर कम प्राथमिकता अवरुद्ध करने में एक समर्पित पृष्ठभूमि थ्रेड चल रहा है।

हालांकि वेब एप्लिकेशन में सब कुछ HTTP अनुरोधों के साथ सिंक्रनाइज़ेशन की ओर उन्मुख लगता है।

मान लीजिए कि मैं डेटाबेस को अपनी कतार के रूप में उपयोग करूंगा, पृष्ठभूमि प्रक्रिया चलाने के लिए सबसे अच्छा अभ्यास आर्किटेक्चर क्या है?

उत्तर

7

इस पर विचार के दो स्कूल हैं (कम से कम)।

  1. कतार पर काम फेंको और अपने वेब-स्टैक को संभालने के बाहर कुछ और है।

  2. कतार पर काम फेंको और अपने वेब-स्टैक में कुछ और हैडल करें।

या तो मामले में, आप एक कतार कहीं (जैसे एक डेटाबेस तालिका) में काम इकाइयों बना सकते हैं और कुछ प्रक्रिया उनकी देखभाल करते हैं।

मैं आमतौर पर नंबर 1 के साथ काम करता हूं जहां मेरे पास एक समर्पित विंडोज सेवा है जो इन चीजों का ख्याल रखती है। आप एसक्यूएल नौकरियों या इसी तरह के कुछ के साथ भी ऐसा कर सकते हैं। वेब स्तरीय में -

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

1

आम तौर पर बोलते हुए, मैं एक अलग सर्वर पर पृष्ठभूमि प्रक्रियाओं को चलाने के लिए देखता हूं, खासकर यदि आपके वेब सर्वर के पास कोई प्रकार का भार है।

2

के बाद से:

1) यह एक आम समस्या है,

2) आप नई अपने मंच

रहे हैं - मेरा सुझाव है कि आप करने के लिए अपने मंच के लिए योगदान दिया पुस्तकालयों में देखो कार्य को संभालने के लिए एक समाधान खोजें। कतार और नौकरियों के प्रसंस्करण के अलावा, आप भी करने पर विचार करेंगे:

1) कार्यकर्ता और वेब ढेर के बीच स्थिति संचार। यह वेब पृष्ठों है कि इस काम के लिए प्रतिशत पूरा संख्या दिखाने सक्षम मानव उस काम प्रगति पर है, आदि

2) कैसे सुनिश्चित करना है कि वर्कर प्रोसेस मरता नहीं है सुनिश्चित होगा।

3) एक नौकरी में त्रुटि है तो, कार्यकर्ता प्रक्रिया स्वचालित रूप से समय-समय पर फिर से प्रयास करेगा? यदि कोई नौकरी विफल हो जाती है तो क्या आप या किसी ऑपरेशन व्यक्ति को अधिसूचित किया जाएगा?

4) नौकरियों की संख्या में वृद्धि के रूप में, अतिरिक्त श्रमिकों को समांतरता प्राप्त करने के लिए जोड़ा जा सकता है? या इससे भी बेहतर, क्या श्रमिक अन्य सर्वरों पर जोड़े जा सकते हैं?

यदि आप Django/Python में कोई अच्छा समाधान नहीं ढूंढ पा रहे हैं, तो आप किसी अन्य प्लेटफॉर्म से समाधान को पोर्ट करने पर भी विचार कर सकते हैं। मैं रेल पर रूबी के लिए देरी_job का उपयोग करता हूं। कार्यकर्ता प्रक्रिया को रनिट द्वारा प्रबंधित किया जाता है।

सादर,

लैरी

0

Django में लंबे प्रक्रियाओं चल रहा है: http://iraniweb.com/blog/?p=56

+1

आप पोस्ट के लिए लिंक के बारे में litte नोट जोड़ने होना चाहिए। – Mohamed