Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

मैं अपने सरल एक्सप्रेस ऐप के साथ Node.js क्लस्टर का उपयोग कैसे करूं?

वास्तव में, आपका कार्यभार वास्तव में I/O बाध्य नहीं है:यह जेड-आधारित गतिशील पृष्ठ पीढ़ी की लागत के कारण CPU बाध्य है। मैं आपके जेड टेम्प्लेट की जटिलता का अनुमान नहीं लगा सकता, लेकिन साधारण टेम्प्लेट के साथ भी, HTML पृष्ठ बनाना महंगा है।

अपने परीक्षणों के लिए मैंने इस टेम्पलेट का उपयोग किया:

html(lang="en")
  head
    title Example
  body
    h1 Jade - node template engine
    #container
      ul#users
        each user in items
          li User:#{user}

मैंने रेडिस में आइटम कुंजी में 100 डमी स्ट्रिंग्स जोड़े।

मेरे बॉक्स पर, मुझे 100% पर node.js CPU के साथ 475 req/s मिलता है (जिसका अर्थ है कि इस दोहरे कोर बॉक्स पर 50% CPU खपत)। आइए बदलें:

res.render( 'index', { items: items } );

द्वारा:

res.send( '<html lang="en"><head><title>Example</title></head><body><h1>Jade - node template engine</h1><div id="container"><ul id="users"><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li></ul></div></body></html>' );

अब, बेंचमार्क का परिणाम 2700 req/s के करीब है। तो बाधा स्पष्ट रूप से HTML पृष्ठ के स्वरूपण के कारण है।

इस स्थिति में क्लस्टर पैकेज का उपयोग करना एक अच्छा विचार है, और यह सीधा है। कोड को निम्नानुसार संशोधित किया जा सकता है:

var cluster = require('cluster')

if ( cluster.isMaster ) {
  for ( var i=0; i<2; ++i )
    cluster.fork();
} else {
  var
      express = require( 'express' ),
      app     = express.createServer(),
      redis   = require( 'redis' ).createClient();

  app.configure( function() {
      app.set( 'view options', { layout: false } );
      app.set( 'view engine', 'jade' );
      app.set( 'views', __dirname + '/views' );
      app.use( express.bodyParser() );
  });

  function log( what ) { console.log( what ); }

  app.get( '/', function( req, res ) {
      redis.lrange( 'items', 0, 50, function( err, items ) {
            if( err ) { log( err ); } else {
              res.render( 'index', { items: items } );
            }
      });
  });

  app.listen( 8080 );
}

अब बेंचमार्क का परिणाम 100% CPU खपत के साथ 750 req/s के करीब है (शुरुआती 475 req/s के साथ तुलना करने के लिए)।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. डेटाबेस के रूप में रेडिस

  2. रेडिस से यूनिकोड को एनकैप्सुलेट करना

  3. क्या रेडिस में अन्य लुआ लिपियों में परिभाषित लुआ कार्यों को कॉल करना संभव है?

  4. नोड.जेएस (एक्सप्रेस) के साथ रेडिस का उपयोग करना

  5. साइडकीक को रेल सक्रिय नौकरी के लिए रिकॉर्ड नहीं मिल रहा है