2010-08-09 19 views
9

मुझे एक वेब सेवा बनाने की ज़रूरत है जो बहुत कम्प्यूटेशनल गहन है, और मैं अपनी बीयरिंग्स को आगे बढ़ने के तरीके पर लेने की कोशिश कर रहा हूं।कम्प्यूटेशनल गहन webservice कैसे बनाएं?

मैं उम्मीद करता हूं कि उपयोगकर्ता मेरी सेवा से जुड़ें, जिस बिंदु पर कुछ गणना कुछ समय के लिए की जाती है, आमतौर पर 60 से कम। उपयोगकर्ता जानता है कि उन्हें प्रतीक्षा करने की ज़रूरत है, इसलिए यह वास्तव में एक समस्या नहीं है। मेरा सवाल यह है कि इस तरह की सेवा तैयार करने और मुझे कम से कम सिरदर्द के साथ छोड़ने का सबसे अच्छा तरीका क्या है? क्या मैं Node.js, web.py, CherryPy, आदि का उपयोग कर सकता हूं? यदि उपयोग किया जाता है तो क्या मुझे इन टुकड़ों के सामने बैठे लोड लोडर की आवश्यकता है? मुझे बड़ी संख्या में उपयोगकर्ताओं, शायद सैकड़ों या हजारों में उम्मीद नहीं है। मुझे निश्चित रूप से उपयोगकर्ताओं की संख्या को होस्ट करने के लिए कई मशीनों की आवश्यकता होगी, लेकिन यह मेरे लिए अनचाहे क्षेत्र है, और यदि कोई मुझे कुछ पॉइंटर्स या चीजों को पढ़ने के लिए दे सकता है, तो यह बहुत अच्छा होगा।

धन्यवाद।

उत्तर

1

मुझे लगता है कि आप इसे जैसे आप चाहें निर्माण कर सकते हैं, जब तक कि तुम इतनी है कि उपयोगकर्ताओं को इंतजार की जरूरत नहीं है यह एक अतुल्यकालिक सेवा कर सकते हैं।

बेशक, उपयोगकर्ताओं को इस संदर्भ में प्रतीक्षा करने में कोई फर्क नहीं पड़ता।

+0

तो, मैं एक Node.js के साथ जाने लगता है - आधारित दृष्टिकोण है, लेकिन बाद में यह तय है कि मैं और अधिक उपयोगकर्ताओं को संभालने के लिए काम पर अधिक मशीनों फेंक की जरूरत है। मैं कैसे स्केल करूं? – user415614

+1

कंप्यूटेशंस करने वाली मशीनों से वास्तविक सेवा कॉल को सारणित करके। यदि आप node.js का उपयोग कर ऐसा कर सकते हैं, तो ठंडा करें। यदि नहीं, तो आपको एक अलग तंत्र चुनने की आवश्यकता हो सकती है। –

1

मैं के रूप में यह फिर से लिखने संभाल कर सकते हैं nginx का उपयोग कर की सलाह देते हैं/balancing/ssl आदि उपद्रव की एक न्यूनतम के साथ

6

मैं Node.js, web.py, CherryPy, आदि का उपयोग कर सकते हैं?

हां। एक चुनें। Django भी अच्छा है।

क्या मुझे इन टुकड़ों के सामने बैठे लोड लोडर की आवश्यकता है?

लगभग कभी

मैं उन की इस संख्या की मेजबानी के लिए मशीनों के एक नंबर की आवश्यकता होगी,

संदिग्ध।

याद रखें कि प्रत्येक वेब लेनदेन में कई अलग-अलग (और लगभग असंबंधित) भाग होते हैं।

  1. एक फ्रंट एंड (अपाचे HTTPD या NGINX या इसी तरह) प्रारंभिक वेब अनुरोध स्वीकार करता है। यह सेवारत स्थैतिक फाइलों (सीएसएस, .जेएस, इमेज इत्यादि) को संभाल सकता है ताकि आपका मुख्य वेब एप्लिकेशन इस से अव्यवस्थित हो।

  2. mod_wsgi जैसे एक उचित कुशल मध्यवर्ती दर्जन (या सैकड़ों) बैकएंड प्रक्रियाओं का प्रबंधन कर सकते हैं।

  3. यदि आप celery जैसे चालाक बैकएंड प्रोसेसिंग घटक चुनते हैं, तो आपको नौकरी पाने के लिए कम से कम प्रोसेसर को "असली काम" वितरित करने में सक्षम होना चाहिए।

  4. परिणाम उपयोगकर्ता के ब्राउज़र mod_wsgi के माध्यम से अपाचे HTTPD (या nginx) में वापस खिलाया जाता है।

