2008-09-24 13 views
7

रेल पर रूबी बहुप्रचारित अनुरोध-प्रतिक्रियाओं को बहुत अच्छी तरह से नहीं करता है, या कम से कम, ActiveRecord नहीं करता है।रूबी पर रूबी में थ्रेडिंग, समवर्ती और फोर्क प्रक्रियाओं पर वर्तमान स्थिति क्या हैं?

केवल एक ही एक ही समय में सक्रिय अनुरोध-प्रतिक्रिया की धारणा एक परेशानी जब वेब अनुप्रयोगों जो कांटा बंद एक खोल आदेश है कि खत्म करने के लिए समय लगता है बनाने जा सकता है।

मुझे इस तरह के सेटअप पर आपके कुछ विचार क्या हैं? क्या रेल कुछ अनुप्रयोगों के लिए उपयुक्त नहीं है?

इसके अलावा, रूबी पर रूबी में समेकन के संबंध में वर्तमान स्थिति क्या हैं? सर्वोत्तम प्रथाओं क्या हैं। क्या कमियों के लिए कामकाज हैं?

+0

क्या कोई वेब ढांचा है जो इस तरह की चीज़ पर अच्छा है? –

+0

@ मैट बी यूप, ट्विस्टेड। http://twistedmatrix.com/trac/ –

+0

@matt b जावा सर्वलेट प्रत्येक अनुरोध के लिए एक नया धागा बनाते हैं। –

उत्तर

4

रेल वर्तमान में एक भी एमआरआई (Matz रूबी दुभाषिया) रूबी प्रक्रिया के भीतर समवर्ती अनुरोधों को हैंडल नहीं करता है। प्रत्येक अनुरोध मूल रूप से एक विशाल म्यूटेक्स के साथ लपेटा जाता है। आने वाले रेल 2.2 थ्रेड-सुरक्षित बनाने में बहुत सारे काम चल गए हैं, लेकिन रूबी 1.8x के तहत चलते समय आपको इससे बहुत लाभ नहीं मिलेगा। मैं इस पर टिप्पणी नहीं कर सकता कि रूबी 1.9 अलग होगा क्योंकि मैं इससे बहुत परिचित नहीं हूं, लेकिन शायद मैंने सोचा नहीं होगा।

एक ऐसा क्षेत्र है जो इस संबंध में बहुत आशाजनक दिखता है JRuby का उपयोग कर रेल चल रहा है, क्योंकि आम तौर पर JVM बहु सूत्रण में अच्छा होने के रूप में स्वीकार किया है। सन माइक्रोसिस्टम्स से Arun Gupta ने हाल ही में RailsConf यूरोप में इस सेटअप पर कुछ interesting performance figures दिए।

2

यदि आप खोल में चला पेज (जैसे आप केवल रखरखाव कार्य या कुछ और ट्रिगर कर रहे हैं) के प्रतिपादन के लिए आवश्यक नहीं है, तो आप उन्हें पृष्ठभूमि प्रक्रियाओं के रूप में शुरू करना चाहिए। स्टार्लिंग और वर्कलिंग देखें।

यदि यह अपनी स्थिति पर लागू नहीं होता, आप अपने ऐप सर्वर रन के बारे में सुनिश्चित कई उदाहरण बनाने के लिए होगा। पारंपरिक रूप से लोग Mongrel के कई उदाहरण शुरू करेंगे। लेकिन अब मैं कहूंगा कि ठोस सेटअप करने का सबसे आसान तरीका अब तक Phusion Passenger का उपयोग कर रहा है। यह एक अपाचे मॉड्यूल है जो आपको आसानी से निर्दिष्ट करता है कि आपके ऐप सर्वर के कितने उदाहरण (न्यूनतम और अधिकतम) आप चलाना चाहते हैं। यात्री बाकी करता है। और अगर मैं सही ढंग से याद करता हूं, तो यह प्रेषण अनुरोधों के लिए बेवकूफ राउंड रॉबिन नहीं करता है। मुझे लगता है कि यह उपलब्धता से है।

3

Matz के रूबी 1.8 green threads का उपयोग करता है, और Matz के रूबी 1.9 देशी हे/एस धागे का प्रयोग करेंगे। रुबी 1.8 के अन्य कार्यान्वयन, जैसे जेआरबी और आयरनरुबी, देशी ओ/एस धागे का उपयोग करते हैं। YARV, फिर भी एक और रूबी वीएम के लिए छोटा, मूल ओ/एस धागे का भी उपयोग करता है लेकिन यह सुनिश्चित करने के लिए एक वैश्विक दुभाषिया ताला है कि किसी भी समय केवल एक रूबी धागा निष्पादित हो रहा है।

3

Neverblock जिस तरह से आप कार्यक्रमों लिखने को संशोधित करने के बिना गैर अवरुद्ध कार्यक्षमता के लिए अनुमति देता है। यह वास्तव में एक रोमांचक दिखने वाली परियोजना है, और रूबी 1.8.एक्स पर काम करने के लिए बैकपोर्ट किया गया था (यह रूबी 1.9 के फाइबर पर निर्भर करता है)। यह गैर-अवरुद्ध प्रश्नों को करने के लिए PostgreSQL और MySQL दोनों के साथ काम करता है। benchmarks पागल हैं ...

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