Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Bagaimana cara menggunakan cluster Node.js dengan aplikasi Express sederhana saya?

Sebenarnya, beban kerja Anda tidak benar-benar terikat I/O:itu terikat CPU karena biaya pembuatan halaman dinamis berbasis batu giok. Saya tidak dapat menebak kerumitan template batu giok Anda, tetapi bahkan dengan template sederhana, membuat halaman HTML itu mahal.

Untuk pengujian saya, saya menggunakan template ini:

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

Saya menambahkan 100 string tiruan ke kunci item di Redis.

Di kotak saya, saya mendapatkan 475 req/s dengan node.js CPU pada 100% (yang berarti 50% konsumsi CPU pada kotak dual core ini). Ayo ganti:

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

oleh:

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>' );

Sekarang, hasil benchmark mendekati 2700 req/s. Jadi hambatannya jelas karena pemformatan halaman HTML.

Menggunakan paket cluster dalam situasi ini adalah ide yang bagus, dan sangat mudah. Kode dapat dimodifikasi sebagai berikut:

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 );
}

Sekarang hasil benchmark mendekati 750 req/s dengan konsumsi CPU 100% (dibandingkan dengan 475 req/s awal).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mencoba memulai redis dan resque scheduler dalam tugas menyapu

  2. bagaimana saya bisa membuat sesi bekerja menggunakan redis, express &socket.io?

  3. Mengubah port Redis di Docker Compose tidak berfungsi

  4. simpan rentang ip di Redis

  5. Cara membuat koneksi Redis dengan Master dan Slave