"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > स्केलिंग Node.js अनुप्रयोग: तकनीक, उपकरण और सर्वोत्तम प्रथाएँ

स्केलिंग Node.js अनुप्रयोग: तकनीक, उपकरण और सर्वोत्तम प्रथाएँ

2024-11-07 को प्रकाशित
ब्राउज़ करें:596

Scaling Node.js Applications: Techniques, Tools, and Best Practices

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

Node.js एप्लिकेशन को स्केल क्यों करें?

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

स्केलिंग के दो प्रकार

  1. वर्टिकल स्केलिंग: एकल सर्वर में अधिक पावर (सीपीयू, रैम) जोड़ना। हालाँकि इससे सर्वर क्षमता बढ़ती है, लेकिन इसकी भौतिक सीमाएँ होती हैं।

  2. क्षैतिज स्केलिंग: लोड को वितरित करने के लिए अधिक सर्वर जोड़ना, जिसे आमतौर पर "स्केलिंग आउट" कहा जाता है। यह विधि अधिक लचीली है और अक्सर बड़े पैमाने के सिस्टम के लिए उपयोग की जाती है।

Node.js अनुप्रयोगों को स्केल करने की मुख्य तकनीकें

1. भार संतुलन

लोड संतुलन आने वाले ट्रैफ़िक को कई सर्वरों में वितरित करने का अभ्यास है, जिससे यह सुनिश्चित होता है कि कोई भी सर्वर अभिभूत न हो। यह क्षैतिज स्केलिंग में विशेष रूप से महत्वपूर्ण है, जहां Node.js एप्लिकेशन के कई उदाहरण चल रहे हैं।

उदाहरण: लोड संतुलन के लिए एनजीआईएनएक्स का उपयोग करना

http {
    upstream node_servers {
        server 127.0.0.1:3000;
        server 127.0.0.1:3001;
        server 127.0.0.1:3002;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://node_servers;
        }
    }
}

स्पष्टीकरण:

  • अपस्ट्रीम ब्लॉक कई Node.js उदाहरणों को परिभाषित करता है।
  • आने वाले अनुरोधों को उदाहरणों के बीच वितरित किया जाता है, जिससे प्रदर्शन में वृद्धि होती है।

2. क्लस्टरिंग

Node.js सिंगल-थ्रेडेड है, लेकिन क्लस्टर मॉड्यूल आपको समान सर्वर पोर्ट साझा करने वाली चाइल्ड प्रोसेस बनाकर कई सीपीयू कोर का उपयोग करने की अनुमति देता है।

उदाहरण: क्लस्टर मॉड्यूल का उपयोग करना

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

if (cluster.isMaster) {
    // Fork workers.
    for (let i = 0; i  {
        console.log(`Worker ${worker.process.pid} died`);
    });
} else {
    // Workers can share the same port
    http.createServer((req, res) => {
        res.writeHead(200);
        res.end('Hello World');
    }).listen(8000);
}

स्पष्टीकरण:

  • मास्टर प्रक्रिया सीपीयू कोर की संख्या के बराबर कार्यकर्ता प्रक्रियाएं बनाती है।
  • प्रत्येक कर्मचारी आने वाले अनुरोधों को संभालता है, भार को कुशलतापूर्वक वितरित करता है।

3. कैशिंग

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

उदाहरण: कैशिंग के लिए रेडिस का उपयोग करना

const redis = require('redis');
const client = redis.createClient();

function cacheMiddleware(req, res, next) {
    const key = req.url;
    client.get(key, (err, data) => {
        if (err) throw err;
        if (data !== null) {
            res.send(data);
        } else {
            next();
        }
    });
}

app.get('/data', cacheMiddleware, (req, res) => {
    const data = getDataFromDatabase();
    client.setex(req.url, 3600, JSON.stringify(data));
    res.json(data);
});

स्पष्टीकरण:

  • डेटाबेस कॉल करने से पहले मिडलवेयर कैश्ड डेटा के लिए रेडिस की जांच करता है।
  • यदि डेटा कैश नहीं किया गया है, तो यह डेटा लाने के लिए आगे बढ़ता है, इसे कैश करता है, और प्रतिक्रिया भेजता है।

4. स्टेटलेस माइक्रोसर्विसेज

एक अखंड Node.js एप्लिकेशन को स्टेटलेस माइक्रोसर्विसेज में तोड़कर, आप प्रत्येक सेवा को स्वतंत्र रूप से स्केल कर सकते हैं। यह सुनिश्चित करता है कि एप्लिकेशन के एक हिस्से (जैसे, उपयोगकर्ता प्रमाणीकरण) को स्केल करने से अन्य हिस्सों (जैसे, भुगतान प्रसंस्करण) पर असर नहीं पड़ता है।

