हमारे पास रेल एप्लिकेशन (25 मिलियन मासिक उपयोगकर्ताओं) पर एक बड़ी रूबी है, हमारे प्रबंधन ने Node.js में फिर से लिखने का फैसला किया, क्या मैं पागल हूं?


24

कृपया मुझे बताओ अगर:

  • Node.js हमारी साइट को तेज़ बनाएगा!
  • Node.js कम सर्वर संसाधनों का उपभोग करेगा, हम पैसे बचा सकते हैं!
  • Node.js हमें और अधिक उत्पादक बना देगा!
  • Node.js का अर्थ है कि हम क्लाइंट और सर्वर साइड जावास्क्रिप्ट कोड साझा कर सकते हैं।

स्पष्ट करने के लिए, हम एक फ्रंटएंड सर्वर को फिर से लिख रहे हैं, जो एक एपीआई के रूप में हमारे मौजूदा रूबी ऑन रेल एप्लिकेशन से बात करेगा। इस बीच, हम सेवाओं में रेल आवेदन पर हमारी रूबी को रिफलेक्टर करेंगे।

मौजूदा वास्तुकला पर अधिक जानकारी:

  • Memcached एचटीएमएल partials कैशिंग के लिए
  • सत्र के लिए रेडिस , और कुछ संरचित डेटा कैशिंग
  • MySQL एकल मास्टर, कई दास
    • एक बड़ी तालिका है जो बहुत कुछ लिखती है (एक पोल की कल्पना करें)
    • अन्यथा ज्यादातर पढ़ता है।
  • कुछ मेटाडेटा के लिए MongoDB
  • रूबी रेल्स 3.0 पर
  • Nginx और गेंडा

33
शीश, इन सभी हिपस्टर भाषाओं। एक अच्छी तरह से लिखा गया php एप्लिकेशन आसानी से स्केल हो जाएगा, पारंपरिक उपकरण काम करते हैं, उन हिपस्टर्स को अन्यथा आपको बताने न दें।
डार्क नाइट

5
प्रश्न "क्या व्यापार को पर्याप्त धन बचाने के लिए इसे सार्थक बनाने के लिए पैसे बचाएंगे" की तर्ज पर अधिक होना चाहिए? यह 5 साल से अधिक पैसे बचा सकता है, लेकिन पुनर्लेखन महंगा और समय लेने वाला है - जब तक आपका कोड एक भयानक भयानक गड़बड़ नहीं है, मुझे लगता है कि आपके प्रबंधक पागल हो रहे हैं
मिकी सी

4
यदि पुनर्लेखन पर विचार किया जा रहा है, तो आप अपने फ्रंट-एंड को क्लाइंट-साइड जावास्क्रिप्ट पर स्थानांतरित करने पर भी विचार कर सकते हैं, जिसका अर्थ है कि आपके पास अब डायनेमिक फ्रंट-एंड सर्वर नहीं होगा, बस स्टैटिक फाइलें।
जोएरी सेब्रचेट्स

11
@Darknight यह ध्यान में रखते हुए कि एक बिंदु पर PHP हिप्स्टर भाषा थी, और यह दिखाते हुए कि सफल उत्पादों में तैनात लोगों को इसके गोद लेने को बढ़ावा दिया जा सकता है - जबकि पर्ल वेब डेवलपर्स PHP के हिपस्टर्स पर छींटाकशी कर रहे थे।

9
मुझे बहुत आश्चर्य है कि कोई भी जोएल स्पोल्स्की लेख नहीं लाया है चीजें आपको कभी नहीं करनी चाहिए । मैं यह नहीं कह रहा हूं कि सभी पुनर्लेखन बुरे हैं, लेकिन मैं @ मायिक से सहमत हूं कि उन्हें अत्यधिक सावधानी के साथ संपर्क किया जाना चाहिए।
डैन पिचेलमैन

जवाबों:


22

आपके द्वारा पूछे गए अधिकांश प्रश्न बिना संदर्भ के जवाबदेह नहीं हैं, और कमोबेश मूट दिए गए प्रबंधन ने आपके लिए पहले से ही विकल्प बना दिया है ... जब तक आप पूछ नहीं रहे हैं 'क्या मुझे इस सभी बदलावों का सामना करना चाहिए और एक नई नौकरी ढूंढनी चाहिए? ? '

