मल्टी-कोर मशीनों पर Node.js


605

Node.js दिलचस्प लगता है, लेकिन मुझे कुछ याद करना चाहिए - क्या Node.js केवल एक ही प्रक्रिया और थ्रेड पर चलने के लिए तैयार नहीं है?

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

Node.js इस चित्र में कैसे फिट होता है? क्या इसका विचार किसी भी तरह कई उदाहरणों को वितरित करना है या क्या?


4
ऐसा लग रहा है कि Ryah को नोड में बिल्ट-इन मल्टी-कोर सपोर्ट सहित गंभीर होना शुरू हो रहा है: github.com/joyent/node/commit/…
broofa

2
PM2 प्रक्रिया प्रबंधक उपलब्ध सभी कोर के लिए अपने नोड्स ऐप्स को फैलाने के लिए आंतरिक रूप से क्लस्टर मॉड्यूल का उपयोग करें: github.com/Unitech/pm2
यूनिटेक

@broofa, वे असली धागे नहीं हैं और बच्चे की प्रक्रियाओं में कोई साझा स्मृति नहीं है। यह भी देखें कि जावा के वास्तविक थ्रेडिंग और वाष्पशील-स्थिर चर के समतुल्य Nodejs क्या है?
पचेरियर

जवाबों:


696

[ यह पोस्ट 2012-09-02 (ऊपर से नया) के रूप में अद्यतित है। ]

Node.js बिल्कुल मल्टी-कोर मशीनों पर स्केल करता है।

हां, Node.js एक-धागा-प्रति-प्रक्रिया है। यह एक बहुत ही जानबूझकर किया गया निर्णय है और लॉकिंग शब्दार्थ से निपटने की आवश्यकता को समाप्त करता है। यदि आप इससे सहमत नहीं हैं, तो आप शायद अभी तक महसूस नहीं करते हैं कि बहु-सूत्रित कोड को डीबग करना कितना कठिन है। Node.js प्रक्रिया मॉडल की गहन व्याख्या के लिए और यह इस तरह से काम करता है (और यह कई थ्रेड का समर्थन क्यों करेगा), मेरी अन्य पोस्ट पढ़ें ।

तो मैं अपने 16 कोर बॉक्स का लाभ कैसे उठाऊं?

दो तरीके:

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

एक webservice पर स्केलिंग थ्रूपुट

चूंकि v6.0.X Node.js ने क्लस्टर मॉड्यूल को सीधे बॉक्स से बाहर कर दिया है, जिससे कई नोड कर्मचारियों को सेट करना आसान हो जाता है जो एकल पोर्ट पर सुन सकते हैं। ध्यान दें कि यह पुराने LearnBoost "क्लस्टर" के माध्यम से उपलब्ध मॉड्यूल के रूप में ही नहीं है NPM

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
} else {
  http.Server(function(req, res) { ... }).listen(8000);
}

कार्यकर्ता नए कनेक्शन को स्वीकार करने के लिए प्रतिस्पर्धा करेंगे, और कम से कम भरी हुई प्रक्रिया जीतने की संभावना है। यह बहुत अच्छी तरह से काम करता है और मल्टी-कोर बॉक्स पर थ्रूपुट को अच्छी तरह से स्केल कर सकता है।

यदि आपके पास कई कोर की देखभाल करने के लिए पर्याप्त भार है, तो आप कुछ और चीजें भी करना चाहते हैं:

  1. Nginx या Apache जैसी वेब-प्रॉक्सी के पीछे अपनी Node.js सेवा चलाएं - ऐसा कुछ जो कनेक्शन थ्रॉटलिंग कर सकता है (जब तक कि आप बॉक्स को पूरी तरह से नीचे लाने के लिए अधिभार की स्थिति नहीं चाहते हैं), URL को फिर से लिखें, स्थिर सामग्री परोसें, और प्रॉक्सी अन्य उप-सेवाओं की सेवा लें।

  2. समय-समय पर अपने कार्यकर्ता प्रक्रियाओं को रीसायकल करें। लंबे समय तक चलने वाली प्रक्रिया के लिए, यहां तक ​​कि एक छोटी सी स्मृति रिसाव भी अंततः जोड़ देगा।

  3. लॉग संग्रह / निगरानी सेट करें