उदाहरण: माइक्रोसर्विसेज आर्किटेक्चर

  • प्रत्येक माइक्रोसर्विस (प्रमाणीकरण, उत्पाद कैटलॉग, ऑर्डर प्रबंधन) स्वतंत्र रूप से तैनात किया गया है।
  • एपीआई गेटवे या सर्विस मेश सही माइक्रोसर्विस के लिए रूटिंग अनुरोधों को संभालता है।

5. रिवर्स प्रॉक्सी का उपयोग करना

एक रिवर्स प्रॉक्सी सर्वर आपके Node.js सर्वर पर लोड को कम करते हुए, लोड संतुलन, एसएसएल समाप्ति और स्थिर सामग्री परोसने जैसे विभिन्न कार्यों को संभाल सकता है।

उदाहरण: एनजीआईएनएक्स के साथ स्थिर सामग्री परोसना

server {
    listen 80;

    location / {
        proxy_pass http://localhost:3000;
    }

    location /static/ {
        root /var/www/html;
    }
}

स्पष्टीकरण:

  • एनजीआईएनएक्स का उपयोग नोड.जेएस में गतिशील अनुरोधों को प्रॉक्सी करने और सर्वर से सीधे स्थिर फ़ाइलें (सीएसएस, जेएस, छवियां) प्रदान करने के लिए किया जाता है।

Node.js अनुप्रयोगों को स्केल करने के लिए उपकरण

1. पीएम2

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

उदाहरण: किसी एप्लिकेशन को स्केल करने के लिए PM2 का उपयोग करना

# Start the application with cluster mode and 4 instances
pm2 start app.js -i 4

स्पष्टीकरण:

  • पीएम2 एप्लिकेशन के कई उदाहरणों का प्रबंधन करता है, स्वचालित लोड संतुलन और प्रक्रिया निगरानी प्रदान करता है।

2. डॉकर और कुबेरनेट्स

Docker का उपयोग करके अपने एप्लिकेशन को कंटेनरीकृत करना और इसे Kubernetes पर तैनात करना आपको कई सर्वरों पर अपने Node.js एप्लिकेशन को आसानी से स्केल करने की अनुमति देता है। कुबेरनेट्स ऑर्केस्ट्रेशन, लोड संतुलन और स्केलिंग को स्वचालित रूप से संभालता है।

उदाहरण: एक Node.js एप्लिकेशन को डॉकराइज़ करना

# Dockerfile
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]

Node.js अनुप्रयोगों को स्केल करने के लिए सर्वोत्तम अभ्यास

  1. प्रदर्शन की निगरानी करें: प्रदर्शन मेट्रिक्स को ट्रैक करने और बाधाओं की पहचान करने के लिए न्यू रेलिक, डेटाडॉग, या प्रोमेथियस जैसे टूल का उपयोग करें।
  2. एसिंक्रोनस प्रोग्रामिंग का उपयोग करें: Node.js तब सबसे अच्छा प्रदर्शन करता है जब I/O संचालन जैसे कार्यों को एसिंक्रोनस रूप से नियंत्रित किया जाता है। इवेंट लूप को ब्लॉक करने से बचें।
  3. डेटाबेस क्वेरीज़ को अनुकूलित करें: डेटाबेस लोड को कम करने के लिए कनेक्शन पूलिंग, इंडेक्स और कैशिंग का उपयोग करें।
  4. ऊर्ध्वाधर स्केलिंग पर क्षैतिज स्केलिंग: क्षैतिज स्केलिंग (अधिक सर्वर जोड़ना) ऊर्ध्वाधर स्केलिंग (सर्वर संसाधनों में वृद्धि) की तुलना में अधिक लचीलापन और दोष सहनशीलता प्रदान करता है।
  5. सेवाओं को स्टेटलेस रखें: स्टेटलेस सेवाओं को स्केल करना आसान होता है क्योंकि वे अनुरोधों के बीच मेमोरी स्थिति पर निर्भर नहीं होते हैं। सत्र प्रबंधन के लिए रेडिस या डेटाबेस जैसे बाहरी सिस्टम का उपयोग करें।

निष्कर्ष

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

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/imsushant12/scaleing-nodejs-applications-techniques-tools-and-best-practices-3344?1 यदि कोई उल्लंघन है, तो कृपया हटाने के लिए स्टडी_गोलंग@163.com पर संपर्क करें यह
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3