अब बैकएंड प्रक्रियाओं (सेलेरी द्वारा प्रबंधित) आवश्यक वेब सर्वर से तलाकशुदा हैं।आप अपाचे HTTPD और mod_wsgi और अजवाइन के साथ समांतरता का एक बड़ा सौदा प्राप्त करते हैं जिससे आप प्रोसेसर संसाधन के प्रत्येक स्क्रैप का उपयोग कर सकते हैं।

आगे, आप समानांतर प्रक्रियाओं में अपनी "कम्प्यूटेशनल गहन" प्रक्रिया को विघटित करने में सक्षम हो सकते हैं - यूनिक्स पाइपलाइन उल्लेखनीय रूप से कुशल है और सभी उपलब्ध संसाधनों का उपयोग करती है। आपको अपनी समस्या को step1 | step2 | step3 में विघटित करना होगा और सेलेरी को उन पाइपलाइनों को प्रबंधित करना होगा।

हो सकता है कि अपघटन इस तरह का एक दूर बड़ी काम का बोझ की तुलना में आप मूल रूप से सोचा हो सकता है की सेवा की ओर जाता है।

कई अजगर वेब चौखटे कोई एक सामान्य डेटाबेस में उपयोगकर्ता के सत्र जानकारी रखेंगे। इसका मतलब यह है कि आपके बैकेंड के सभी कर सकते हैं - किसी भी असली काम के बिना - उपयोगकर्ता के सत्र वेब सर्वर से वेब सर्वर पर ले जाते हैं, बनाने "लोड संतुलन" सहज और स्वत:। बस बहुत सारे HTTPD/NGINX फ्रंट-एंड हैं जो Django (या web.py या जो कुछ भी) उत्पन्न करते हैं जो सभी एक सामान्य डेटाबेस साझा करते हैं। यह उल्लेखनीय रूप से अच्छी तरह से काम करता है।

+0

मैं सेलेरी का उपयोग करने या नौकरियों की बैकएंड क्यूइंग के समान ही काम करता हूं जो वास्तविक कार्य करता है। यानी, वेब सर्वर/अनुप्रयोग प्रक्रियाओं में काम न करें। लेकिन वहाँ लंबित अनुरोधों के 1000s कर रहे हैं, मैं वेब अंतरफलक शैली जो काम ट्रिगर कर सकते हैं, लेकिन फिर लौट ब्राउज़र के जवाब सीधे, वेब इंटरफेस प्रगति की जाँच करने के लिए आगे अनुरोध को ट्रिगर के साथ की जांच करेगा। ऐसा इसलिए है क्योंकि WSGI अवरुद्ध प्रकार इंटरफ़ेस प्रक्रिया/थ्रेड संसाधनों की आवश्यकता के कारण लंबे संचालन के लिए अच्छा नहीं है। अगर प्रतीक्षा करने का अनुरोध करना चाहते हैं, तो एसिंक्रोनस वेब/एप्लिकेशन सर्वर का उपयोग करना बेहतर है। –

+0

@ ग्राहम डम्प्लटन: निश्चित रूप से। इसके अलावा, मैं समझता हूं कि अजवाइन ऐसा करता है। –

0

आप अपने वेब sevices बनाना चाहते हैं अतुल्यकालिक आप Twisted कोशिश कर सकते हैं। यह एक फ्रेमवर्क है जो असीमित कार्यों के लिए उन्मुख है और इतने सारे नेटवर्क प्रोटोकॉल लागू करता है। Xml-rpc के माध्यम से यह सेवाएं प्रदान करना इतना आसान है (बस xmlrpc_ को अपनी विधि के उपसर्ग के रूप में रखें)। दूसरी ओर यह सैकड़ों और हजारों उपयोगकर्ताओं के साथ बहुत अच्छी तरह से स्केल करता है।

अजवाइन भी सबसे computionally संवेदनशील कार्यों को अतुल्यकालिक बनाने के लिए एक अच्छा विकल्प है। यह Django के साथ बहुत अच्छी तरह से एकीकृत करता है।

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