पुनश्च: एक और पोस्ट की टिप्पणियों में हारून और क्रिस्टोफर के बीच चर्चा है (इस लेखन के रूप में, इसकी शीर्ष पोस्ट)। उस पर कुछ टिप्पणियां:

  • एक साझा सॉकेट मॉडल एक एकल पोर्ट पर कई प्रक्रियाओं को सुनने और नए कनेक्शन स्वीकार करने के लिए प्रतिस्पर्धा करने की अनुमति देने के लिए बहुत सुविधाजनक है। वैचारिक रूप से, आप पूर्वगामी अपाचे के बारे में सोच सकते हैं कि यह महत्वपूर्ण चेतावनी के साथ कर रहा है कि प्रत्येक प्रक्रिया केवल एक ही कनेक्शन को स्वीकार करेगी और फिर मर जाएगी। अपाचे के लिए दक्षता हानि नई प्रक्रियाओं का सामना करने के ओवरहेड में है और सॉकेट संचालन से कोई लेना-देना नहीं है।
  • Node.js के लिए, N श्रमिकों का एकल सॉकेट पर प्रतिस्पर्धा करना एक अत्यंत उचित समाधान है। वैकल्पिक है कि नग्नेक्स की तरह एक ऑन-बॉक्स फ्रंट-एंड स्थापित करना है और व्यक्तिगत श्रमिकों के लिए प्रॉक्सी ट्रैफ़िक है, नए कनेक्शन असाइन करने के लिए श्रमिकों के बीच बारी-बारी से। दो समाधानों में बहुत समान प्रदर्शन विशेषताएं हैं। और जब से, जैसा कि मैंने ऊपर उल्लेख किया है, तो आप अपनी नोड सेवा को फिर से शुरू करने के लिए Nginx (या एक वैकल्पिक) का उपयोग करना चाहते हैं, यहाँ चुनाव वास्तव में के बीच है:

साझा पोर्ट: nginx (port 80) --> Node_workers x N (sharing port 3000 w/ Cluster)

बनाम

व्यक्तिगत पोर्ट: nginx (port 80) --> {Node_worker (port 3000), Node_worker (port 3001), Node_worker (port 3002), Node_worker (port 3003) ...}

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


1
क्या आप एक बॉक्स पर विभिन्न नोड्ज आधारित सेवाओं को चलाने के लिए कोई सलाह दे सकते हैं? उदाहरण के लिए, मेरे पास 1 सर्वर है, और CpuCore1 पर myservice1.js और CpuCore2 पर myservice2.js चलाना चाहते हैं। क्या मैं इसके लिए क्लस्टर का उपयोग कर सकता हूं? या यह केवल क्लोन सेवाओं को बनाने के लिए उपयोगी है?
उपराष्ट्रपति

6
आपको उसके लिए एक प्रश्न पोस्ट करना चाहिए! (और मैं इस टिप्पणी को आपके 1 उत्तर के रूप में कॉपी करूँगा)। आप जो करना चाहते हैं वह वास्तव में वास्तव में बहुत सरल है। आपको वास्तव में "क्लस्टर" की आवश्यकता नहीं होगी, आप सिर्फ दो अलग-अलग नोड सेवाएं चलाएंगे। दो स्क्रिप्ट, दो प्रक्रिया, दो पोर्ट। उदाहरण के लिए, आप 3000A पर सेवा सुन सकते हैं और 3001 पर सेवाबी सुन सकते हैं। उन सेवाओं में से प्रत्येक में 1+ कार्यकर्ता और उन्हें समय-समय पर रीसायकल करने के लिए "क्लस्टर" का उपयोग किया जा सकता है, तब आप पोर्ट 80 पर सुनने के लिए और आगे बढ़ने के लिए Nginx को कॉन्फ़िगर कर सकते हैं। आने वाली "होस्ट" हेडर और / या URL पथ के आधार पर सही सेवा।
डेव डॉपसन

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

महान जवाब ddopson। एक ही मशीन पर दो नोड प्रक्रियाओं का एक दूसरे के साथ संचार करने का सबसे अच्छा तरीका क्या है? जब वे एक ही मशीन पर होते हैं तो क्या टीसीपी की तुलना में तेजी से प्रोटोकॉल होता है?
पवनपुत्र

1
@Serob_b - ठीक है, हाँ। कई मशीनों पर Node.js ऐप चलाना बहुत आम है। ऐसा करने के लिए किसी पुस्तकालय की आवश्यकता नहीं है। आप बस कई मशीनों पर अपना कोड चलाते हैं और उनके बीच लोड वितरित करते हैं। अपने सॉफ़्टवेयर को आर्किटेक्चर करना ताकि यह तराजू (यानी, यह राज्य को स्मृति में रखने के बजाय किसी प्रकार की बाहरी डेटा सेवा में संग्रहीत करता है) - यही काम है।
डेव डॉपसन