यदि आपका यह कठिन हो रहा है, तो मैं आपको इस विषय पर इस पोस्ट को पढ़ने की सलाह देता हूं: अपनी पवित्रता को खोने के बिना एक ग्राउंड-अप रिवाइराइट कैसे जीवित करें

मैं हाल ही में नोड में सर्वर तर्क का एक बिट फिर से लिखना शुरू कर दिया। js. मुख्य कारण यह था वर्तमान में .NET में लिखा गया है और हम ट्रैक के नीचे एमएस वातावरण से पलायन करना चाहते हैं।

अब तक के मेरे अनुभव सकारात्मक रहे हैं, आपके पास इसके सभी गैर-अवरुद्ध-नेस के साथ प्रारंभिक सीखने की अवस्था होगी, लेकिन एक बार जब आप अतीत में पहुंच जाते हैं तो यह वास्तव में कोड में काफी मजेदार होता है .. मुझे पता है, FUN!

इसका एक डार्क साइड है, हालांकि, हर आदमी और उसका कुत्ता, जिसने जावास्क्रिप्ट के साथ कुछ फ्रंट एंड डेवलपमेंट किया है - और वह हर फ्रंट एंड डेवलपर होगा, मुझे आशा है कि जब आप उस नोड का उल्लेख करते हैं तो थोड़ा उत्साहित हो जाता है। ' हालांकि इसका मतलब यह नहीं है कि फ्रंट एंड डेवलपर्स को अच्छा सर्वर साइड ऐप लिखने के लिए आवश्यक अनुभव होगा।

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

उन लोगों के लिए, जिन्होंने आगे और पीछे दोनों किए हैं - और दोनों का आनंद लेते हैं - मानसिक संदर्भों को सामने से लेकर अंत तक पीछे की भाषाओं में स्विच नहीं करना एक वास्तविक बोनस है जो मुझे लगता है कि अंततः हमारी टीम में ट्रैक के नीचे उत्पादकता को बढ़ावा देगा।


"एक बात के लिए आप मानते हैं कि एक घातक त्रुटि गैर-थ्रेडेड प्रकृति के कारण पूरे एप्लिकेशन को नीचे लाएगी, इसलिए दांव थोड़ा अधिक है और आपको स्पष्ट रूप से सब कुछ जांचना और पकड़ना होगा" - यही मेरी चिंता होगी।
तंबू

हां, उस बयान के साथ मेरा मुख्य बिंदु यह था कि केवल फ्रंट हैंड ही डेवलपर्स आमतौर पर विशेष रूप से उधम मचाते नहीं हैं जब अपवाद हैंडलिंग की बात आती है। चलो, यह लगभग 2017 पहले से ही है!
dave.zap

8

खैर, मुझे नहीं लगता कि आवेदन को फिर से लिखना एक अच्छा विचार था जब तक कि यह खराब प्रदर्शन नहीं करता। अपने सवालों के जवाब देने के लिए:

  1. Node.js जादू नहीं है। आपके एप्लिकेशन में उपयोगकर्ताओं की बड़ी मात्रा है, इसलिए यह सुनिश्चित करने का कोई तरीका नहीं है कि यह इसे तेज़ बना देगा।

  2. खैर, हाँ, Node.js वास्तव में कम सर्वर संसाधनों का उपभोग करता है। तो आप न केवल संसाधनों पर पैसा बचा सकते हैं, बल्कि आप मौजूदा लोगों के साथ भी कर सकते हैं। यह ज्यादातर Node.js. के एकल-थ्रेडेड प्रकृति के कारण है अतिरिक्त थ्रेड्स का कोई ओवरहेड नहीं है।

  3. फिर Node.js जादू नहीं है। ऐसा कहने के बाद, इसमें कुछ सच्चाई हो सकती है। Node.js का एक बहुत सक्रिय समुदाय है जिसने हर संभव कार्य के लिए सैकड़ों मॉड्यूल बनाए हैं। इसलिए यह काफी संभावित है कि अधिकांश काम आपके लिए किया गया है। आपको बस टुकड़ों को एक साथ फिट करने की आवश्यकता है।

  4. सैद्धांतिक रूप से, हाँ। चूंकि Node.js जावास्क्रिप्ट है, आप क्लाइंट और सर्वर के बीच कोड साझा कर सकते हैं। लेकिन मुझे नहीं पता कि यह क्या है जो साझा किया जाएगा। मैंने किसी भी कोड के टुकड़े को नहीं लिखा है जो एक ग्राहक पर पुन: प्रयोज्य हो। चीजें जो हम सर्वर पर करते हैं उनका आमतौर पर क्लाइंट से कोई लेना-देना नहीं होता है। मेरे लिए अधिक महत्वपूर्ण संदर्भ स्विच की कमी है। मुझे क्लाइंट और सर्वर दोनों पर एक ही भाषा में कोड करना आसान लगता है।