44

एक विधि सर्वर पर नोड के कई उदाहरणों को चलाने के लिए होगी। और फिर उनके सामने एक लोड बैलेंसर (अधिमानतः एक नॉन-ब्लॉकिंग जैसे नग्नेक्स) डाल दिया जाएगा।


36
n.js लगभग nginx जितना तेज़ है, आप अपने नोड के सामने एक नोड.जेएस लोड बैलेंसर लगा सकते हैं। यदि आप भी चाहते हैं तो सर्वरों के बारे में बताएं :)
mikeal

26
रियान ने विशेष रूप से ऐसा तब तक नहीं करने के लिए कहा जब तक नोड अधिक स्थिर नहीं था। सबसे अच्छा तरीका है नोड के सामने nginx चलाने के लिए।
पुनर्जीवन जुलाब

2
नोड के सामने nginx के लिए के रूप में, यह अगर आप एक स्मृति कतार है जैसे कुछ समस्याओं का समाधान नहीं होगा। 2 नोड उदाहरण एक दूसरे की कतार तक पहुँचने में सक्षम नहीं होंगे।
resopollution

5
साथ ही, nginx HTTP 1.1 का पूरी तरह से समर्थन नहीं करता है, इसलिए WebSockets जैसी चीजों को अनुमानित नहीं किया जा सकता है।
ऐशट्रिस्टोफर

2
@ मिमिकल, रेज़ोपोल्यूशन - मैं निगनेक्स पक्ष में दृढ़ता से हूं। मैंने Node.js को कई बार हार्ड-क्रैश किया (कोई स्टैकट्रेस नहीं है, बस मर जाता है)। मैंने कभी भी निगंक्स को क्रैश नहीं किया है। नगीनेक्स आउट-द-बॉक्स सभी प्रकार के साने थ्रॉटल के साथ कॉन्फ़िगर किया गया है। डिफ़ॉल्ट रूप से Node.js तब तक नए कनेक्शन स्वीकार करना जारी रखेंगे जब तक कि बॉक्स नीचे नहीं जाता है। मैं तनाव-परीक्षण नोड द्वारा एक CentOS5 बॉक्स पर कर्नेल को दुर्घटनाग्रस्त कर दिया (अब वास्तव में ऐसा होने वाला नहीं है)। मैं थोड़ा सा आसपास आया हूं, और मुझे नोड के लिए एक उज्ज्वल भविष्य दिखाई देता है, संभवतः समर्पित एलबी-प्रकार की भूमिकाएं भी। अभी नहीं।
डेव डोपसन

30

रेयान डाहल ने पिछली गर्मियों में Google में दी गई टेक टॉक में इस सवाल का जवाब दिया । विरोधाभास के लिए, "बस कई नोड प्रक्रियाएं चलाएं और उन्हें संवाद करने की अनुमति देने के लिए कुछ समझदार का उपयोग करें। उदाहरण के लिए sendmsg () - शैली IPC या पारंपरिक RPC"।

यदि आप तुरंत अपने हाथों को गंदा करना चाहते हैं, तो स्पार्क 2 फॉरएवर मॉड्यूल देखें। यह कई नोड प्रक्रियाओं को मामूली रूप से आसान बनाता है। यह पोर्ट शेयरिंग की स्थापना को संभालता है, इसलिए वे प्रत्येक को उसी पोर्ट से कनेक्शन स्वीकार कर सकते हैं, और ऑटो-रिस्पॉन्सिंग भी यदि आप यह सुनिश्चित करना चाहते हैं कि प्रक्रिया की मृत्यु होने पर / फिर शुरू हो जाए।

अद्यतन - १०/११/११ : नोड समुदाय में सहमति यह प्रतीत होती है कि क्लस्टर अब प्रत्येक मशीन के लिए कई नोड उदाहरणों के प्रबंधन के लिए पसंदीदा मॉड्यूल है। फॉरएवर भी देखने लायक है।


8
फॉरएवर और क्लस्टर बहुत अलग चीजें करते हैं। तुम भी दोनों का उपयोग कर सकते हैं। हमेशा के लिए मर जाने पर एक प्रक्रिया को पुनः आरंभ करता है। क्लस्टर कई श्रमिकों का प्रबंधन करता है। आप अपनी मास्टर प्रक्रिया को प्रबंधित करने के लिए फॉरएवर का उपयोग करेंगे ...
डेव डॉपसन

4
इसके अलावा, लर्निंगबूस्ट मॉड्यूल को काफी हद तक Node v0.6.x (चेतावनी: एपीआई सतह भिन्न होता है) में पके हुए क्लस्टर के संस्करण द्वारा दबाया गया है
डेव डॉपसन

@broofa Redis या Memcache wile का उपयोग करते हुए कहने की तुलना में डिफ़ॉल्ट IPC कैसे है, जो प्रक्रियाओं के बीच स्ट्रिंग / डेटा / सरणियाँ भेज रहा है? कौन सा रास्ता तेज होगा?
NiCk न्यूमैन

1
@broofa, IPC के पास वास्तविक साझा मेमोरी की तुलना में भारी ओवरहेड्स हैं जो जावा और सी करने में सक्षम हैं।
17

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

20

आप क्लस्टर मॉड्यूल का उपयोग कर सकते हैं । इसकी जाँच करें

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
    // Fork workers.
    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }

    cluster.on('exit', function(worker, code, signal) {
        console.log('worker ' + worker.process.pid + ' died');
    });
} else {
    // Workers can share any TCP connection
    // In this case its a HTTP server
    http.createServer(function(req, res) {
        res.writeHead(200);
        res.end("hello world\n");
    }).listen(8000);
}

13

मल्टी-नोड उन सभी कोर का उपयोग करता है जो आपके पास हो सकते हैं। Http://github.com/kriszyp/multi-node
पर नज़र डालें ।

सरल आवश्यकताओं के लिए, आप विभिन्न पोर्ट नंबरों पर नोड की कई प्रतियां शुरू कर सकते हैं और उनके सामने एक लोड बैलेंसर डाल सकते हैं।


12

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

Node.js में क्लस्टरिंग आपको अलग-अलग प्रक्रियाएँ बनाने की अनुमति देता है जो समान सर्वर पोर्ट को साझा कर सकते हैं। उदाहरण के लिए, यदि हम पोर्ट 3000 पर एक HTTP सर्वर चलाते हैं, तो यह एक सर्वर है जो प्रोसेसर के सिंगल कोर पर सिंगल थ्रेड पर चल रहा है।

नीचे दिखाया गया कोड आपको अपना आवेदन जमा करने की अनुमति देता है। यह कोड Node.js. द्वारा दर्शाया गया आधिकारिक कोड है

var cluster = require('cluster');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
    // Fork workers.
    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }

    Object.keys(cluster.workers).forEach(function(id) {
        console.log("I am running with ID : " + cluster.workers[id].process.pid);
    });

    cluster.on('exit', function(worker, code, signal) {
        console.log('worker ' + worker.process.pid + ' died');
    });
} else {

    //Do further processing.
}

पूर्ण ट्यूटोरियल के लिए इस लेख की जाँच करें


11

जैसा कि ऊपर उल्लेख किया गया है, क्लस्टर सभी कोर में आपके ऐप को स्केल और लोड-बैलेंस करेगा।

जैसे कुछ जोड़ना

cluster.on('exit', function () {
  cluster.fork();
});

किसी भी असफल श्रमिकों को पुनः आरंभ करेगा।

इन दिनों, बहुत से लोग पीएम 2 को भी पसंद करते हैं , जो आपके लिए क्लस्टरिंग को संभालता है और कुछ शांत निगरानी सुविधाएँ भी प्रदान करता है

फिर, क्लस्टरिंग के साथ चलने वाली कई मशीनों के सामने Nginx या HAProxy जोड़ें और आपके पास विफलता के कई स्तर और बहुत अधिक भार क्षमता है।


3
पीएम 2 उत्पादन उपयोग के लिए बहुत अच्छा है। निगरानी उपकरणों ने मुझे ऐप्स के साथ मेमोरी समस्याओं को सुलझाने में मदद की है।
mbokil

7

नोड के भविष्य के संस्करण आपको एक प्रक्रिया को फोर्क करने और इसे संदेश भेजने की अनुमति देंगे और रयान ने कहा कि वह फ़ाइल हैंडलर को साझा करने के लिए कोई रास्ता निकालना चाहता है, इसलिए यह सीधे वेब वर्कर कार्यान्वयन नहीं होगा।

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


7

स्पार्क 2 स्पार्क पर आधारित है जो अब नहीं है। क्लस्टर इसके उत्तराधिकारी हैं, और इसमें कुछ शांत विशेषताएं हैं, जैसे सीपीयू कोर प्रति एक कार्यकर्ता प्रक्रिया को जन्म देना और मृत श्रमिकों को रिहा करना।