चूंकि Node.js एकल-थ्रेडेड है, जब तक कि ऐसा करने के लिए स्पष्ट रूप से कॉन्फ़िगर नहीं किया गया है, यह कई सीपीयू का लाभ नहीं उठा सकता है ।

टिप्पणियों पर भी एक नज़र डालें। वे Node.js. के कामकाज में कुछ अच्छी जानकारी प्रदान करते हैं


16
एक ही धागे के कारण कम संसाधन? आपको क्या लगता है कि वे अतिरिक्त धागे क्या कर रहे होंगे?
जो

@ जहां तक ​​मैं समझता हूं कि वे जोड़ देंगे। नोड js यह एक अनुरोध को जल्द से जल्द निपटाने के लिए सबसे अच्छा अभ्यास है। या तो इसे एक बार में पूरा करके। अगली बार इसे फिर से शुरू करके। ईमानदार नोड js हो। एकमात्र ऐसी तकनीक है जिसके लिए मैंने उत्पादन अनुप्रयोग किए हैं। यदि मैं अन्य सर्वर साइड प्रौद्योगिकियों के साथ तुलना करने के लिए सबसे अच्छा व्यक्ति नहीं हो सकता हूं। यही वजह है कि मैंने तुलना करने से परहेज किया है और बस मुझे लगता है कि मुझे लगता है कि मुझे नोड जेएस के बारे में पता है। मेरा जवाब।
अक्षत जीवन शर्मा

7
हां, एक एकल थ्रेड निश्चित रूप से संसाधन उपयोग को सीमित करता है, क्योंकि सर्वर केवल एक ही घटना लूप पर एक बार में कर सकता है। यह सर्वर के उपयोग को भी सीमित करता है, क्योंकि यह केवल एक ही बार में एक काम कर सकता है। सुविधाओं (सिंगल-थ्रेडेड) और अपसाइड और डाउनसाइड के बजाय केवल अप्साइड्स को कोट करना बहुत महत्वपूर्ण है। Node.js कुछ उपयोगों के लिए अनुकूल है लेकिन यह दूसरों के लिए एक बुरा विचार है। जब आपके एकल-थ्रेडेड नोड सर्वर में क्षमता समस्याएँ होती हैं, तो आपको दूसरा नोड उदाहरण जोड़ना पड़ सकता है। अब आपके पास एक मल्टी-प्रोसेस सर्वर है।
जो

मैं देख रहा हूं कि आपका क्या मतलब है। मैं जल्द ही उत्तर को अपडेट करूंगा (कुछ शोध के बाद
पढ़ूंगा

10
यह केवल सीपीयू के बारे में नहीं है। इसका कारण यह है कि हर अनुरोध को जितनी जल्दी हो सके संभालना महत्वपूर्ण है (एक एकल-थ्रेडेड सिस्टम में कोई अन्य संगामिति के साथ नहीं) क्योंकि सर्वर एक साथ कई अनुरोधों को सेवा नहीं दे सकता है, इसलिए हर अनुरोध को तब तक इंतजार करना पड़ता है जब तक आप सभी को संभाल नहीं लेते। इसके पहले अनुरोध। कंसीडर, सही किया जाता है, कम प्रतीक्षा का मतलब है। थ्रेड्स का उपयोग स्वाभाविक रूप से एक प्रदर्शन नाली नहीं है, और एकल-थ्रेडेडनेस (डिफ़ॉल्ट रूप से या अन्यथा) एक प्रदर्शन लाभ नहीं है।
पीटर होसी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.