मूल प्रश्न और इनमें से बहुत से उत्तर कुछ महीने पुराने हैं और नोड इतनी तेजी से आगे बढ़ रहे हैं कि मैं आपको क्लस्टर के बारे में धुंधला जोड़ने की सराहना करता हूं। क्लस्टर और इसके उदाहरणों को देखने के बाद, यह बिल्कुल वैसा ही दिखता है जैसा कि मैं (या ओपी?) नोड के लिए चाहता हूं, धन्यवाद!
रियाद कल्ला

5

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


1
क्यों नोड कार्यकर्ता example.js नहीं चला सकते हैं, मेरा नोड 0.3.3 पूर्व संस्करण है
गिलिन example

5

यहाँ ब्लॉक पर नया बच्चा LearnBoost का "अप" है

यह "ज़ीरो-डाउनटाइम रीलोड्स" प्रदान करता है और इसके अलावा कई वर्कर्स को सर्वश्रेष्ठ प्रदान करने के लिए कई वर्कर्स बनाता है (डिफ़ॉल्ट रूप से सीपीयू की संख्या, लेकिन यह कॉन्फ़िगर करने योग्य है)।

यह नया है, लेकिन लगता है बहुत स्थिर है, और मैं इसे अपने वर्तमान प्रोजेक्ट्स में खुशी से उपयोग कर रहा हूं।


5

क्लस्टर मॉड्यूल आप अपने मशीन के सभी कोर का उपयोग करने की अनुमति देता है। वास्तव में आप इसका लाभ केवल 2 कमांडों में ले सकते हैं और अपने कोड को छूने के बिना एक बहुत लोकप्रिय प्रक्रिया प्रबंधक pm2 का उपयोग कर सकते हैं

npm i -g pm2
pm2 start app.js -i max

4

आप कई मॉड्यूलों पर अपने नोड.जेएस एप्लिकेशन को ओएस मॉड्यूल के साथ संयोजन पर क्लस्टर मॉड्यूल का उपयोग करके चला सकते हैं, जिसका उपयोग यह पता लगाने के लिए किया जा सकता है कि आपके पास कितने CPU हैं।

उदाहरण के लिए आइए कल्पना करें कि आपके पास एक serverमॉड्यूल है जो बैकएंड पर सरल http सर्वर चलाता है और आप इसे कई सीपीयू के लिए चलाना चाहते हैं:

// Dependencies.
const server = require('./lib/server'); // This is our custom server module.
const cluster = require('cluster');
const os = require('os');

 // If we're on the master thread start the forks.
if (cluster.isMaster) {
  // Fork the process.
  for (let i = 0; i < os.cpus().length; i++) {
    cluster.fork();
  }
} else {
  // If we're not on the master thread start the server.
  server.init();
}


0

वेब-सेवा को कई स्टैंड अलोन सर्वरों के रूप में डिजाइन करना भी संभव है जो यूनिक्स सॉकेट्स को सुनते हैं, ताकि आप डेटा प्रोसेसिंग जैसे कार्यों को अलग प्रक्रियाओं में धकेल सकें।

यह सबसे अधिक स्पष्ट / डेटाबेस वेब सर्वर आर्किटेक्चर के समान है जहां एक cgi प्रक्रिया व्यावसायिक तर्क को संभालती है और फिर एक यूनिक्स सॉकेट के माध्यम से डेटा को डेटाबेस में धकेलती है और खींचती है।

अंतर यह है कि डेटा प्रोसेसिंग को एक पोर्ट पर सुनने वाले नोड वेबसर्वर के रूप में लिखा जाता है।

यह अधिक जटिल है लेकिन अंततः इसके मल्टी-कोर डेवलपमेंट को जाना है। प्रत्येक वेब अनुरोध के लिए कई घटकों का उपयोग करते हुए एक मल्टीप्रोसेस आर्किटेक्चर।


0

NodeJS को प्रत्येक NodeJS प्रक्रिया में चलाने वाले कई बक्से के सामने शुद्ध TCP लोड बैलेंसर (HAProxy) का उपयोग करके कई बक्से में स्केल करना संभव है।

यदि आपके पास सभी सामान्य उदाहरणों के बीच साझा करने के लिए कुछ सामान्य ज्ञान है, तो आप एक केंद्रीय रेडिस स्टोर या इसी तरह का उपयोग कर सकते हैं, जिसे तब सभी प्रक्रिया इंस्टेंसेस (जैसे सभी बॉक्स से) तक पहुँचा जा सकता है


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